多变量非线性方程求解问题(牛顿迭代法)
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矩阵难求的问题。
我们以一个例题来说明牛顿迭代法:
考虑这个问题:求解方程组
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矩阵难求的问题。
相关文章推荐
- MatLab建模学习笔记8——非线性规划问题求解
- 非线性规划问题的matlab求解
- 优化与求解非线性方程组(单变量问题)
- C语言进阶-第6讲:递归法问题求解(易列写递归方程)
- sas软件求解线性、非线性和整数问题
- MATLAB求解非线性规划问题的例子
- 遗传算法求解带非线性约束的单目标问题,matlab代码,基于K Deb的论文
- 算法问题的求解 —— 变量的引入
- 利用Levenberg_Marquardt算法求解无约束的非线性最小二乘问题~
- MatLab建模学习笔记10——利用罚函数求解非线性规划问题
- 二分法 简单迭代法 Newton法 弦截法 求解非线性方程的根
- AtCoder Beginner Contest 085 C Otoshidama(计算机整数乘法问题+方程求解)
- 牛顿迭代法在求解特征值问题中的应用
- 二分逼近/牛顿迭代——一元高次非线性方程求解
- 问题六十五:二叉查找树的一个应用实例——求解一元十次方程时单实根区间的划分
- AtCoder Beginner Contest 085 C Otoshidama(计算机整数乘法问题+方程求解)
- AtCoder Beginner Contest 085 C Otoshidama(计算机整数乘法问题+方程求解)
- AtCoder Beginner Contest 085 C Otoshidama(计算机整数乘法问题+方程求解)
- 机器学习(四)正规方程求解线性回归问题、正规方法与梯度法的优劣
- MATLAB实例之对线性,非线性,超越方程的求解