![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1609076/image.png)
how to solve nonlinear shooting method
1 回表示 (過去 30 日間)
古いコメントを表示
f = @(x,y,z) ((z^2)*(x^-3))-(9*(y^2)*(x^-5))+(4*x);
fy = @(x,y,z) -(18*y*(x^-5));
fz = @(x,y,z) (2*z*(x^-3));
a=1; b=2; alpha =1; beta =log(256); tol=10^(-4); n=20; m=10; h=0.05;
tk = (beta-alpha)/(b-a);
fprintf('Nonlinear shooting method\n\n');
fprintf(' x(i) w(i)\n');
w1 = zeros(1,n+1);
w2 = zeros(1,n+1);
h = (b-a)/n;
k = 1;
while k <= m
w1(1) = alpha;
w2(1) = tk;
u1 = 0 ;
u2 = 1;
for i = 1 : n
x = a+(i-1)*h;
t = x+0.5*h;
k11 = h*w2(i);
k12 = h*f(x,w1(i),w2(i));
k21 = h*(w2(i)+0.5*k12);
k22 = h*f(t,w1(i)+0.5*k11,w2(i)+0.5*k12);
k31 = h*(w2(i)+0.5*k22);
k32 = h*f(t,w1(i)+0.5*k21,w2(i)+0.5*k22);
k41 = h*(w2(i)+k32);
k42 = h*f(x+h,w1(i)+k31,w2(i)+k32);
w1(i+1) = w1(i)+(k11+2*(k21+k31)+k41)/6;
w2(i+1) = w2(i)+(k12+2*(k22+k32)+k42)/6;
k11 = h*u2;
k12 = h*(fy(x,w1(i),w2(i))*u1+fz(x,w1(i),w2(i))*u2);
k21 = h*(u2+0.5*k12);
k22 = h*(fy(t,w1(i),w2(i))*(u1+0.5*k11)+fz(t,w1(i),w2(i))*(u2+0.5*k21));
k31 = h*(u2+0.5*k22);
k32 = h*(fy(t,w1(i),w2(i))*(u1+0.5*k21)+fz(t,w1(i),w2(i))*(u2+0.5*k22));
k41 = h*(u2+k32);
k42 = h*(fy(x+h,w1(i),w2(i))*(u1+k31)+fz(x+h,w1(i),w2(i))*(u2+k32));
u1 = u1+(k11+2*(k21+k31)+k41)/6;
u2 = u2+(k12+2*(k22+k32)+k42)/6;
end
if abs(w1(n+1)-beta) < tol
i = 0;
fprintf(' %11.8f %11.8f\n', a, alpha);
for i = 1 : n
j = i+1;
x = a+i*h;
fprintf(' %11.8f %11.8f\n', x, w1(j));
end
fprintf('\nConvergence in %d iterations t=%11.7f \n\n', k, tk);
break;
else
tk = tk-(w1(n+1)-beta)/u1;
k = k+1;
end
end
hai guys this is my coding for nonlinear shooting method but i don't know what wrong with this coding, because the answer not appear. so please help me to fix this coding please.
0 件のコメント
回答 (1 件)
Neelanshu
2024 年 2 月 6 日
Hi Liyana,
I understand from your query that you are interested in identifying the problem with the code for the non-linear shooting method.
During debugging, I have found that at k=1 and i=14, k31 and k22 approach infinity. This divergence indicates that the method is not converging, which causes subsequent values of w1, w2, and tk to be updated as NaN (Not a Number). This is due to an 'Inf - Inf' operation that occurs when the function f is called. As a result, for all the following values of k, w1 and w2 become vectors filled with NaN values.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1609076/image.png)
Since the solution never converges you don't see any output in the command window. A good choice of tk can improve convergence.
Hope this helps.
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!