[问题] damped 牛顿法

楼主: olampaboy (迷糊小书童)   2012-05-07 21:06:52
小弟有一题目必须要利用牛顿法及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的条件加入我的程式中
不好意思有点冗长,恳请了解的高手帮小弟解答一下,谢谢!!

Links booklink

Contact Us: admin [ a t ] ucptt.com