[問題] damped 牛頓法
小弟有一題目必須要利用牛頓法及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
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章