% Geometrisk fortolkning af den retningsafldedede
% Som eksempel tager vi udgangspunkt i funktionen
% f(x, y) = -x^4  - y^2
% Vi ønsker at visualisere den retningsafledede til funktionen i punktet 
% P(1, 1, -2) i retningen (1,1)/sqrt(2)

%% Vi tegner først grafen for funktionen

syms x y

xmax = 3;
ymax = 3;
zmin = -90;
zmax = 0;

f = @(x,y) -x.^4 - y.^2;

ezsurfc( f, [-xmax, xmax, -ymax, ymax] );

%% Vi betragter skæringen mellem grafen og planen x=y
% der indeholder punktet (1,1,0) og "går i retningen" (1,1)/sqrt(2)

hold on
ezsurfc( f, [-xmax, xmax, -ymax, ymax] );

x2 = [-xmax -xmax xmax xmax];
y2 = [-ymax -ymax ymax ymax];
z2 = [ zmin  zmax zmax zmin];

fill3( x2, y2, z2, 'b' );
hold off

axis( [-xmax, xmax, -ymax, ymax, -zmax, zmax] )

%% En parameterfremstilling for skæringskurven er givet ved
% ( x/sqrt(2), x/sqrt(2), f(x/sqrt(2), x/sqrt(2)) )

ezsurf( 'x/sqrt(2)', 'x/sqrt(2)', @(x,y) f(x/sqrt(2), x/sqrt(2)), [-xmax, xmax, -ymax, ymax] );

%% Vi finder nu tangentlinjen til skæringskurven i punktet (1,1,-2). 
% Lader vi 
% g(x) = f(x/sqrt(2), x/sqrt(2)) = -x^4/4 - x^2/2
% så har tangentlinjen hældningen g'(sqrt(2)). 
% Det ses let at 
% g'(x) = -x^3  - x
% Så g'(sqrt(2)) = -3*sqrt(2)
% Tangentlinjen er derfor givet ved:  
% (1,1,-2) + t*( 1/sqrt(2), 1/sqrt(2), -3*sqrt(2) )
%
% Vi bemærker, at den retningsafledede er givet
% D_(1/sqrt(2), 1/sqrt(2))(1,1) = (-4, -2)*(1,1)/sqrt(2) = -3*sqrt(2)
% Det stemmer overens med hældningen for tangenten til skæringskurven.

hold on
ezsurfc( f, [-xmax, xmax, -ymax, ymax] );
ezplot3( '1 + t/sqrt(2)', '1 + t/sqrt(2)', '-2 -3*sqrt(2)*t', [-xmax xmax] );
hold off



figure

hold on
ezsurf( 'x/sqrt(2)', 'x/sqrt(2)', @(x,y) f(x/sqrt(2), x/sqrt(2)), [-xmax, xmax, -ymax, ymax] );
ezplot3( '1 + t/sqrt(2)', '1 + t/sqrt(2)', '-2 -3*sqrt(2)*t', [-xmax xmax] );
hold off


%% Eksempel 2
% Vi ser på funktionen
% F(x,y,z) = 5 - 2*x^2  - y^2
% Funktionen har gradientvektor
% (-4x, -2y, -1)
% I punktet (0, 1, 4):
% (0, -2, -1)
% Det giver tangentplanen
% -2(y-1) - (z-2) = 0
% i punktet (0, 1, 4). Lad os visualisere det grafisk

hold on

ezsurfc( '5 - 2*x^2 - y^2', [-xmax, xmax, -ymax, ymax] );
ezsurf( '2 - 2*(y-1)', [-xmax, xmax, -ymax, ymax] )

hold off


%% Et mere kompliceret eksempel
% F(x, y, z) = x^3 + y^3 + z^3 + 1 - (x+y+z+1)^3 = 0
% Origo ligger på grafen for funktionen.
%
% Til at tegne implicit definerede funktioner bruges ezimplot3 fra
% http://www.mathworks.com/matlabcentral/fileexchange/23623-ezimplot3-implicit-3d-functions-plotter

ezimplot3( 'x^3 + y^3 + z^3 + 1 - (x+y+z+1)^3', [-2, 2, -2, 2, -2, 2] );
