
- •Лабораторная работа №1 «Определение корня уравнения»
- •Лабораторная работа №2 «Определение корня уравнения методом хорд»
- •«Определение корня уравнения методом деления отрезка пополам»
- •Лабораторная работа №3 «Построение графиков функции, производной и первообразной»
- •Лабораторная работа №4 «Определение максимума функции одной переменной»
- •«Определение максимума функции 2-х переменных»
- •Лабораторная работа №5 «Определение минимума функции одной переменной»
- •«Определение минимума функции нескольких переменных»
- •Лабораторная работа №6 «Полином»
- •Лабораторная работа №7 «Модель подвески трёх масс»
- •3. Граф динамической модели
- •4. Тексты программы «Динамического анализа станка 16к20»
- •8. Результаты расчета по программе
Лабораторная работа №5 «Определение минимума функции одной переменной»
# -*- coding: utf-8 -*-
from Tkinter import *
from math import*
def f(x): return x**2*sin(x)
def fl(x,x2,dx):
lx,ly=[],[]
while x<=x2:
y=f(x)
lx+=[x]
ly+=[y]
x+=dx
return lx,ly
x1,x2=0.0,2.0*pi
n,e=1000.0,0.0000001
while 1:
dx=(x2-x1)/n
lx,ly=fl(x1,x2,dx)
ymax=max(ly)
i=ly.index(ymax)
if (i==0) or (i==len(ly)+1): break
xmax=lx[i]
x1=xmax-dx
x2=xmax+dx
dx=(x2-x1)/n
print 'x1=%15.10f x2=%15.10f' % (x1,x2)
if x2-x1<e: break
print 'max: xm=%15.10f ym=%15.10f' % (xmax,ymax)
«Определение минимума функции нескольких переменных»
# -*- coding: utf-8 -*- #кодировка
## Метод покоординатного спуска
from Tkinter import * #импорт модуля Tkinter (встроенная
графическая библиотека)
from math import* # импорт математических функций
def f(x):
return 100.0-((x[0]-5.0)**2+(x[1]-3.0)**2+(x[2]-4.0)**2)
# вызов функции и возврат её значения
L1=[ 0.0, 0.0, 0.0] # создаем список L1из трёх элементов
L2=[10.0,10.0,10.0] # создаем список L2 из трёх чисел, равных 10.0
Lx,Ln=L1[:],L1[:]
ll=len(L1) # находим длину списка L1 (число элементов)
def ff(j,L1,L2,Lx): # вызов функции
n,e=1000.0,0.000000001 # количество делений (шагов), точность подсчета
x1,x2=L1[j],L2[j]
while 1: # пока истинно условие выполняется оператор
lx,ly,x,dx=[],[],x1,(x2-x1)/n # опустошить метки базы данных, назначить шаг
while x<=x2: # пока истинно условие выполняется оператор
Lx[j]=x
lx+=[x]
ly+=[f(Lx)]
x+=dx # следующий х
ymax=max(ly) # найти максимальное значение из списка ly
i=ly.index(ymax) # найти индекс максимального значения ymax
xmax=lx[i]
Lx[j]=xmax
if dx<=e: break # если шаг меньше, либо равно точности подсчета, то конец цикла
if i==0: x1,x2=xmax,xmax+dx # если истинно условие, то
elif i==len(ly)+1: x1,x2=xmax-dx,xmax
else: x1,x2=xmax-dx,xmax+dx
return Lx # возврат значений
while 1: # пока истинно условие выполняется оператор
for j in xrange(ll): Lx=ff(j,L1,L2,Lx)
v=0.0
for j in xrange(ll): v+=(Lx[j]-Ln[j])**2
v=pow(v,0.5)
print 'x1=%11.8f x2=%11.8f x3=%11.8f v=%11.8f' % (Lx[0],Lx[1],Lx[2],v)
if v<e: break
Ln=Lx[:]
print '________'*8 # печать значений
print 'x1=%11.8f x2=%11.8f x3=%11.8f v=%11.8f' % (Lx[0],Lx[1],Lx[2],v)
Лабораторная работа №6 «Полином»
# -*- coding: utf-8 -*-
from math import *
from numpy import *
from numpy.oldnumeric.linear_algebra import *
def P(x,k):
s=0.0
for i in k: s=s*x+i
return s
def fmax(x1,x2,e,n,a):
dx=(x2-x1)/n
while 1:
lx,ly,x=[],[],x1
while x<=x2:
y=P(x,a)
lx+=[x]
ly+=[y]
x+=dx
ymax=max(ly)
i=ly.index(ymax)
xmax=lx[i]
x1,x2=xmax-dx,xmax+dx
dx=(x2-x1)/n
if i==0: x1=xmax
if i==len(ly)+1: x2=xmax
if x2-x1<e: return (x1+x2)/2.0
def fmin(x1,x2,e,n,a):
dx=(x2-x1)/n
while 1:
lx,ly,x=[],[],x1
while x<=x2:
y=P(x,a)
lx+=[x]
ly+=[y]
x+=dx
ymax=min(ly)
i=ly.index(ymax)
xmax=lx[i]
x1,x2=xmax-dx,xmax+dx
dx=(x2-x1)/n
if i==0: x1=xmax
if i==len(ly)+1: x2=xmax
if x2-x1<e: return (x1+x2)/2.0
def fzero(x1,x2,e,a):
y1,y2=P(x1,a),P(x2,a)
if y1*y2>0:
return (x1+x2)/2.0,(y1+y2)/2.0
while 1:
x3=0.5*(x1+x2)
y3=P(x3,a)
if y1*y3<0.0: x2,y2=x3,y3
else: x1,y1=x3,y3
if abs(x2-x1)<e: return x3,y3
def polinom(x,y,nn):
mx,myx,my,nn2=[],[],0.0,nn*2
for i in xrange(nn2): mx+=[0.0]
for i in xrange(nn): myx+=[0.0]
n,lx=nn2,[]
while n>0:
lx+=[n]
n-=1
n,ly=nn,[]
while n>0:
ly+=[n]
n-=1
n=0.0
for i,j in zip(x,y):
for k in xrange(nn2): mx[k] +=pow(i,lx[k])
for k in xrange(nn): myx[k]+=j*pow(i,ly[k])
my+=j
n+=1.0
lmx=[]
lmyx=[]
for i in mx: lmx.append(i/n)
for i in myx: lmyx.append(i/n)
my/=n
sa=[]
for i in xrange(nn+1):
i2=i+nn+1
if i2>nn2: i2=nn2
sd=lmx[i:i2]
if len(sd)<nn+1: sd+=[1.0]
sa+=[sd]
lmyx+=[my]
Ma = array((sa))
Mb = array((lmyx))
Mx = solve_linear_equations(Ma,Mb)
return Mx