[問題] 牛頓法求根的問題已回收

看板MATLAB作者 (ㄚ凱)時間16年前 (2009/10/15 01:37), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
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
文章代碼(AID): #1ArWnb8z (MATLAB)
文章代碼(AID): #1ArWnb8z (MATLAB)