- •Лабораторная работа №1 «Определение корня уравнения»
- •Лабораторная работа №2 «Определение корня уравнения методом хорд»
- •«Определение корня уравнения методом деления отрезка пополам»
- •Лабораторная работа №3 «Построение графиков функции, производной и первообразной»
- •Лабораторная работа №4 «Определение максимума функции одной переменной»
- •«Определение максимума функции 2-х переменных»
- •Лабораторная работа №5 «Определение минимума функции одной переменной»
- •«Определение минимума функции нескольких переменных»
- •Лабораторная работа №6 «Полином»
- •Лабораторная работа №7 «Модель подвески трёх масс»
- •3. Граф динамической модели
- •4. Тексты программы «Динамического анализа станка 16к20»
- •8. Результаты расчета по программе
Лабораторная работа №3 «Построение графиков функции, производной и первообразной»
# -*- coding: utf-8 -*- # кодировка
from Tkinter import * #подключение модулей
from bsc_grafik import * #импорт в папку bsc_grafik
from math import* #импорт математических функций
##====================================================== Function
def f(x): return x**2*sin(x) #вызов функции и возврат её
def df(x,f,dx): return (f(x+dx)-f(x-dx))/2/dx значения
def sf(x,f,dx): return (f(x-dx)+f(x))/2*dx
##====================================================== Calculating
bl=Bl('x','y','ys','Y') # создаем объект базы данных
x =2.0 ##2.288930 ##0.0 создаем диапазон изменения переменных
xk=6.0 ##5.086985 ##2.0*pi
dx,s,y=0.01,0.0,f(x) # задаем шаг функции
ys=df(x,f,dx)
bl.add(x=x,y=y,ys=ys,Y=0.0)
while x<=xk: #до тех пор пока истинно условие выполняется оператор
x+=dx # увеличиваем шаг на dx
y,ys=f(x),df(x,f,dx)
s+=sf(x,f,dx)
bl.add(x=x,y=y,ys=ys,Y=s) # добавляем в список значений
##====================================================== Labels
clr,bg=["blue","black","red","green","#0DF","#C06","#A64","#684","#AC3",'red','blue','green'],"White" # список содержащий цвета
bg='Grey' # задаем цвет фона серый
Lbd =[Bd(150,55,'desine_l: наложение графиков',clr[5],bg)]
Lbd+=[Bd(450,55,'desine_l: список списков',clr[5],bg)]
Lbd+=[Bd(800,55,'desine_d: список кортежей',clr[5],bg)] # названия графиков с указанием цветов фона, размеров в пикселях
Lbd+=[Bd(165, 580,"y = [%6.3f %6.3f]" % (min(bl.L['y']),
max(bl.L['y'])),clr[0],bg)]
Lbd+=[Bd(165, 600,"ys= [%6.3f %6.3f]" % (min(bl.L['ys']),
max(bl.L['ys'])),clr[1],bg)]
Lbd+=[Bd(165, 620,"Y = [%6.3f %6.3f]" % (min(bl.L['Y']),
max(bl.L['Y'])),clr[2],bg)]
Lbd+=[Bd(165, 640,"x = [%6.3f %6.3f]" % (min(bl.L['x']),
max(bl.L['x'])),clr[1],bg)]
##====================================================== Tkinter
A,B=1000,700 #Параметры
tk=Tk() #основное окно приложения
tk.title('График функции, производной и первообразной') #заголовок окна
fr=Frame(tk) # рамка
fr.pack() #менеджер геометрии
c=Canvas(fr,bg=bg,width=A,height=B) #рисунок с рамкой размером
А×В с белым фоном
c.pack(expand=1,fill=BOTH) #разместить на свободном
пространстве в обоих
направлениях
##======================================================= Output
mg,xg,yg=0.004,400,200
w=[5,3,2,2,1,1,1,1,1,1,1,1]
clrd=zip(clr,w)
##--------------------------------------------------------------------------------
desine_l(15,130,300,400,(225,225,225),clrd[0:],bl.L['x'],[bl.L['y']],0,50,50,c,1,1)
# положение верхнего левого угла по отношению к канве
# 300, 400 – размеры графика в пикселях
#(225,225,225) – способ описания цвета
# clrd – список цветов, которые необходимы для вывода графиков
# bl.L['x'] – вывод графика по оси x
# 0 – все графики в одном масштабе
# 50,50 – график разлинован горизонтальными и вертикальными линиями с шагом 50
desine_l(15,130,300,400,(255,255,255),clrd[2:],bl.L['x'],[bl.L['Y']],0,50,50,c,1,1)
desine_l(15,130,300,400,(255,255,255),clrd[1:],bl.L['x'],[bl.L['ys']],1,50,50,c,1,1)
##--------------------------------------------------------------------------------
ll=[bl.L['y'],bl.L['ys'],bl.L['Y']]
desine_l(350,130,300,400,(255,255,255),clrd,bl.L['x'],ll,0,50,50,c,1,1)
##--------------------------------------------------------------------------------
ll=[[bl.L['x'],bl.L['y']],[bl.L['x'],bl.L['ys']],[bl.L['x'],bl.L['Y']]]
desine_d(685,130,300,400,(255,255,255),clrd,ll,50,50,c,1,1)
for ibd in Lbd: ibd.show(c) # вывод меток (на канву)
tk.mainloop() # сканирование канвы
