Critical Points of Multivariable function

24 vues (au cours des 30 derniers jours)
Melissa
Melissa le 24 Mai 2011
Hey All, I am currently trying to make a MATLAB program that will find the critical values of a multi-variable function and tell me whether each are a minimum, maximum, or saddle point. I wrote in a function which I know has two critical points but how do I create a loop to where it will calculate all critical points? And how do I actually get the print to show up in the if statements? Here is my current Matlab code:
function [c,d] = critcalpoints(f)
%CRITCALPOINTS(f) is a function to determine the critical points of a 2D
%surface given the function f(x,y).
%The method choosen is to compute the first and second partial derivatives
%on the given function by first evaluating the Jacobian and Hessian Matrix
%and then solve by finding the eigenvalues of obtained critical points.
%Declaration of Variables
syms x y
f=x^3-3*x^2+5*x*y-7*y^2;
% First Order Partial Derivative using the Jacobian Matrix
gradf = jacobian(f,[x,y]);
% Second Order Patrial Derivative using the Hessian Matrix
hessmatf = jacobian(gradf,[x,y]);
%Solving the First Order Partial Derivative for critical points
[xcr,ycr]=solve(gradf(1),gradf(2));
%Evaluating the critical points in the Hessian Matrix
H1=subs(hessmatf,[x,y],[xcr(1),ycr(1)]…
H2=subs(hessmatf,[x,y],[xcr(2),ycr(2)]…
%Computing the eigenvalue of the evaluation of critical points
eig(H1);
eig(H2);
%Converting to numerical values
c = double(eig(H1));
d = double(eig(H2));
%Classifying and Pritning the Critical Points
if (c(1) > 0 & d(1) > 0) | (c(2) > 0 & d(2) > 0)
print( [xcr,ycr], ' is a minimum')
elseif (c(1) < 0 & d(1) < 0) | (c(2) < 0 & d(2) < 0)
print( [xcr, ycr], ' is a maximum')
elseif (c(1) < 0 & d(1) > 0) | (c(1) > 0 & d(1) < 0)
print( [xcr, ycr], ' is a saddle point')
elseif (c(2) < 0 & d(2) > 0) | (c(2) > 0 & d(2) < 0)
print( [xcr, ycr], ' is a saddle point')
elseif (c(1)==0 | d(1)==0)
print( [xcr, ycr], ' is degenerate')
elseif (c(2)==0 | d(2)==0)
print( [xcr, ycr], ' is degenerate')
end
Additional Details In order to obtain critical points it depends on the gradiant, or in this case gradf. So if I wanted to loop it then I would set n=length of gradf? then set a loop 1:n? uh...I dont know if thats correct.
  1 commentaire
Melissa
Melissa le 24 Mai 2011
Ah apparently you cant use sysm in a function, or I did it wrong. Shoot. Help.

Connectez-vous pour commenter.

Réponses (1)

bym
bym le 24 Mai 2011
do you mean
syms x y %<-- note you wrote sysm
  2 commentaires
bym
bym le 24 Mai 2011
also, I don't know if it will help but take a look at the del2 function
Melissa
Melissa le 25 Mai 2011
ah yes I fixed that but still I get errors. thank you though for that catch!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Function Creation dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by