Newton's method returns NaN when solving

조회 수: 4 (최근 30일)
Editor
Editor 2022년 12월 21일
댓글: Editor 2022년 12월 22일
I am trying to solve a 7D system of equations using the Newton's method. However, my code returns NaN after running. I have checked through my equations and I do not have the case of 0/0. I have tried to change initial guesses but to no success. I cannot figure out why I get such values. Can someone please give me a third eye or suggest a better method that I can use? Thanks in anticipation. Below is my code:
clc; close all; clear
syms x1 x2 x3 x4 x5 x6 x7 x8
f1(x1, x2, x3, x4, x5, x6, x7) = (1.*x2.*(x3+x6) + x1.*x7.*x4)./(2.*x1.*x7 + 2.*x2) + x5./2;
f2(x1, x2, x3, x4, x5, x6, x7) = (2.*x2.*(x3+x6) + x1.*x7.*x4)./(2.*x1.*x7 + 4.*x2) + x5./2;
f3(x1, x2, x3, x4, x5, x6, x7) = (3.*x2.*(x3+x6) + x1.*x7.*x4)./(2.*x1.*x7 + 6.*x2) + x5./2;
f4(x1, x2, x3, x4, x5, x6, x7) = (4.*x2.*(x3+x6) + x1.*x7.*x4)./(2.*x1.*x7 + 8.*x2) + x5./2;
f5(x1, x2, x3, x4, x5, x6, x7) = sqrt( (1.*x2.*(x3+x6).*x5)./(x1.*x7 + 1.*x2) );
f6(x1, x2, x3, x4, x5, x6, x7) = sqrt( (2.*x2.*(x3+x6).*x5)./(x1.*x7 + 2.*x2) );
f7(x1, x2, x3, x4, x5, x6, x7) = sqrt( (3.*x2.*(x3+x6).*x5)./(x1.*x7 + 3.*x2) );
x=[8.0; 8.0; 4.0; 4.0; 3.0; 2.5; 1.6];
e=10^(-8);
n=20;
f1x1(x1,x2,x3,x4,x5,x6,x7) = diff(f1,x1);
f1x2(x1,x2,x3,x4,x5,x6,x7) = diff(f1,x2);
f1x3(x1,x2,x3,x4,x5,x6,x7) = diff(f1,x3);
f1x4(x1,x2,x3,x4,x5,x6,x7) = diff(f1,x4);
f1x5(x1,x2,x3,x4,x5,x6,x7) = diff(f1,x5);
f1x6(x1,x2,x3,x4,x5,x6,x7) = diff(f1,x6);
f1x7(x1,x2,x3,x4,x5,x6,x7) = diff(f1,x7);
f2x1(x1,x2,x3,x4,x5,x6,x7) = diff(f2,x1);
f2x2(x1,x2,x3,x4,x5,x6,x7) = diff(f2,x2);
f2x3(x1,x2,x3,x4,x5,x6,x7) = diff(f2,x3);
f2x4(x1,x2,x3,x4,x5,x6,x7) = diff(f2,x4);
f2x5(x1,x2,x3,x4,x5,x6,x7) = diff(f2,x5);
f2x6(x1,x2,x3,x4,x5,x6,x7) = diff(f2,x6);
f2x7(x1,x2,x3,x4,x5,x6,x7) = diff(f2,x7);
f3x1(x1,x2,x3,x4,x5,x6,x7) = diff(f3,x1);
f3x2(x1,x2,x3,x4,x5,x6,x7) = diff(f3,x2);
f3x3(x1,x2,x3,x4,x5,x6,x7) = diff(f3,x3);
f3x4(x1,x2,x3,x4,x5,x6,x7) = diff(f3,x4);
f3x5(x1,x2,x3,x4,x5,x6,x7) = diff(f3,x5);
f3x6(x1,x2,x3,x4,x5,x6,x7) = diff(f3,x6);
f3x7(x1,x2,x3,x4,x5,x6,x7) = diff(f3,x7);
f4x1(x1,x2,x3,x4,x5,x6,x7) = diff(f4,x1);
f4x2(x1,x2,x3,x4,x5,x6,x7) = diff(f4,x2);
f4x3(x1,x2,x3,x4,x5,x6,x7) = diff(f4,x3);
f4x4(x1,x2,x3,x4,x5,x6,x7) = diff(f4,x4);
f4x5(x1,x2,x3,x4,x5,x6,x7) = diff(f4,x5);
f4x6(x1,x2,x3,x4,x5,x6,x7) = diff(f4,x6);
f4x7(x1,x2,x3,x4,x5,x6,x7) = diff(f4,x7);
f5x1(x1,x2,x3,x4,x5,x6,x7) = diff(f5,x1);
f5x2(x1,x2,x3,x4,x5,x6,x7) = diff(f5,x2);
f5x3(x1,x2,x3,x4,x5,x6,x7) = diff(f5,x3);
f5x4(x1,x2,x3,x4,x5,x6,x7) = diff(f5,x4);
f5x5(x1,x2,x3,x4,x5,x6,x7) = diff(f5,x5);
f5x6(x1,x2,x3,x4,x5,x6,x7) = diff(f5,x6);
f5x7(x1,x2,x3,x4,x5,x6,x7) = diff(f5,x7);
f6x1(x1,x2,x3,x4,x5,x6,x7) = diff(f6,x1);
f6x2(x1,x2,x3,x4,x5,x6,x7) = diff(f6,x2);
f6x3(x1,x2,x3,x4,x5,x6,x7) = diff(f6,x3);
f6x4(x1,x2,x3,x4,x5,x6,x7) = diff(f6,x4);
f6x5(x1,x2,x3,x4,x5,x6,x7) = diff(f6,x5);
f6x6(x1,x2,x3,x4,x5,x6,x7) = diff(f6,x6);
f6x7(x1,x2,x3,x4,x5,x6,x7) = diff(f6,x7);
f7x1(x1,x2,x3,x4,x5,x6,x7) = diff(f7,x1);
f7x2(x1,x2,x3,x4,x5,x6,x7) = diff(f7,x2);
f7x3(x1,x2,x3,x4,x5,x6,x7) = diff(f7,x3);
f7x4(x1,x2,x3,x4,x5,x6,x7) = diff(f7,x4);
f7x5(x1,x2,x3,x4,x5,x6,x7) = diff(f7,x5);
f7x6(x1,x2,x3,x4,x5,x6,x7) = diff(f7,x6);
f7x7(x1,x2,x3,x4,x5,x6,x7) = diff(f7,x7);
f11=matlabFunction(f1);
f22=matlabFunction(f2);
f33=matlabFunction(f3);
f44=matlabFunction(f4);
f55=matlabFunction(f5);
f66=matlabFunction(f6);
f77=matlabFunction(f7);
f1x11=matlabFunction(f1x1);
f1x22=matlabFunction(f1x2);
f1x33=matlabFunction(f1x3);
f1x44=matlabFunction(f1x4);
f1x55=matlabFunction(f1x5);
f1x66=matlabFunction(f1x6);
f1x77=matlabFunction(f1x7);
f2x11=matlabFunction(f2x1);
f2x22=matlabFunction(f2x2);
f2x33=matlabFunction(f2x3);
f2x44=matlabFunction(f2x4);
f2x55=matlabFunction(f2x5);
f2x66=matlabFunction(f2x6);
f2x77=matlabFunction(f2x7);
f3x11=matlabFunction(f3x1);
f3x22=matlabFunction(f3x2);
f3x33=matlabFunction(f3x3);
f3x44=matlabFunction(f3x4);
f3x55=matlabFunction(f3x5);
f3x66=matlabFunction(f3x6);
f3x77=matlabFunction(f3x7);
f4x11=matlabFunction(f4x1);
f4x22=matlabFunction(f4x2);
f4x33=matlabFunction(f4x3);
f4x44=matlabFunction(f4x4);
f4x55=matlabFunction(f4x5);
f4x66=matlabFunction(f4x6);
f4x77=matlabFunction(f4x7);
f5x11=matlabFunction(f5x1);
f5x22=matlabFunction(f5x2);
f5x33=matlabFunction(f5x3);
f5x44=matlabFunction(f5x4);
f5x55=matlabFunction(f5x5);
f5x66=matlabFunction(f5x6);
f5x77=matlabFunction(f5x7);
f6x11=matlabFunction(f6x1);
f6x22=matlabFunction(f6x2);
f6x33=matlabFunction(f6x3);
f6x44=matlabFunction(f6x4);
f6x55=matlabFunction(f6x5);
f6x66=matlabFunction(f6x6);
f6x77=matlabFunction(f6x7);
f7x11=matlabFunction(f7x1);
f7x22=matlabFunction(f7x2);
f7x33=matlabFunction(f7x3);
f7x44=matlabFunction(f7x4);
f7x55=matlabFunction(f7x5);
f7x66=matlabFunction(f7x6);
f7x77=matlabFunction(f7x7);
for i=1:n
F=[f11(x(1),x(2),x(3),x(4),x(5),x(6),x(7));f22(x(1),x(2),x(3),x(4),x(5),x(6),x(7));...
f33(x(1),x(2),x(3),x(4),x(5),x(6),x(7)); f44(x(1),x(2),x(3),x(4),x(5),x(6),x(7));...
f55(x(1),x(2),x(3),x(4),x(5),x(6),x(7));f66(x(1),x(2),x(3),x(4),x(5),x(6),x(7));...
f77(x(1),x(2),x(3),x(4),x(5),x(6),x(7))];
J=[f1x11(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f1x22(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f1x33(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f1x44(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f1x55(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f1x66(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f1x77(x(1),x(2),x(3),x(4),x(5),x(6),x(7));
f2x11(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f2x22(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f2x33(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f2x44(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f2x55(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f2x66(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f2x77(x(1),x(2),x(3),x(4),x(5),x(6),x(7));
f3x11(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f3x22(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f3x33(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f3x44(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f3x55(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f3x66(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f3x77(x(1),x(2),x(3),x(4),x(5),x(6),x(7));
f4x11(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f4x22(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f4x33(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f4x44(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f4x55(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f4x66(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f4x77(x(1),x(2),x(3),x(4),x(5),x(6),x(7));
f5x11(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f5x22(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f5x33(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f5x44(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f5x55(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f5x66(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f5x77(x(1),x(2),x(3),x(4),x(5),x(6),x(7));
f6x11(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f6x22(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f6x33(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f6x44(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f6x55(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f6x66(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f6x77(x(1),x(2),x(3),x(4),x(5),x(6),x(7));
f7x11(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f7x22(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f7x33(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f7x44(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f7x55(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),f7x66(x(1),x(2),x(3),x(4),x(5),x(6),x(7)),...
f7x77(x(1),x(2),x(3),x(4),x(5),x(6),x(7))];
y=-J\F;
x=x+y
end

채택된 답변

Torsten
Torsten 2022년 12월 21일
편집: Torsten 2022년 12월 22일
If you rename y(1)= x(3)+x(6) and y(2)=x(1)*x(7) in your equations for f1,...,f7, you will see that you have 7 equations for 5 unknowns (x(2),x(4),x(5),y(1),y(2)). This doesn't sound good for solvability of the system, especially for the regularity of the Jacobian.
So remove two of the equations f1,...,f7 and replace x(3)+x(6) by y(1) and x(1)*x(7) by y(2).
One possible solution for your equations is
x(2) = 0, y(1) = const1, y(2) = const2 (~=0), x(4) = const3, x(5) = -const3
where const1, const2 ~=0 and const3 are arbitrary constants.
  댓글 수: 1
Editor
Editor 2022년 12월 22일
@Torsten I have implemented your suggestion and it works accordingly. Thank you very much

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Numeric Solvers에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by