[問題] damped 牛頓法

看板Fortran作者 (olampaboy)時間12年前 (2012/05/07 21:06), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
小弟有一題目必須要利用牛頓法及damped牛頓法來解題 但是我只會利用imsl資料庫來寫出牛頓法 題目:f1(x)=x1+3ln|x1|-x2^2 f2(x)=x2x1^2-x1*x2-5x1+1 這是我的牛頓法寫法: program test use imsl integer m real(8) :: x1,x2,H,F real(8) :: A(2,2) , B(2) ,C(2) write(*,*) "請輸入x1" read(*,*) x1 write(*,*)"請輸入x2" read(*,*) x2 A(1,1)=1+3/x1 !A為Jacobian的矩陣 A(1,2)=-2*x2 A(2,1)=4*x1-x2-5 A(2,2)=-x1 B(1)=-(x1+3*log(abs(x1))-x2*x2) !B為-f(x) B(2)=-2*x1*x1+x1*x2+5*x1-1 C= A .ix. B !C為h(x的間距) H=(C(1)*C(1)+C(2)*C(2))**0.5 !h的norm值 F=(B(1)*B(1)+B(2)*B(2))**0.5 !f(x)的norm值 m=0 write(*,*) m write(*,"(E15.3)") x1,x2,F,H do while (F>0.0000000001) m=m+1 if (m>9) exit x1=x1+C(1) x2=x2+C(2) A(1,1)=1+3/x1 A(1,2)=-2*x2 A(2,1)=4*x1-x2-5 A(2,2)=-x1 B(1)=-(x1+3*log(abs(x1))-x2*x2) B(2)=-2*x1*x1+x1*x2+5*x1-1 F=(B(1)*B(1)+B(2)*B(2))**0.5 C=A .ix. B H=(C(1)*C(1)+C(2)*C(2))**0.5 write(*,*) m write(*,"(F15.4)") x1,x2 write(*,"(E15.3)") F,H end do stop end program 牛頓法跑出來的結果跟課本上的都一樣 但是要寫damped牛頓法時,必須重新定義x1及x2的值 x(m+1)=x(m)+h/2^i 而i= min{j:0<j ||f(x+h/2^j|| < ||f(x)||} 想請問我要怎麼把i的條件加入我的程式中 不好意思有點冗長,懇請了解的高手幫小弟解答一下,謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.35.202
文章代碼(AID): #1FfyZlCo (Fortran)
文章代碼(AID): #1FfyZlCo (Fortran)