Debugging Newton's Method code in two variables,

1 Ansicht (letzte 30 Tage)
Noob
Noob am 21 Sep. 2020
Kommentiert: Ameer Hamza am 21 Sep. 2020
Hi,
I wrote a simple code for Newton's Method in two variables but am having some trouble debugging it. Here's the message I get:
Index exceeds matrix dimensions.
Error in Root_finding_practice>@(x)[cos(x(2)),-x(1)*sin(x(2));x(2)*cos(x(1)),sin(x(1))]
Error in Root_finding_practice (line 34)
x(i+1) = x(i) - ( inv( J( x(i) ) ) * f( x(i) ) );
The function file code is:
function F = nonlinear_equations(x)
F(1) = x(1) * cos( x(2) );
F(2) = x(2) * sin( x(1) );
end
and the script file code is:
f = @(x) nonlinear_equations;
% Jacobian
J = @(x) [ cos( x(2) ), -x(1)*sin(x(2));
x(2) * cos(x(1)), sin(x(1)) ];
x = [ 1, 1 ];
for i = 1:1000 % it should be stopped when tolerance is reached
x(i+1) = x(i) - ( inv( J( x(i) ) ) * f( x(i) ) );
if( abs( f( x(i+1) ) ) < 0.0001 ) % tolerance
disp(double(x(i+1)));
break;
end
end
What am I missing? I suspect it's the way I've defined the Jacobian anonymous function ...
Thanks,

Akzeptierte Antwort

Ameer Hamza
Ameer Hamza am 21 Sep. 2020
Bearbeitet: Ameer Hamza am 21 Sep. 2020
Check this code
f = @(x) nonlinear_equations(x);
% Jacobian
J = @(x) [cos( x(2) ), -x(1)*sin(x(2));
x(2)*cos(x(1)), sin(x(1))];
x = [1; 1];
for i = 1:1000 % it should be stopped when tolerance is reached
x(:,i+1) = x(:,i) - inv(J(x(:,i)))*f(x(:,i));
if( abs(f(x(:, i+1))) < 0.0001) % tolerance
disp(double(x(:, i+1)));
break;
end
end
function F = nonlinear_equations(x)
F = zeros(2, 1);
F(1) = x(1) * cos( x(2) );
F(2) = x(2) * sin( x(1) );
end
  8 Kommentare
Noob
Noob am 21 Sep. 2020
Oh, I see; I just have to define the inputs as a vector first.
Thanks again, Ameer!
Ameer Hamza
Ameer Hamza am 21 Sep. 2020
Yes, input need to be passed as vector.
I am glad to be of help :)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by