ekstremum egzamin (zad 24)

2720 days ago by aweber

var('x,y,z,a,b,u,wartosc') #f=3*z+2*x+y f=3*z+x-2*y #g=x^2+y^2-z^2-2*z g=x^2+y^2-z^2+2*z h=z^2-4 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 - 2*y + 3*z
na zbiorze opisanym przez
g= x^2 + y^2 - z^2 + 2*z =0
h= z^2 - 4 <=0
grad(f)= [1, -2, 3]
grad(g)= [2*x, 2*y, -2*z + 2]
grad(h)= [0, 0, 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 - 2*y + 3*z == wartosc
x^2 + y^2 - z^2 + 2*z == 0
2*a*x == 1
2*a*y == -2
-2*(z - 1)*a == 3
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/2, -1, -1/2) wartość funkcji 1
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 - 2*y + 3*z == wartosc
x^2 + y^2 - z^2 + 2*z == 0
2*x == 0
2*y == 0
-2*z + 2 == 0
W tym zadaniu nie ma takich punktów.
print 'Badamy ekstrema na brzegu zbioru, który leży w płaszczyźnie h=0' 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 h=0
UKŁAD RÓWNAŃ
wartosc == x - 2*y + 3*z
x^2 + y^2 - z^2 + 2*z == 0
z^2 - 4 == 0
1 == 2*a*x
-2 == 2*a*y
3 == -2*(z - 1)*a + 2*b*z
rozwiazania3=solve(rownania3,wartosc,x,y,z,a,b,solution_dict=True) print 'Rozwiazania' for r in rozwiazania3: r[x]=expand(r[x]);r[y]=expand(r[y]);r[z]=expand(r[z]);r[wartosc]=expand(r[wartosc]) for r in rozwiazania3: print 'dla',(r[x],r[y],r[z]),'wartość funkcji',r[wartosc] 
       
Rozwiazania
dla (-2/5*sqrt(2)*sqrt(5), 4/5*sqrt(2)*sqrt(5), -2) wartość funkcji
-2*sqrt(2)*sqrt(5) - 6
dla (2/5*sqrt(2)*sqrt(5), -4/5*sqrt(2)*sqrt(5), -2) wartość funkcji
2*sqrt(2)*sqrt(5) - 6
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 - 2*y + 3*z
x^2 + y^2 - z^2 + 2*z == 0
z^2 - 4 == 0
2*x == 0
2*y == 0
-2*z + 2 == 2*a*z
dla (0, 0, 2) wartość funkcji 6
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, -2*sqrt(2)*sqrt(5) - 6, 2*sqrt(2)*sqrt(5) - 6, 6]
MAKSIMUM 6
MINIMUM -2*sqrt(2)*sqrt(5) - 6
print 'UWAGA: trzeba jeszcze uzasadnić, że zbiór jest zwarty by użyć twierdzenia Weierstrassa' 
       
UWAGA: trzeba jeszcze uzasadnić, że zbiór jest zwarty by użyć
twierdzenia Weierstrassa
powierzchnia=implicit_plot3d(g==0 , (x, -3, 3), (y,-3,3), (z,-2, 2), plot_points=100, color='red') cala_powierzchnia=implicit_plot3d(g==0 , (x, -4, 4), (y,-4,4), (z,-3, 3), plot_points=100, rgbcolor=(1,0.5,0.5),opacity=0.1) for r in rozwiazania: powierzchnia=powierzchnia+sphere((r[x],r[y],r[z]),size=0.1, color='black') for r in rozwiazania: powierzchnia=powierzchnia+arrow((r[x],r[y],r[z]),(r[x]+fx.subs(x=r[x],y=r[y],z=r[z])/5, r[y]+fy.subs(x=r[x],y=r[y],z=r[z])/5, r[z]+fz.subs(x=r[x],y=r[y],z=r[z])/5)) show(powierzchnia+cala_powierzchnia,figsize=6,aspect_ratio=true)