您的位置:首页 > 其它

多变量非线性方程求解问题(牛顿迭代法)

2013-03-09 15:37 465 查看
        关于多变量的多元函数,我们求解考虑解的问题与单变量是极其类似的。考虑在x处的一阶泰勒展开,我们有0=f(x0)=f(x)+j(x)(x-x0)(后面的等号近似成立,j表示jacobian矩阵.

       我们以一个例题来说明牛顿迭代法:

考虑这个问题:求解方程组

x^2+y^2-5=0 

(x+1)*y-3*y-1=0

假设给定初值(0,1),那么牛顿迭代法的R程序如下:

f1<-function(x){
f<-c(x[1]^2+x[2]^2-5,(x[1]+1)*x[2]-3*x[1]-1)
j<-matrix(c(2*x[1],2*x[2],x[2]-3,x[1]+1),2,2,byrow=T)
list(f=f,j=j)
}
fthree<-function(f1,x,eps=1e-5){
repeat{
x1<-x
object<-f1(x)
x<-x-solve(object$j,object$f)
if((x-x1)%*%(x-x1)<eps){
return(x)
break
}
}
}


       这里要说明的是,把jacobian矩阵中的一阶偏导改为有限差分商矩阵M也是可以的,为了保证对称性,可以使用1/2(M+t(M))来代替M。这样做也避免了jacobian矩阵难求的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: