MATLAB求解非线性方程

上传人:飞*** 文档编号:3691529 上传时间:2017-08-10 格式:DOCX 页数:6 大小:16.83KB
返回 下载 相关 举报
MATLAB求解非线性方程_第1页
第1页 / 共6页
MATLAB求解非线性方程_第2页
第2页 / 共6页
MATLAB求解非线性方程_第3页
第3页 / 共6页
MATLAB求解非线性方程_第4页
第4页 / 共6页
MATLAB求解非线性方程_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《MATLAB求解非线性方程》由会员分享,可在线阅读,更多相关《MATLAB求解非线性方程(6页珍藏版)》请在金锄头文库上搜索。

1、1、解方程最近有多人问如何用 matlab 解方程组的问题,其实在 matlab 中解方程组还是很方便的,例如,对于代数方程组 Ax=b(A 为系数矩阵,非奇异) 的求解,MATLAB 中有两种方法:(1)x=inv(A)*b 采用求逆运算解方程组;(2)x=A 采用左除运算解方程组。例:x1+2x2=82x1+3x2=13A=1,2;2,3;b=8;13;x=inv(A)*bx =2.003.00x=Ax =2.003.00;即二元一次方程组的解 x1 和 x2 分别是 2 和 3。对于同学问到的用 matlab 解多次的方程组,有符号解法,方法是:先解出符号解,然后用vpa(F,n)求出

2、n 位有效数字的数值解.具体步骤如下:第一步:定义变量 syms x y z .;第二步:求解x,y,z,.=solve(eqn1,eqn2,.,eqnN,var1,var2,.varN);第三步:求出 n 位有效数字的数值解 x=vpa(x,n);y=vpa(y,n);z=vpa(z,n);.。如:解二(多)元二(高)次方程组:x2+3*y+1=0y2+4*x+1=0解法如下:syms x y;x,y=solve(x2+3*y+1=0,y2+4*x+1=0);x=vpa(x,4);y=vpa(y,4);结果是:x =1.635+3.029*i1.635-3.029*i-.283-2.987y

3、 =1.834-3.301*i1.834+3.301*i-.3600-3.307。二元二次方程组,共 4 个实数根;还有的同学问,如何用 matlab 解高次方程组(非符号方程组)?举个例子好吗?解答如下:基本方法是:solve(s1,s2, ,sn,v1,v2,vn),即求表达式 s1,s2,sn 组成的方程组,求解变量分别 v1,v2,vn。具体例子如下:x2 + x*y + y = 3x2 - 4*x + 3 = 0解法: x,y = solve(x2 + x*y + y = 3,x2 - 4*x + 3 = 0)运行结果为x =1 3y =1 -3/2即 x 等于 1 和 3;y 等于

4、 1 和-1.5或x,y = solve(x2 + x*y + y = 3,x2 - 4*x + 3= 0,x,y)x =1 3y =1 -3/2结果一样,二元二方程都是 4 个实根。通过这三个例子可以看出,用 matlab 解各类方程组都是可以的,方法也有多种,只是用到解方程组的函数,注意正确书写参数就可以了,非常方便。cite from:http:/ fsolve 命令就可以了,但是对于方程组中某一系数是变化的,该怎么求呢?%定义方程组如下,其中 k 为变量function F = myfun(x,k)H=0.32;Pc0=0.23;W=0.18;F=Pc0+H*(1+1.5*(x(1)/

5、W-1)-0.5*(x(1)/W-1)3)-x(2);x(1)-k*sqrt(x(2);%求解过程H=0.32;Pc0=0.23;W=0.18;x0 = 2*W; Pc0+2*H; % 取初值options = optimset(Display,off);k=0:0.01:1; % 变量取值范围0 1for i=1:1:length(k)kk=k(i);x = fsolve(x) myfun(x,kk), x0, options);%求解非线性方程组x1(i)=x(1);x2(i)=x(2);endplot(k,x1,-b,k,x2,-r);xlabel(k)legend(x1,x2)cite

