Zad1iKartkaXX-XXI

2693 days ago by aweber

var('x,y,z,a,b,wartosc') f=x*y*z g=x+y+z-1 h=x^2+y^2+z^2-1 print 'Szukanie maksimum funkcji f(x,y,z)=',f print 'na zbiorze opisanym przez' print 'g=',g,'=0' print 'h=',h,'<=0' fx=diff(f,x); #pochodne cząstkowe f fy=diff(f,y); fz=diff(f,z); print 'grad(f)=',[fx,fy,fz]; gx=diff(g,x) #pochodne cząstkowe więzow g gy=diff(g,y) gz=diff(g,z) print 'grad(g)=',[gx,gy,gz] hx=diff(h,x) #pochodne cząstkowe więzow h hy=diff(h,y) hz=diff(h,z) print 'grad(h)=',[hx,hy,hz] 
       
Szukanie maksimum funkcji f(x,y,z)= x*y*z
na zbiorze opisanym przez
g= x + y + z - 1 =0
h= x^2 + y^2 + z^2 - 1 <=0
grad(f)= [y*z, x*z, x*y]
grad(g)= [1, 1, 1]
grad(h)= [2*x, 2*y, 2*z]
rownania1=[f==wartosc,g==0, a*gx==fx, a*gy==fy, a*gz==fz] print 'UKŁAD RÓWNAŃ' for r in rownania1: print r 
       
UKŁAD RÓWNAŃ
x*y*z == wartosc
x + y + z - 1 == 0
a == y*z
a == x*z
a == x*y
rozwiazania1wszystkie=solve(rownania1,wartosc,x,y,z,a,solution_dict=True) rozwiazania1=[] for r in rozwiazania1wszystkie: if h.subs(x=r[x], y=r[y], z=r[z])<0: rozwiazania1=rozwiazania1+[r] print 'ROZWIĄZANIA'; for r in rozwiazania1: print 'dla',(r[x],r[y],r[z]),'wartość funkcji',r[wartosc] 
       
ROZWIĄZANIA
dla (1/3, 1/3, 1/3) wartość funkcji 1/27
print 'Trzeba jeszcze znaleŸć punkty zbioru {g=0} w których grad(g)=0.' rownania2=[f==wartosc, g==0, gx==0, gy==0, gz==0] print 'UKŁAD RÓWNAŃ' for r in rownania2: print r rozwiazania2=solve(rownania2,wartosc,x,y,z)#solution_dict=True) #for r in rozwiazania2: print 'dla',(r[x],r[y],r[z]),'wartość funkcji',r[wartosc] if rozwiazania2==[ ]: print 'W tym zadaniu nie ma takich punktów.' 
       
Trzeba jeszcze znaleŸć punkty zbioru {g=0} w których grad(g)=0.
UKŁAD RÓWNAŃ
x*y*z == wartosc
x + y + z - 1 == 0
1 == 0
1 == 0
1 == 0
W tym zadaniu nie ma takich punktów.
print 'Badamy ekstrema na brzegu zbioru, który leży w płaszczyźnie x+y+z=1' rownania3=[wartosc==f, g==0, h==0, fx==a*gx+b*hx, fy==a*gy+b*hy, fz==a*gz+b*hz] print 'UKŁAD RÓWNAŃ'; for r in rownania3: print r 
       
Badamy ekstrema na brzegu zbioru, który leży w płaszczyźnie x+y+z=1
UKŁAD RÓWNAŃ
wartosc == x*y*z
x + y + z - 1 == 0
x^2 + y^2 + z^2 - 1 == 0
y*z == 2*b*x + a
x*z == 2*b*y + a
x*y == 2*b*z + a
rozwiazania3=solve(rownania3,wartosc,x,y,z,a,b,solution_dict=True) print 'Rozwiazania' for r in rozwiazania3: print 'dla',(r[x],r[y],r[z]),'wartość funkcji',r[wartosc] 
       
Rozwiazania
dla (2/3, -1/3, 2/3) wartość funkcji -4/27
dla (0, 1, 0) wartość funkcji 0
dla (2/3, 2/3, -1/3) wartość funkcji -4/27
dla (0, 0, 1) wartość funkcji 0
dla (1, 0, 0) wartość funkcji 0
dla (-1/3, 2/3, 2/3) wartość funkcji -4/27
print 'Jeszcze trzeba sprawdzić , czy nie ma punktów osobliwych na brzegu' rownania4=[wartosc==f, g==0, h==0, gx==a*hx, gy==a*hy, gz==a*hz] print 'UKŁAD RÓWNAŃ' for r in rownania4: print r rozwiazania4=solve(rownania4,wartosc,x,y,z,a)#solution_dict=True) #for r in rozwiazania4: print 'dla',(r[x],r[y],r[z]),'wartość funkcji',r[wartosc] if rozwiazania4==[ ]: print 'W tym zadaniu nie ma takich punktów.' 
       
Jeszcze trzeba sprawdzić , czy nie ma punktów osobliwych na brzegu
UKŁAD RÓWNAŃ
wartosc == x*y*z
x + y + z - 1 == 0
x^2 + y^2 + z^2 - 1 == 0
1 == 2*a*x
1 == 2*a*y
1 == 2*a*z
W tym zadaniu nie ma takich punktów.
rozwiazania=rozwiazania1+rozwiazania2+rozwiazania3+rozwiazania4 wartosci=[rozwiazanie[wartosc] for rozwiazanie in rozwiazania] print 'WARTOSCI' print wartosci print 'MAKSIMUM', max(wartosci) print 'MINIMUM', min(wartosci) 
       
WARTOSCI
[1/27, -4/27, 0, -4/27, 0, 0, -4/27]
MAKSIMUM 1/27
MINIMUM -4/27
print 'RZUT NA PŁASZCZYZNĘ (X,Y) z podstawieniem z=1-x-y' poziomice=contour_plot(f.subs(z=1-x-y),(x,-0.5,1.02),(y,-0.5,1.02),plot_points=100, contours=100, fill=False, labels=True, label_inline_spacing=1) wnetrze=contour_plot(h.subs(z=1-x-y),(x,-0.5,1.02),(y,-0.5,1.02),contours=[0,0.01], cmap=[(1,0.8,0.5),(1,1,1),(1,1,1)], aspect_ratio=1) for r in rozwiazania: poziomice=circle((r[x],r[y]), 0.01, rgbcolor=(1,0,0), fill=True)+poziomice show(wnetrze+poziomice,aspect_ratio=1) 
       
RZUT NA PŁASZCZYZNĘ (X,Y) z podstawieniem z=1-x-y