curve_liv_e_grad.mw

 

Typesetting:-mrow(Typesetting:-mi(. Si consideri la funzione 

> f:=(x,y)->4-x^2-y^2;
 

proc (x, y) options operator, arrow; `+`(4, `-`(`*`(`^`(x, 2))), `-`(`*`(`^`(y, 2)))) end proc (1)
 

il cui grafico in un intorno del punto (1,0) e` 

 

> plot3d(f,0..2,-1..1,grid=[50,50],style=surface,axes=boxed);
 

Plot
 

memorizziamo questo grafico in un registro F, per poi poter aggiungere altri grafici senza riscivere tutto 

> F:=plot3d(f,0..2,-1..1,grid=[50,50],style=surface,axes=boxed);
 

PLOT3D(GRID(0. .. 2., -1. .. 1., Array(1..50, 1..50, {(1, 1) = 3.0, (1, 2) = 3.079966680549771, (1, 3) = 3.1566014160766347, (1, 4) = 3.2299042065805916, (1, 5) = 3.2998750520616413, (1, 6) = 3.366513... (2)
 

Calcoliamo a mano il gradiente nel punto (1,0), oppure carichiamo il pacchetto MultivariateCalculus e facciamoci calcolare il gradiente in (1,0) 

> with(Student[MultivariateCalculus]): H:=Gradient(f(x,y),[x,y]=[1,0]);
 

[Vector[column](%id = 10774984)] (3)
 

Ne ricaviamo l'equazione del piano tangente in (1,0), che riportiamo in un grafico insieme a F; il vettore (-2,0,-1) e` normale al piano; 

> piano_tg:=(x,y)->f(1,0)-2*(x-1);
 

proc (x, y) options operator, arrow; `+`(f(1, 0), `-`(`*`(2, `*`(x))), 2) end proc (4)
 

> T:=plot3d(piano_tg,0..2,-1..1,color=red,style=surface): with(VectorCalculus): vs1:=VectorSpace('cartesian'[x,y,z], [1,0,3]): V:=PlotVector(vs1:-Vector([-2,0,-1]),color=red): with(plots):display({F,T,V});
 

Plot
 

Tagliamo ora con il piano orizzontale a altezza f(1,0), ottenendo una curva 

> Or:=plot3d(f(1,0),0..2,-1..1,color=blue,style=surface): S:=implicitplot3d(f(x,y)=f(1,0), x=0..2, y=-1..1, z=2.9..3.1,style=wireframe,color=black): display({F,T,V,Or,S});
 

Plot
 

L'intersezione tra i due piani e` una retta che risulta tangente alla curva; il gradiente (proiezione sui primi due fattori del vettore normale al piano) 

sara` quindi ortogonale a questa retta. Proiettando nel piano xy, otteniamo che il gradiente in un punto e` ortogonale alla linea di livello per quel punto. Puo` essere necessario caricare il pacchetto piu` volte, qualche volta da` errore. 

> with(Student[VectorCalculus]); tv:=TangentVector(<cos(t), sin(t), 3>, t, 'output'=plot, 'range'=-Pi/2 .. Pi/2, 'vectors'=1,vectoroptions=[color=black]): nv:=PrincipalNormal(<cos(t), sin(t), 3>, t, 'output'=plot, 'range'=-Pi/2 .. Pi/2, 'vectors'=1,vectoroptions=[color=magenta],                    curveoptions=[color=black]): display({F,T,V,Or,S,tv,nv});
 

 

[`&x`, `*`, `+`, `-`, `.`, `<,>`, `<|>`, BasisFormat, Binormal, CrossProduct, Curl, Curvature, D, Del, Divergence, DotProduct, FlowLine, Flux, GetCoordinates, Gradient, Laplacian, LineInt, MapToBasis,...
[`&x`, `*`, `+`, `-`, `.`, `<,>`, `<|>`, BasisFormat, Binormal, CrossProduct, Curl, Curvature, D, Del, Divergence, DotProduct, FlowLine, Flux, GetCoordinates, Gradient, Laplacian, LineInt, MapToBasis,...
[`&x`, `*`, `+`, `-`, `.`, `<,>`, `<|>`, BasisFormat, Binormal, CrossProduct, Curl, Curvature, D, Del, Divergence, DotProduct, FlowLine, Flux, GetCoordinates, Gradient, Laplacian, LineInt, MapToBasis,...
[`&x`, `*`, `+`, `-`, `.`, `<,>`, `<|>`, BasisFormat, Binormal, CrossProduct, Curl, Curvature, D, Del, Divergence, DotProduct, FlowLine, Flux, GetCoordinates, Gradient, Laplacian, LineInt, MapToBasis,...
[`&x`, `*`, `+`, `-`, `.`, `<,>`, `<|>`, BasisFormat, Binormal, CrossProduct, Curl, Curvature, D, Del, Divergence, DotProduct, FlowLine, Flux, GetCoordinates, Gradient, Laplacian, LineInt, MapToBasis,...
Plot
 

> tv0:=TangentVector(<cos(t), sin(t), 0>, t, 'output'=plot, 'range'=-Pi/2 .. Pi/2, 'vectors'=1,vectoroptions=[color=black]): nv0:=PrincipalNormal(<cos(t), sin(t), 0>, t, 'output'=plot, 'range'=-Pi/2 .. Pi/2, 'vectors'=1,vectoroptions=[color=magenta]): display({F,T,V,Or,S,tv,nv,tv0,nv0});
 

Plot
 

>
 

 

Typesetting:-mrow(Typesetting:-mi(
Typesetting:-mrow(Typesetting:-mi(