Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет для Буйного(пример).doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
387.58 Кб
Скачать

Лабораторная работа №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