首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

matlab常用解方程以及方程组函数大全

matlab常用解方程以及方程组函数大全

1.roots求解多项式的根

r=roots(c)
注意:c为一维向量,者返回指定多项式的所有根(包括复根),polyroots是互为反运算,还有就是roots只能求解多项式的解

还有下面几个函数poly2symsym2polyeig

>>syms x
>>y=x^5+3*x^3+3;
>>c=sym2poly(y);%
求解多项式系数

>>r=roots(c);
>>poly(r)

2.residue
求留数

[r, p, k] = residue(b,a)
>>b = [ 5 3 -2 7]
>>a = [-4 0 8 3]
>>[r, p, k] = residue(b,a)

3.solve
符号解方程()——使用最多的

g = solve(eq1,eq2,...,eqn,var1,var2,...,varn)

注意:eqnvarn可以是符号表达式,也可以是字符串表达式,但是使用符号表达式时不能有“=”号,假如说varn没有给出,使用findsym函数找出默认的求解变量。返回的g是一个结构体,以varn为字段。由于符号求解的局限性,好多情况下可能得到空矩阵,此时只能用数值解法

解方程A=solve('a*x^2 + b*x + c')

解方程组
B=solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a + 6')

4.fzero
数值求零点

[x,fval,exitflag,output]=fzero(fun,x0,options,p1,p2...)

fun
是目标函数,可以是句柄(@)inline函数或M文件名  
x0
是初值,可以是标量也可以是长度为2的向量,前者给定一个位置,后者是给定一个范围

options是优化参数,通过optimset设置,optimget获取,一般使用默认的就可以了,具体参照帮助
p1,p2...为需要传递的其它参数

假如说(x/1446)^2+p/504.1+(t/330.9)*(log(1-x/1446)+(1-1/5.3)*x/1446)=0的根,其中p,t是已知参数,但是每次都改变

那么目标函数如下三种书写格式,效果完全等效。注意参数列表中,未知数一定放第一位,其他参数放后面
(1)objfun=@(x,p,t)(x/1446).^2+p/504.1+(t/330.9).*(log(1-x/1446)+(1-1/5.3).*x/1446);
(2)
objfun=inline('(x/1446).^2+p/504.1+(t/330.9).*(log(1-x/1446)+(1-1/5.3).*x/1446)','x','p','t')

此时的调用格式如下
fzero(objfun,x0,options,p,t)%如果options使用的默认的话,那直接使用[]pt就是我们需要传递的参数
fzero(@(x)objfun(x,p,t),x0,options)%这种格式与上面的等效
区别就是前者,将参数pt作为fzero的参数进行传递,而后者是将pt作为objfun的参数进行传递,没有本质区别

(3)function f=objfun(x,p,t)%M文件格式书写目标函数
   f=(x/1446).^2+p/504.1+(t/330.9).*(log(1-x/1446)+(1-1/5.3).*x/1446);

此时有三种调用格式
fzero(@objfun,x0,options,p,t)
fzero('objfun',x0,options,p,t)
fzero(@(x)objfun(x,p,t),x0,options)

注意:fzero只能求解单变量的方程,没法求解复数、多变量以及方程组等。在搜索过程中出现inf,nan,复数将会终止计算,也就是说不能求解复数解,并且每次子返回一个解

5.fsolve数值解方程()——使用最多的数值解法

[x,fval,exitflag,output,jacobian]=fsolve(fun,x0,options,p1,p2...)

fsolve
参数意义大部分与fzero相同,只是优化参数更多了,使用更灵活另外一定注意x0的长度必须与变量的个数相等。它与fzero的区别是,首先当然算法不同,另外fsolve的功能强大多很多,它可以直接方便的求解多变量方程组,线性和非线性,超静定和静不定方程,还可求解复数方程

fun同样可以是句柄、inline函数或M文件,但是一般M文件比较多,这是由于fsolve是解方程组的,目标函数一般比较烦,直接写比较困难

比如解方程组x1+x2=8 x1-2*x2-2*p=0(当然可以求解非线性的)

目标函数同样有三种书写格式
(1)objfun=@(x,p)[x(1)+x(2)-8;x(1)-3*x(2)+2*p];
(2)
objfun=inline('[x(1)+x(2)-8;x(1)-3*x(2)+2*p]','x','p')

此时的调用格式有
fsolve(objfun,x0,options,p)
fsolve(@(x)objfun(x,p),x0,options)

(3)
function f=objfun(x,p)
   f(1)=x(1)+x(2)-8;
   f(2)=x(1)-3*x(2)+2*p;

当然你也可以直接写成,两者的效果是一样的

   f=[x(1)+x(2)-8;
     x(1)-3*x(2)+2*p];

此时的调用格式有
fsolve(@objfun,x0,options,p)
fsolve('objfun',x0,options,p)
fsolve(@(x)fun(x,p),x0,options)

继承事业,薪火相传
返回列表