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

        关于多变量的多元函数,我们求解考虑解的问题与单变量是极其类似的。考虑在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)

       这里要说明的是,把jacobian矩阵中的一阶偏导改为有限差分商矩阵M也是可以的,为了保证对称性,可以使用1/2(M+t(M))来代替M。这样做也避免了jacobian矩阵难求的问题。

你可能感兴趣的:(数值分析,R语言)