Critical Points of Multivariable function
9 次查看(过去 30 天)
显示 更早的评论
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 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Function Creation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!