
- •Лабораторная работа №1 «Определение корня уравнения»
- •Лабораторная работа №2 «Определение корня уравнения методом хорд»
- •«Определение корня уравнения методом деления отрезка пополам»
- •Лабораторная работа №3 «Построение графиков функции, производной и первообразной»
- •Лабораторная работа №4 «Определение максимума функции одной переменной»
- •«Определение максимума функции 2-х переменных»
- •Лабораторная работа №5 «Определение минимума функции одной переменной»
- •«Определение минимума функции нескольких переменных»
- •Лабораторная работа №6 «Полином»
- •Лабораторная работа №7 «Модель подвески трёх масс»
- •3. Граф динамической модели
- •4. Тексты программы «Динамического анализа станка 16к20»
- •8. Результаты расчета по программе
Лабораторная работа №4 «Определение максимума функции одной переменной»
# -*- coding: utf-8 -*- # кодировка
from math import * # импорт математических функций
from bsc_grafik import * # импорт в папку bsc_grafik
from bsc_polinom import *
from Tkinter import * # импорт модуля Tkinter (встроенная графичес- кая библиотека)
def f(x):return x**2*sin(x) # задаем функцию
def fl(x,n,dx):
lx,ly=[],[] # определяем два пустых списка
for i in xrange(n+1): # для каждого значения переменной определяем
y=f(x) # расчет значений функции у для каждого x
lx+=[x] # добавляем значение x в список lx
ly+=[y] # добавляем значение y в список ly
x+=dx # увеличиваем значение переменной x на шаг dx
return lx,ly # возвращение значений в программу
x1,x2,e,n=0.5,5.0,0.0000001,1000 # начальная точка x1, конечная точка x2,
точность е, число разбиений n
while 1: # задание цикла
dx=(x2-x1)/n # задаем шаг
lx,ly=fl(x1,n,dx) # производим вычисления и заносим значения в
списки lx и ly
ym=max(ly) #находим максимальное значение среди y в
списке ly
ix=ly.index(ym) #находим для максим. значения ym позицию x
xm=lx[ix] #находим максимальное значение xm среди ix
if dx<=e:break #если шаг dx меньше или равно точности e , то
конец цикла
if xm-dx>x1: #проверка нахождения максимального значения
x1=xm-dx xm в интервале от х1 до х2
if xm+dx<x2:
x2=xm+dx
print x1,x2,xm,ym #вывод на печать x1,x2,xm,ym
print x1,x2,xm,ym
«Определение максимума функции 2-х переменных»
# -*- coding: utf-8 -*- # кодировка
from Tkinter import * # импорт модуля Tkinter (встроенная графическая библиотека)
from bsc_groups import * # импорт в папку bsc_groups
from math import* # импорт математических функций
def f(x1,x2): return x1**2*sin(x1)+x2**3*cos(x2) # вызов функции и возврат значения функции
def f1(xx2,x1,x2): # задание функции по 1-й переменной
S='' # создаем пустую строку
while 1: # до тех пор пока цикл принимает истинное значение, цикл будет выполняться
x=x1
dx=(x2-x1)/n # задание приращения функции
bl.L['x']=[] # пустой список, который сохранит рассчитанные данные
bl.L['y']=[]
while x<=x2: # задание цикла с условием
y=f(x,xx2)
bl.add(x=x,y=y) # заменяем в словаре текущее значение в списке
x+=dx # увеличиваем шаг на dx
ymax=max(bl.L['y']) # поиск в списке макс. значения
i=bl.L['y'].index(ymax) #определение индекса макс. значения
xmax=bl.L['x'][i] # передача значения числа с номером i в макс. значение
x1=xmax-dx
x2=xmax+dx
if (i==0) or (i==len(bl.L['y'])+1): # поиск значений по индексу в пределах границ
S='Граница'
break
print 'x11=%10.6f x12=%10.6f' % (x1,x2) # вывод значений на экран
if x2-x1<e: break # вывод макс. значения на экран при условии x2-x1<e
return xmax,x1,x2,s # возвращение значений в программу
def f2(xx1,x1,x2): # определяем функцию по второй переменной
(все описания аналогичны)
S=''
while 1:
x=x1
dx=(x2-x1)/n # шаг dx
bl.L['x']=[] # очистить метки базы данных
bl.L['y']=[]
while x<=x2: # до тех пор пока истинно условие выполняется оператор
y=f(xx1,x)
bl.add(x=x,y=y) # записать в базу данных
x+=dx # увеличиваем шаг на dx
ymax=max(bl.L['y']) # записываем ymax в соответствующую метку базы данных
i=bl.L['y'].index(ymax)
xmax=bl.L['x'][i] # записываем xmax в подготовленную метку базы данных
x1=xmax-dx # начальная точка1 интервала
x2=xmax+dx # конечная точка2 интервала
if (i==0) or (i==len(bl.L['y'])+1): # если истинно условие, то
S='Граница'
break # завершение цикла
print 'x21=%10.6f x22=%10.6f' % (x1,x2) # вывод значений на экран
if x2-x1<e: break
return xmax,x1,x2,s
x11=0.0 # задание начальных и конечных значений интервала
x12=2.0*pi
x21=0.0
x22=2.0*pi
n=100.0 # задание числа точек разбиения интервала
dx=(x2-x1)/n # вычисление приращения функции
e=0.00001 # задание точности вычислений
bl=Bl('x','y') # задаем объекты, которые будут следить за накапливанием данных
xx2=x21 # новый диапазон интервала
xn1=x11
xn2=x21
while 1: # до тех пор пока цикл принимает истинное значение, цикл будет выполняться
xx1,x11,x12,s=f1(xx2,x11,x12)
if s<>'': break # если s не принимает пустых значений, то выполняем цикл, иначе - прерываем
xx2,x21,x22,s=f2(xx1,x21,x22)
if s<>'': break # если s не принимает пустых значений, то выполняем цикл, иначе - прерываем
xmod=sqrt((xx1-xn1)**2+(xx2-xn2)**2) # нахождение модуля вектора
if xmod<e: break # сравнение модуля вектора с точностью вычислений
print 'x=%10.6f y=%10.6f' % (xmax,ymax) # вывод значений максимума функции на экран