Форум сайта python.su
ну ладно че апож…препод сам просто толком не объяснил задание…
Офлайн
s0rg
а можешь пояснить что означает эта строка ‘My age %d’ % ((6) - 2)
ввод данных ?
Офлайн
Наоборот - вывод )
Офлайн
s0rg
а можешь по подробней объяснить - что за вывод?)))
тоесть её надо решать через “lambdа”? а вот если бы тебе дали такую формулу и сказали найти там корни к примеру - ты как бы её решил ? )
сор еси коряго выражаюсь - что очевидно )
Офлайн
я тут откопал алгоритм какой то с lambda можно подставить мою формулу “100-((x(0)-5)**2+(x(1)-3)**2)” и что получиться ?
import math
x0 = (10,10)
def F(x='',y=''):
k = 4
#f = lambda x,y: 100*(y-x**2)**2 + (1-x)**2 # Rozenbrok
f = lambda x,y: x**4 + 2*k*x**3 - k**2*x**2 - 2*k**3*x + y**4 - y**2*(2*k**2 + 2*k) + 2*k**4 + k**3 + k**2
if not x == '' and not y == '':
return f(x,y)
elif x == '':
return lambda x: f(x,y)
elif y == '':
return lambda y: f(x,y)
else:
return False
def gF(x,y):
return ((F(x+1,y)-F(x,y))/1,(F(x,y+1)-F(x,y))/1)
def min_func(f,point,step):
while True:
if f(point) < f(point+step):
break
point += step
return point
def search_min_of_func(f,point,step):
if f(point+step) < f(point-step):
return min_func(f,point,step)
elif f(point+step) == f(point-step):
if f(point+step) > f(point):
return point
else:
return min_func(f,point,step)
else:
return min_func(f,point,step*(-1))
x1 = [x0[0],x0[1]]
step = 0.0001
while True:
y = search_min_of_func(F(x=x1[0]),x1[1],step)
x = search_min_of_func(F(y=y),x1[0],step)
print x,y
if math.sqrt((x1[0]-x)**2+(x1[1]-y)**2) < 0.00000001:
print x,y
print F(x,y)
break
x1[0] = x
x1[1] = y
Отредактировано (Дек. 5, 2011 08:43:22)
Офлайн
Это уже решение, и вывод соответственно.
Создается список лямбд, берем из него 6-ю и вызываем с аргументом 6 == ‘My age %d’ % (6*4 + 6 - 2)
Офлайн
lambda - это просто анонимная фунция, она не поможет магическим образом решить задачу условия которой непонятны )
Офлайн
а если в формуле заменить х(0)-у, а х(1)-х
“100-((y-5)**2+(x-3)**2)” и что получиться ?
"
Код:
import math
x0 = (10,10)
def F(x='',y=''):
k = 4
#f = lambda x,y: 100*(y-x**2)**2 + (1-x)**2 # Rozenbrok
f = lambda x,y: x**4 + 2*k*x**3 - k**2*x**2 - 2*k**3*x + y**4 - y**2*(2*k**2 + 2*k) + 2*k**4 + k**3 + k**2
if not x == '' and not y == '':
return f(x,y)
elif x == '':
return lambda x: f(x,y)
elif y == '':
return lambda y: f(x,y)
else:
return False
def gF(x,y):
return ((F(x+1,y)-F(x,y))/1,(F(x,y+1)-F(x,y))/1)
def min_func(f,point,step):
while True:
if f(point) < f(point+step):
break
point += step
return point
def search_min_of_func(f,point,step):
if f(point+step) < f(point-step):
return min_func(f,point,step)
elif f(point+step) == f(point-step):
if f(point+step) > f(point):
return point
else:
return min_func(f,point,step)
else:
return min_func(f,point,step*(-1))
x1 = [x0[0],x0[1]]
step = 0.0001
while True:
y = search_min_of_func(F(x=x1[0]),x1[1],step)
x = search_min_of_func(F(y=y),x1[0],step)
print x,y
if math.sqrt((x1[0]-x)**2+(x1[1]-y)**2) < 0.00000001:
print x,y
print F(x,y)
break
x1[0] = x
x1[1] = y
Отредактировано (Дек. 5, 2011 09:04:06)
Офлайн
спс всем кто пытался помочь)
надо вот такую прогу было сделать
# -*- coding: utf-8 -*-
## Метод покоординатного спуска
from Tkinter import *
from math import*
def f(x):
return 100.0-((x[0]-5.0)**2+(x[1]-3.0)**2)
L1=[ 0.0, 0.0, 0.0]
L2=[10.0,10.0,10.0]
Lx,Ln=L1[:],L1[:]
ll=len(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)
i=ly.index(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)
Офлайн
а можете подсказать что надо изменить в коде чтобы графики рисовались в изометрии, и каждый график(их5) рисовался под своим углом ?
# -*- coding: utf-8 -*-
## Метод покоординатного спуска
from Tkinter import *
from math import*
from bsc_grafik import *
def f(x):
return 100-((x[0]-5.0)**2+(x[1]-3.0)**2)
L1=[ 0.0, 0.0]
L2=[10.0,10.0]
L=[]
x=L1[:]
while x[1]<=L2[1]:
x[0]=L1[0]
lx,ly=[],[]
while x[0]<=L2[0]:
y=f(x)
x[0]+=0.1
lx+=[x[0]]
ly+=[y]
L+=[[lx,ly]]
x[1]+=2.5
##print L
##================================================================== Tkinter
A,B = 930,620
tk = Tk()
tk.title("проекция")
f = Frame(tk)
f.pack()
c = Canvas(f, bg="white", width=A, height=B)
c.pack(expand=1, fill=BOTH)
bg,clr='White',['red','blue',"black",'green','red','blue',"black",'green','red','blue',"black",'green','maroon',"#0DF","#C06","#A64","#684","#AC3"]
ww=[4,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
##================================================================== Output
clrd=zip(clr,ww)
desine_d(10,5,900,600,bg,clrd,L,50,50,c,4,1)
##sfr,tt,sfr1="%s %16.8f %16.8f %s\n",'Загрузка\n\n','%s %11.8f\n'
##tt+=sfr % ('x =',min(bd.L['x']),max(bd.L['x']),' ')
##tt+=sfr % ('y =',min(bd.L['y']),max(bd.L['y']),' ')
##tt+=sfr % ('p =',min(bd.L['p']),max(bd.L['p']),' ')
##tt+=sfr % ('x =',x,y,' ')
##tt+='x1=%10.6f, x2=%10.6f, x=%10.6f, y=%10.6f' % (x1,x2,x,y)
##Lbd =[Bd(320,530,tt,'black',bg)]
##for ibd in Lbd: ibd.show(c)
tk.mainloop(1)
Офлайн