Advertisement
Gigli-0neiric

frank

Jan 23rd, 2016
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.81 KB | None | 0 0
  1. function frank(c)
  2. % Frank Hausaufgaben 24.4. und 8.5.13 Sei z = f(x, y) = (x2+y2)^2−c(x2−y2) mit einer Konstanten c ∈ R gegeben.
  3. %Schreiben Sie eine MATLAB function Frank(c), die mit disp den Definitionsbereich
  4. %von f ausgibt, die alle kritischen Punkte, Minima und Extrema
  5. %von f bestimmt und mit disp sprechend ausgibt und die den Graphen von
  6. %f so visualisiert, daß alle kritischen Punkte rot, alle Minima weiß und alle
  7. %Maxima schwarz markiert und sichtbar sind. Per default sei c = 2.
  8.  
  9. if nargin == 0
  10.     c = 2;
  11. end
  12.  
  13. clc; format compact;
  14. disp('Der Definitionsbereich ist ganz R.^2')
  15.  
  16. syms x y real
  17. f = (x.^2+y.^2)^2-c*(x.^2-y.^2);
  18. fx = diff(f,x); fy = diff(f,y);
  19. sln = solve(fx,fy);
  20.  
  21. ezsurfc(@(x,y) ((x.^2+y.^2)^2-c*(x.^2-y.^2))); hold on;
  22.  
  23. for i=1:numel(sln.x)
  24.     hesse = hessian(f, [x,y]);
  25.     dslnx = double(sln.x(i,1));  dslny = double(sln.y(i,1));
  26.     hesse = subs(hesse, x, sln.x(i,1));  hesse = subs(hesse, y, sln.y(i,1));
  27.     eigen = double(eig(hesse));
  28.     if((any(eigen<0))==1)
  29.             disp([' Alle Eigenwerte sind positiv --> Minimum im kritischen Punkt: ','(',num2str(double(sln.x(i,1))),'|',num2str(double(sln.y(i,1))),')'])
  30.             hdl = plot3(dslnx,dslny, (dslnx.^2+dslny.^2)^2-c*(dslnx.^2-dslny.^2), 'wx');
  31.     elseif((any(eigen<0))==0)
  32.             disp([' Alle Eigenwerte sind negativ --> Maximum im kritischen Punkt:  ','(',num2str(double(sln.x(i,1))),'|',num2str(double(sln.y(i,1))),')'])
  33.             hdl = plot3(dslnx,dslny, (dslnx.^2+dslny.^2)^2-c*(dslnx.^2-dslny.^2), 'bx');
  34.     elseif((any(eigen<0))==0 && (any(eigen<0))==1)
  35.             disp([' Kritischer Punkt:  ','(',num2str(double(sln.x(i,1))),'|',num2str(double(sln.y(i,1))),')'])
  36.             hdl = plot3(dslnx,dslny, (dslnx.^2+dslny.^2)^2-c*(dslnx.^2-dslny.^2), 'rx');    
  37.     end
  38. end
  39.  
  40.  
  41. set(hdl); hold off;
  42.  
  43. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement