비선형 다항식 함수를 시도했는데이 코드는 잘 작동합니다. 그러나 이것에 대해서, 선형 방정식 df0 * X = f0를 백 슬래시 또는 bicg 또는 lsqr을 사용하여 풀기 위해 몇 가지 방법을 시도했지만 몇 가지 초기 값을 시도했지만 결과가 수렴하지 않았습니다.변환하지 않음 : Newton Raphson-Method를 사용하여 비선형 방정식의 근원을 찾습니다.
% Define the given function
syms x1 x2 x3
x=[x1,x2,x3];
f(x)=[3*x1-cos(x2*x3)-1/2;x1^2+81*(x2+0.1)^2-sin(x3)+1.06;...
exp(-x1*x2)+20*x3+1/3*(10*pi-3)];
% Define the stopping criteria based on Nither or relative errors
tol=10^-5;
Niter=100;
df=jacobian(f,x);
x0=[0.1;0.1;-0.1];
% Setting starting values
error=1;
i=0;
% Start the Newton-Raphson Iteration
while(abs(error)>tol)
f0=eval(f(x0(1),x0(2),x0(3)));
df0=eval(df(x0(1),x0(2),x0(3)));
xnew=x0-df0\f0; % also tried lsqr(df0,f0),bicg(df0,f0)
error=norm(xnew-x0);
x0=xnew;
i=i+1
if i>=Niter
fprintf('Iteration times spill over Niter\n');
return;
end
end
기능을 플롯하고 시작 추측을 위해 더 나은 선택을보십시오. – duffymo
함수는 3 개의 방정식으로 구성된 벡터입니다. 어떻게 그릴 수 있습니까? – Jarvis
왜 거기서'eval'을 사용하고 있습니까?!? 그것은 완전히 불필요하며 계산 속도를 떨어 뜨릴뿐만 아니라 eval과 그와 관련된 나쁜 습관에 빠지게됩니다. – Adriaan