matlab用lingo解非线性方程组组

牛顿迭代法可以推广到多元非线性方程组 \(\boldsymbol{F}(\boldsymbol{x})=\boldsymbol{0}\)的情况,称为牛顿-- 拉夫逊方法 (Newton-Raphson method). 当 \(\boldsymbol{F}(\boldsymbol{x})\) 关于 \(\boldsymbol{x}\) 的 Jacobi 矩阵 \(\boldsymbol{J}(\boldsymbol{x}) = (\cfrac{\partial \boldsymbol{F}}{\partial \boldsymbol{x}})\) 可逆时, 有
\[\boldsymbol{x}^{(k+1)}=\boldsymbol{x}^{(k)}- \boldsymbol{J}^{-1}(\boldsymbol{x}^{(k)})\boldsymbol{F}(\boldsymbol{x}^{(k)}),\]
求解非线性方程组的Newton-Raphson方法:
1、 取初始点 \(\boldsymbol{x}^{(0)}\),最大迭代次数 \(N\) 和精度要求 \(\varepsilon\), 置 \(k=0\);
2、 求解线性方程组 \(\boldsymbol{J}(\boldsymbol{x}^{(k)})\boldsymbol{d} = -\boldsymbol{F}(\boldsymbol{x}^{(k)})\);
3、 若 $\|\boldsymbol{d}\|&\varepsilon $, 则停止计算;否则,置
\(\boldsymbol{x}^{(k+1)} = \boldsymbol{x}^{(k)}+\boldsymbol{d}^{(k)}\);
4、 若 \(k=N\), 则停止计算;否则,置 \(k = k+1\), 转(2).
function [x_star, it] = NewtonRapshon(fun,dfun,x0,ep,it_max)
if nargin &6 it_max = 100; end
if nargin&5 ep =1e-5; end
k = 1; err = 0; n = length(x0);
while k&it_max
d = -feval(dfun,x0)\feval(fun,x0);
err = norm(d,inf);
if err& end
x0 = x1; k = k+1;
x_star = x1; it =
用 Newton 法求非线性方程组\[\begin{cases}
x_1^2+x_2^2-5=0,\\
(x_1+1)x_2-(3x_1+1)=0,
\end{cases}\]
取初始点\(\boldsymbol{x}^{(0)}=[1,1]^T\), 精度要求 \(\varepsilon = 10^{-3}\).
解:\[\boldsymbol{F}(\boldsymbol{x}) =\begin{bmatrix}
f_1(x_1,x_2)\\
f_2(x_1,x_2)\\
\end{bmatrix}= \begin{bmatrix}
x_1^2+x_2^2-5\\
(x_1+1)x_2-(3x_1+1)\\
\end{bmatrix}\]
\[\boldsymbol{J}(\boldsymbol{x}) = \begin{bmatrix}
\dfrac{\partial f_1}{\partial x_1}&\dfrac{\partial
f_1}{\partial x_2}\\
\dfrac{\partial f_2}{\partial x_2}&\dfrac{\partial f_2}{\partial x_2}\\
\end{bmatrix}=
\begin{bmatrix}
2x_1&2x_2\\
x_2-3&x_1+1\\
\end{bmatrix}\]
\[\boldsymbol{x}^{(0)}=\begin{bmatrix}
\end{bmatrix}, \boldsymbol{F}(\boldsymbol{x}^{(0)})=\begin{bmatrix}
\end{bmatrix},\boldsymbol{J}(\boldsymbol{x}^{(0)})=\begin{bmatrix}
2&2\\-2&2\\
\end{bmatrix},\]
解方程\[\begin{bmatrix}
2&2\\-2&2\\
\end{bmatrix}\begin{bmatrix}
d_1\\d_2\\
\end{bmatrix}=-\begin{bmatrix}
\end{bmatrix}\]
得到 \(\boldsymbol{d}^{(0)}=[0.25,1.25]^T\), \(\boldsymbol{x}^{(1)} = \boldsymbol{x}^{(0)}+\boldsymbol{d}^{(0)}=[1.25,2.25]^T\),进入下一轮循环。
在 MATLAB 中,
&& [x_star, it] = NewtonRapshon(Fun,JFun,[1;1])
阅读(...) 评论() &牛顿迭代法解非线性方程组(MATLAB版) - aICER - 博客园
牛顿迭代法,又名切线法,这里不详细介绍,简单说明每一次牛顿迭代的运算:首先将各个方程式在一个根的估计值处线性化(泰勒展开式忽略高阶余项),然后求解线性化后的方程组,最后再更新根的估计值。下面以求解最简单的非线性二元方程组为例(平面二维定位最基本原理),贴出源代码:
1、新建函数fun.m,定义方程组
1 function f=fun(x);
2 %定义非线性方程组如下
3 %变量x1 x2
4 %函数f1 f2
5 syms x1 x2
6 f1 = sqrt((x1-4)^2 + x2^2)-sqrt(17);
7 f2 = sqrt(x1^2 + (x2-4)^2)-5;
8 f=[f1 f2];
2、新建dfun.m,求出一阶微分方程
1 function df=dfun(x);
2 f=fun(x);
3 df=[diff(f,'x1');diff(f,'x2')]; %雅克比矩阵
3、建立newton.m,执行牛顿迭代过程
3 x0=[0 0];
% 迭代初始值
4 eps = 0.00001;
% 定位精度要求
5 for i = 1:10
f = double(subs(fun(x0),{'x1' 'x2'},{x0(1) x0(2)}));
df = double(subs(dfun(x0),{'x1' 'x2'},{x0(1) x0(2)}));
% 得到雅克比矩阵
x = x0 - f/
if(abs(x-x0) & eps)
x0 = % 更新迭代结果
14 disp('定位坐标:');
16 disp('迭代次数:');
结果如下:
定位坐标:
& & 0.0000 & -1.0000
迭代次数:牛顿法搜索非线性方程组数值解的Matlab程序
已有 11497 次阅读
|个人分类:|系统分类:|关键词:牛顿法 非线性 方程组 matlab程序
主要参考:优点:笔者的这个程序比上面的程序通用,理论上可以计算任何非线性方程组初始值附近的解,而且无需自己计算和输入雅可比矩阵,另外输入参数也很自由,最少只需要输入函数、变量和初始值,而且三者只要是长度相同的向量就行了(当然,变量和它的初始值要对应)。程序很短,读者看例子就知道应该怎么用。(前面一大段是注释,还有对输入参数的处理,真正有效的就后面的8行。)不足:没有对牛顿法可能出现的错误进行处理;由于使用了符号计算,大的方程组可能会比较慢一点。其实解非线性方程组可以用matlab本身的fsolve,比这高级。用fsolve定义函数很麻烦,而这个用起来都很简单。有时候simple is better。效果还不错,例子里的HH方程,一般15步迭代就在10^-12精度上与4阶龙格-库塔时间积分达到稳定后结果一致。注意:请不要使用2013a以上的版本,它的subs函数默认返回值为sym变量,会报错!下载:内容:function [xi,i]=newton(fx,x,x0,eps,N)% NEWTON Newton's method to solve nonlinear equations.%% NEWTON(fx,x,x0,eps,N) using newton iteration to search solution % of nonlinear equations 'fx' in function of 'x' nearby inital values 'x0',% with tolerance 'eps' or maximum step 'N'.% NEWTON(fx,x,x0,eps) is the same excpet defautly set N=100.% NEWTON(fx,x,x0) set eps=1.0e-5 and N=100.%% ARGUMENTS:% & & & fx & & & The symsbolic row array of eqs.% & & & x & & & &The symsbolic variables of eqs.% & & & x0 & & & Guessed initial values of x.% & & & eps & & &The tolorence for iteration.% & & & N & & & &The maximum steps for iteration.% % Example 1:% % Fixed points for Quadratic Integerate-and-Fire model (1-dimension)% syms v% fx=v*(v-5);% x=v;% [X1,t]=newton(fx,x,2.4,1.0e-10,100)% [X2,t]=newton(fx,x,2.6,1.0e-10,100)%% Example 2:% % Fixed point for Classic Hodgkin-Huxley model (4-dimensions)% syms v m h n% gNa=120.0; gK=36.0; gL=0.3;% vNa=50; vK=-77; vL=-54.4;% f1=-gNa*m^3*h*(v-vNa) -gK*n^4*(v-vK) -gL*(v-vL) ;% f2=0.1*(v+40)/(1-exp(-(40+v)/10))*(1-m) &-4.0*exp(-(65+v)/18)*m;% f3=0.07*exp(-(65+v)/20)*(1-h) &-1/(exp(-(35+v)/10)+1)*h;% f4=0.01*(v+55)/(1-exp(-(v+55)/10))*(1-n)-0.125*exp(-(v+65)/18)*n;% x=[v,m,h,n];% fx=[f1,f2,f3,f4];% [X,n]=newton(fx,x,[-100,1.0,1.0,1.0],1.0e-15,100);% format long% disp(n)% disp(X)% % ALGORITHM:% & & & &X(n+1) = X(n) - F(X(n)) / DF(X(n)) % & & & & & & & & & & = X(n) - inv(DF(X(n))) * F(X(n))% where DF(Xn) is the differential value at X(n).% The iteration stop when max(X(n+1)-X(n))&eps% or maxmum step N reaching.%% AUTHOR: % CREATED: % LAST MODIFIED: if nargin==3eps=1.0e-5;N=10;elseif nargin==4N=10;elseif nargin~=5 & &error('Too few or too many arguments! (3--5)')endif isrow(x0) & &x0=x0.';endif isrow(x) & &x=x.';endif isrow(fx) & &fx=fx.';enddfx=jacobian(fx,x);for i=1:N & & & &xi=x0-subs(dfx,x,x0)\subs(fx,x,x0); & & & &if max(abs(xi-x0))&eps & & & & & & & & & &end & & & &x0=end
转载本文请联系原作者获取授权,同时请注明本文来自王龙飞科学网博客。链接地址:
上一篇:下一篇:
当前推荐数:0
评论 ( 个评论)
扫一扫,分享此博文
作者的其他最新博文
热门博文导读
Powered by
Copyright &本帖子已过去太久远了,不再提供回复功能。文档分类:
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,
下载前请先预览,预览内容跟原文是一样的,在线预览图片经过高度压缩,下载原文更清晰。
您的浏览器不支持进度条
下载文档到电脑,查找使用更方便
还剩?页未读,继续阅读
播放器加载中,请稍候...
该用户其他文档
下载所得到的文件列表用matlab求解非线性方程组的几种方法之程序.pdf
文档介绍:
第二章非线性方程(组)的数值解法的MATLAB程序
.高等教育出版社 教育电子音像出版社作者:任玉杰本章主要介绍方程根的有关概念,求方程根的步骤,确定根的初始近似值的方法(作图法,逐步搜索法等),求根的方法(二分法,迭代法,牛顿法,割线法,米勒(Müller)法和迭代法的加速等)及其MATLAB 程序,求解非线性方程组的方法及其MATLAB 程序. .
方程方程方程方程((((组组组组))))的根及其的根及其的根及其的根及其MATLABMATLABMATLABMATLAB 命令命令命令命令 ..
求解方程求解方程求解方程求解方程((((组组组组))))的的的的solve命令命令命令命令求方程f(x)=q(x)的根可以用MATLAB命令: && x=solve('方程f(x)=q(x)',’待求符号变量x’)求方程组fi(x,…,xn)=qi(x,…,xn) (i=,,…,n)的根可以用MATLAB命令: &&E=sym('方程f(x,…,xn)=q(x,…,xn)'); ……………………………………………………. En=sym('方程fn(x,…,xn)=qn(x,…,xn)'); [x,x,…,xn]=solve(E,E,…,En, x,…,xn) ..
求解求解求解求解多项式多项式多项式多项式方程方程方程方程((((组组组组))))的的的的roots命令命令命令命令如果)(xf为多项式,则可分别用如下命令求方程)(=xf的根,或求导数)('xf(见表 -). 表 -
求解多项式方程(组)的roots命令命令
功能xk =roots(fa) 输入多项式)(xf的系数fa(按降幂排列),运行后输出xk为)(=xf的全部根. dfa=polyder(fa) 输入多项式)(xf的系数fa(按降幂排列),运行后输出dfa为多项式)(xf的导数)('xf的系数.dfx=polysym(dfa) 输入多项式)(xf的导数)('xf的系数dfa(按降幂排列),运行后输出dfx为多项式)(xf的导数)('xf. .. .. .. ..
求解方程求解方程求解方程求解方程((((组组组组))))的的的的fsolve命令命令命令命令如果非线性方程(组)是多项式形式,求这样方程(组)的数值解可以直接调用上面已经介绍过的roots命令.如果非线性方程(组)是含有超越函数,则无法使用roots命令,需要调用MATLAB系统中提供的另一个程序fsolve来求解.当然,程序fsolve也可以用于多项式方程(组),但是它的计算量明显比roots命令的大. fsolve命令使用最小二乘法(least squares method)解非线性方程(组) (FX=)的数值解,其中X和F(X)可以是向量或矩阵.此种方法需要尝试着输入解X的初始值(向量或矩阵)X,即使程序中的迭代序列收敛,也不一定收敛到(FX=)的根(见例..). fsolve的调用格式的调用格式的调用格式的调用格式: X=fsolve(F,X)第二章第二章第二章第二章 非线性方程非线性方程非线性方程非线性方程((((组组组组))))的数值解法的数值解法的数值解法的数值解法第二章非线性方程(组)的数值解法的MATLAB程序
.高等教育出版社 教育电子音像出版社作者:任玉杰输入函数)(xF的M文件名和解X的初始值(向量或矩阵)X,尝试着解方程(组)(FX=),运行后输出(FX=)解的估计值(向量或矩阵)X.要了解更多的调用格式和功能请输入:help fsolve,查看说明. . . . .
搜索根的方法及其搜索根的方法及其搜索根的方法及其搜索根的方法及其MATLABMATLABMATLABMATLAB 程序程序程序程序求解非线性方程根的近似值时,首先需要判断方程有没有根?如果有根,有几个根?如果有根,需要搜索根所在的区间或确定根的初始近似值(简称初始值).搜索根的近似位置的常用方法有三种:作图法、逐步搜索法和二分法等,使用这些方法的前提是高等数学中的零点定理. ........
作图法及其作图法及其作图法及其作图法及其MATLABMATLABMATLABMATLAB 程序程序程序程序作函数的图形的方法很多,如用计算机软件的图形功能画图,或用高等数学中应用导数作图,或用初等数学的函数叠加法作图等.下面介绍两种作图程序. 作函数作函数作函数作函数)(xfy====在区间在区间在区间在区间 [[[[a,ba,ba,ba,b] ] ] ] 的图形的的图形的的图形的的图形的MATLABMATLABMATLABMATLAB 程序一程序一程序一程序一 x=a:h:b; % h是步长y=f(x); plot(x,y) grid, gtext('y=f(x)')说明:⑴此程序在MATLAB 的工作区输入,运行后即可出现函数)(xfy=的图形.此图形与x轴交点的横坐标即为所要求的根的近似值. ⑵区间[a,b] 的两个端点的距离b-a和步长h的绝对值越小,图形越精确. 作函数作函数作函数作函数)(xfy====在区间在区间在区间在区间 [[[[a,ba,ba,ba,b]]]]上的图形的上的图形的上的图形的上的图形的MATLABMATLABMATLABMATLAB 程序二程序二程序二程序二将)(xfy=化为)()(xgxh=,其中)()(xgxh和是两个相等的简单函数 x=a:h:b; y=h(x); y=g(x); plot(x, y, x, y) grid,gtext(' y=h(x),y=g(x)')说明:此程序在MATLAB 的工作区输入,运行后即可出现函数)()(xgyxhy==和的图形.两图形交点的横坐标即为所要求的根的近似值. 下面举例说明如何用计算机软件MATLAB的图形功能作图. .. .. .. ..
逐步搜索法逐步搜索法逐步搜索法逐步搜索法及其及其及其及其MATLABMATLABMATLABMATLAB 程序程序程序程序逐步搜索法也称试算法.它是求方程)(=xf根的近似值位置的一种常用的方法. 逐步搜索法依赖于寻找连续函数)(xf满足)(af与)(bf异号的区间],[ba.一旦找到区间,无论区间多大,通过某种方法总会找到一个根. MATLAB 的库函数中没有逐步搜索法的程序,现提供根据逐步搜索法的计算步骤和它的收敛判定准则编写其主程序,命名为zhubuss.m.逐步搜索法的逐步搜索法的逐步搜索法的逐步搜索法的MATLABMATLABMATLABMATLAB 主程序主程序主程序主程序输入区间端点a和b的值,步长h和精度tol,运行后输出迭代次数k=(b-a)/h+,方程)(=xf根的近似值r.fu1
内容来自淘豆网转载请标明出处.
浏览:48次

我要回帖

更多关于 matlab解不定方程组 的文章

 

随机推荐