6、 from:http:/ 里 solve 如何使用, 是否有别的函数可以代替它.matlab 里我解 y=9/17*exp(-1/2*t)*17(1/2)*sin(1/2*17(1/2)*t)=0 这样的方程为什么只得到0 这一个解, 如何可以的到 1/2*17(1/2)*t=n*(pi)这样一族解?在 matlab 里面 solve 命令主要是用来求解代数方程(即多项式)的解,但是也不是说其它方程一个也不能解,不过求解非代数方程的能力相当有限,通常只能给出很特殊的实数解。(该问题给出的方程就是典型的超越方程,非代数方程)从计算机的编程实现角度讲,如今的任何算法都无法准确的给出任意非代数方程的

7、所有解,但是我们有很多成熟的算法来实现求解在某点附近的解。matlab 也不例外,它也只能给出任意非代数方程在某点附近的解,函数有两个:fzero 和 fsolve,具体用法请用 help 或 doc 命令查询吧。如果还是不行,你还可以将问题转化为非线性最优化问题,求解非线性最优化问题的最优解,可以用的命令有:fminbnd, fminsearch, fmincon 等等。*非线性方程数值求解*单变量非线性方程求解在 MATLAB 中提供了一个 fzero 函数,可以用来求单变量非线性方程的根。该函数的调用格式为:z=fzero(fname,x0,tol,trace)其中 fname 是待求根

8、的函数文件名,x0 为搜索的起点。一个函数可能有多个根,但 fzero函数只给出离 x0 最近的那个根。tol 控制结果的相对精度,缺省时取 tol=eps,trace 指定迭代信息是否在运算中显示,为 1 时显示,为 0 时不显示,缺省时取 trace=0。例 求 f(x)=x-10x+2=0 在 x0=0.5 附近的根。步骤如下:(1) 建立函数文件 funx.m。function fx=funx(x)fx=x-10.x+2;(2) 调用 fzero 函数求根。z=fzero(funx,0.5)z =0.3758*非线性方程组的求解对于非线性方程组 F(X)=0,用 fsolve 函数求其

9、数值解。fsolve 函数的调用格式为:X=fsolve(fun,X0,option)其中 X 为返回的解,fun 是用于定义需求解的非线性方程组的函数文件名,X0 是求根过程的初值,option 为最优化工具箱的选项设定。最优化工具箱提供了 20 多个选项,用户可以使用 optimset 命令将它们显示出来。如果想改变其中某个选项,则可以调用 optimset()函数来完成。例如,Display 选项决定函数调用时中间结果的显示方式,其中off为不显示,iter表示每步都显示, final只显示最终结果。 optimset(Display,off)将设定Display 选项为off 。例 求

10、下列非线性方程组在(0.5,0.5) 附近的数值解。(1) 建立函数文件 myfun.m。function q=myfun(p)x=p(1);y=p(2);q(1)=x-0.6*sin(x)-0.3*cos(y);q(2)=y-0.6*cos(x)+0.3*sin(y);(2) 在给定的初值 x0=0.5,y0=0.5 下,调用 fsolve 函数求方程的根。x=fsolve(myfun,0.5,0.5,optimset(Display,off)x =0.63540.3734将求得的解代回原方程,可以检验结果是否正确,命令如下:q=myfun(x)q =1.0e-009 *0.2375 0.2

11、957可见得到了较高精度的结果。cite from:http:/ fsolve 函数解方程X,FVAL,EXITFLAG,OUTPUT,JACOB=FSOLVE(FUN,X0,.) returns theJacobian of FUN at X.ExamplesFUN can be specified using :x = fsolve(myfun,2 3 4,optimset(Display,iter)where myfun is a MATLAB function such as:function F = myfun(x)F = sin(x);FUN can also be an anon

12、ymous function:x = fsolve(x) sin(3*x),1 4,optimset(Display,off)If FUN is parameterized, you can use anonymous functions to capture theproblem-dependent parameters. Suppose you want to solve the system ofnonlinear equations given in the function myfun, which is parameterizedby its second argument c.

13、Here myfun is an M-file function such asfunction F = myfun(x,c)F = 2*x(1) - x(2) - exp(c*x(1)-x(1) + 2*x(2) - exp(c*x(2);To solve the system of equations for a specific value of c, first assign thevalue to c. Then create a one-argument anonymous function that capturesthat value of c and calls myfun with two arguments. Finally, pass this anonymousfunction to FSOLVE:c = -1; % define parameter firstx = fsolve(x) myfun(x,c),-5;-5)cite from:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 技术指导

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号