Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Задача.
Построить программу, которая вычисляет геометрические характеристики, связанные с линейной функцией общего вида в форме
Y(X) = K*X + L
на заданном интервале
A < X < B
К этим характеристикам относятся:
Порядок выполнения задания.
создать функции:
1)ввода с клавиатуры параметров прямой: пары чисел (K,L) (функция GetKL());
2)ввода значений интервала изучения функции: пары чисел (A,B) (GetAB());
3)вычисления области изменения функции на оси OY (Y(A),Y(B))(функция
CalcYAB(). Какое-то из этих значений будет минимумом, тогда другое
Максисумом
4)вычисления расстояние между точками (A,Y(A)) и (B, Y(B))по формуле
5)вычисления точки пересечения прямой с осью OX (функция Zero());
6)вычисления первообразной для уравнения прямой для вычисления площадей. Проинтегрировав уравнение прямой получим первообразную:
+ const
(функция Fint())
Все остальное делаем в основной программе:
# вводим параметры прямой (K,L)
KL = GetKL()
# вводим границы интервала (А, В)
AB = GetAB()
# вычисляем область изменения функции (Y(A),Y(B)) (вход параметры функции и границы интервала)
YAB = CalcYAB(line,limitX)
# вычисляем длину участка прямой
D = LineLen(AB, YAB)
# в зависимости от попадания нуля функции в интервал области аргументов
Вычисляем либо одно значение площади, либо два суммируем
Текст программы
# -*- coding: utf-8 -*-
# строка выше допускает кирилличные символы
# будут нужны математичесие функции
from math import *
# вводем характеристики линии
def GetKL():
print "Задайте характеристики линии y = k*x+l в форме: (k,l}"
return [float(raw_input("inclination =")),float(raw_input("shift ="))]
# вводим границы интервала
def GetAB():
print "Задайте промежуток в форме: (left,right}"
A = float(raw_input("left ="))
B= float(raw_input("right ="))
print "left,right: = ",A,',', B
return [A, B]
# вычисляем значения функции на границах интервала (два первых значения)
# и в точке пересечения с осью oX (третье значение)
def CalcYAB(KL,AB):
return [KL[0]*AB[0]+KL[1],KL[0]*AB[1]+KL[1]]
# Вычисляем длину участка линии на заданном интервале
def LineLen(AB, YAB):
return sqrt((AB[1]-AB[0])**2+(YAB[1]-YAB[0])**2)
# Вычисляем точку пересечения прямой с осью oX
def Zero(KL):
if ((abs(KL[0]))<0.1e-8):
print "прямая вероятно параллельна оси OX"
return None
else:
return -KL[1]/KL[0]
# вычисляем первообразную от линейной функции k*x+l
def Fint(KL,x):
return 0.5*KL[0]*x*x+KL[1]*x
#==================================================================
# тело программы
#==================================================================
# задаем параметры прямой
KL = GetKL()
print "(K,L) = ", KL
# задаем границы интервала определения
AB = GetAB()
# вычисляем область изменения функции
YAB = CalcYAB(KL,AB)
# вычисляем длину участка прямой
print "Длина участка прямой = ", LineLen(KL, AB)
# определяем минимальное и максимальное значения (на границах интервала)
min = YAB[0]
max = YAB[1]
if (min > max):
min,max = max,min
print "на участке исследования: max = ", max, ", min = ", min
# Вычисляем координату нуля функции
zero = Zero(line)
print "координата нуля функции Х =", zero
# в зависимости от положения нуля вычисляем значения площадей
if((AB[2]<zero) or (zero >AB[1])):
print "Нуль функции находится вне рассматриваемого участка"
S = abs(Fint(KL, AB[1]) - Fint(KL, AB[0]))
print "Значение искомой площади = ", S
else:
print "Нуль функции находится внутри рассматриваемого участка"
firstInt = abs(Fint(KL, zero) - Fint(KL, AB[0]))
secondInt = abs(Fint(KL, AB) - Fint(KL, zero))
S = firstInt + secondInt
print "Значение искомой площади = ", S
То же самое через классы
# -*- coding: utf-8 -*-
from math import *
class Passport():
def __init__(self,F='name'):
self.F = F
self._GetKL()
self._GetAB()
self.zero = self._ZeroY()
def _GetKL(self):
print "Задайте характеристики линии y = k*x+l в форме: (k,l}"
self.K = float(raw_input("inclination ="))
self.L = float(raw_input("shift ="))
def _GetAB(self):
print "Задайте промежуток в форме: (left,right}"
self.A = float(raw_input("left ="))
self.B = float(raw_input("right ="))
def CalcLY(self):
self.FA = self.K*self.A + self.L
self.FB = self.K*self.B + self.L
def LineLen(self):
return sqrt((self.B-self.A)**2+(self.FB-self.FA)**2)
def _ZeroY(self):
return -self.L/self.K
def _Fint(self,x):
return 0.5*self.K*x*x+self.L*x
def MinMax(self):
min = self.FA
max = self.FB
if (min > max):
min, max = max, min
return (min, max)
def Square (self):
zero = self._ZeroY()
if ((zero < self.A) or (zero > self.B)):
S = abs(self._Fint(self.FB) - self._Fint(self.FA))
else:
firstInt = abs(self._Fint(zero) - self._Fint(self.FA))
secondInt = abs(self._Fint(self.FB) - self._Fint(zero))
S = firstInt + secondInt
return S