newton Raphson method multivariable with single function

5 次查看(过去 30 天)
im trying to minimize a function by newtons method with 3 variables but its showing error while solving
the code is
%code 2
% Newton's Method 2-dimension
% Written by thirusabaresaan
% Date: May 14, 2021
clc
clear
format long
% Function Definition (Enter your Function here):
syms X Y Z
f =(3/2)*X^2+(3/2)*Y^2+Z^2-X*Y-10*(X+Y+Z)+75 % equation
% Initial Guess (Choose Initial Guesses):
X0(1) = -5
Y0(1) = 5
Z0(1) = 0
u = 10^(-2) % Convergence Criteria
i = 1 % Iteration Counter
% Gradient and Hessian Computation:
J = subs(gradient(f),[X Y Z],[X0(1) Y0(1) Z0(1)]) % Gradient
H = subs(hessian(f),[X Y Z],[X0(1) Y0(1) Z0(1)]) % Hessian
S = inv(H) % Search Direction
% Optimization Condition:
while (norm(J) > u)
I = [X0(i),Y0(i),Z0(i)]'
x0(i+1) = I(1)-S(1,:)*J
Y0(i+1) = I(2)-S(2,:)*J
Z0(i+1) = I(3)-S(3,:)*J
i = i+1
J = subs(gradient(f),[X Y Z],[X0(i) Y0(i) Z0(i)]) % Gradient updated
H = subs(hessian(f),[X Y Z],[X0(i) Y0(i) Z0(i)]) %% Hessian updated
S = inv(H) % New Search Direction
end
% Result Table:`
Iter = 1:i;
X_coordinate = X0';
Y_coordinate = Y0';
Z_coordinate = Z0';
Iterations = Iter';
T = table(Iterations,X_coordinate,Y_coordinate,Z_coordinate = Z0');
% Output:
fprintf('Initial Objective Function Value: %d\n\n',subs(f,[X,Y,Z], [X0(1),Y0(1),Z0(1)]))
if (norm(J) < u)
fprintf('Minimum succesfully obtained...\n\n')
end
fprintf('Number of Iterations for Convergence: %d\n\n', i)
X0(i)
Y0(i)
Z(i)
subs(f,[X,Y,Z], [X0(i),Y0(i),Z0(i)])
disp(T)
I got error over here
J = subs(jacobian(f),[X Y Z],[X0(i) Y0(i) Z0(i)])
can any one help me to solve this

回答(1 个)

vidyesh
vidyesh 2023-10-13
Hi Thirusabaresaan P,
I understand that you want to minimize a function using Newton-Raphson method, but the code is generating an error while updating the gradient value.
By making the following changes to your code, it should run smoothly without encountering any errors:
  • In the line "x0(i+1) = I(1)-S(1,:)*J," change 'x0' to 'X0':
Original:
x0(i+1) = I(1)-S(1,:)*J
Revised:
X0(i+1) = I(1)-S(1,:)*J
  • In the line "T = table(Iterations,X_coordinate,Y_coordinate,Z_coordinate = Z0');" replace "Z_coordinate = Z0'" with "Z_coordinate":
Original:
T = table(Iterations,X_coordinate,Y_coordinate,Z_coordinate = Z0');
Revised:
T = table(Iterations,X_coordinate,Y_coordinate,Z_coordinate);
  • In the third last line of code, change "Z(i)" to "Z0(i)":
Hope this answer helps.

类别

Help CenterFile Exchange 中查找有关 Get Started with Optimization Toolbox 的更多信息

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by