[問題] 牛頓法求根的問題已回收
function x=Newton
s1='3*x1-cos(x2*x3)-1/2';
s2='x1.^2 -81*(x2+0.1).^2+sin(x3)+1.06';
s3='exp(-x1*x2)+20*x3+1/3*(10*pi-3)';
[f1 f2 f3]=demo_pdiff(s1);
[f4 f5 f6]=demo_pdiff(s2);
[f7 f8 f9]=demo_pdiff(s3);
F1=inline(s1);
F2=inline(s2);
F3=inline(s3);
A=[];
for i=1:10
x0=rand(1,3)-0.5;
x=x0
a1=feva(f1,x);
a2=feva(f2,x);
a3=feva(f3,x);
a4=feva(f4,x);
a5=feva(f5,x);
a6=feva(f6,x);
a7=feva(f7,x);
a8=feva(f8,x);
a9=feva(f9,x);
while abs(feva(F1,x))+abs(feva(F2,x))+abs(feva(F3,x))>=10^(-10)
J=[a1 a2 a3; a4 a5 a6; a7 a8 a9];
b=[feva(F1,x) feva(F2,x) feva(F3,x)]*inv(J);
x=x-b;
end
A=[A;x]
end
return
這是我寫的一組用牛頓法求s1 s2 s3這三個函數的根
正常是會跑出兩個根
但是有時候卻會溢位
造成根的值錯亂
但是...假如我將a1~a9那一串放到while裡面
就不會造成溢位的結果
而且跑的速度也比原本這樣寫快很多
我這邊有兩個問題
1.為什麼放的位置不同會造成溢位?
我自己的想法:
是因為我寫的這種的J值是固定的
所以當代入不同的x0的時候
有機會造成x-b的值超出範圍
所以才會造成溢位
是這樣嗎???
2.為什麼跑的速度也有所不同?
我現在沒有任何想法...~"~
希望知道的人能夠幫我解答一下...感謝
--
It's my life!
http://www.wretch.cc/blog/Kai
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 134.208.32.178
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章