1、1.roots 求解多项式的根r=roots(c)注意:c 为一维向量,者返回指定多项式的所有根( 包括复根),poly 和 roots 是互为反运算,还有就是 roots 只能求解多项式的解还有下面几个函数 poly2sym、sym2poly、eigsyms xy=x5+3*x3+3;c=sym2poly(y);%求解多项式系数r=roots(c);poly(r)2.residue 求留数r, p, k = residue(b,a)b = 5 3 -2 7a = -4 0 8 3r, p, k = residue(b,a)3.solve 符号解方程(组) 使用最多的g = solve(eq1
2、,eq2,.,eqn,var1,var2,.,varn)注意:eqn 和 varn 可以是符号表达式,也可以是字符串表达式,但是使用符号表达式时不能有“=”号,假如说 varn 没有给出,使用 findsym 函数找出默认的求解变量。返回的 g 是一个结构体,以 varn 为字段。由于符号求解的局限性,好多情况下可能得到空矩阵,此时只能用数值解法解方程 A=solve(a*x2 + b*x + c)解方程组 B=solve(a*u2 + v2, u - v = 1, a2 - 5*a + 6)4.fzero 数值求零点x,fval,exitflag,output=fzero(fun,x0,op
3、tions,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 是已知参数,但是每次都改变那么目标函数如下三种书写格式,效果完全等效。注意参数列表中,未知数一定放第一位,其他参
4、数放后面(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 使用的默认的话,那直接使用,p 和 t 就是我们需要传递的参数fzero(x)objfun(x,p,t),x0,options)%这种格式与上面的等效区别就是前
5、者,将参数 p 和 t 作为 fzero 的参数进行传递,而后者是将 p 和 t 作为 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 只能求解单变量的方程,没法求解复数、多变
6、量以及方程组等。在搜索过程中出现 inf,nan,复数将会终止计算,也就是说不能求解复数解,并且每次子返回一个解5.fsolve 数值解方程 (组) 使用最多的数值解法x,fval,exitflag,output,jacobian=fsolve(fun,x0,options,p1,p2.)fsolve 的参数意义大部分与 fzero 相同,只是优化参数更多了,使用更灵活另外一定注意 x0的长度必须与变量的个数相等。它与 fzero 的区别是,首先当然算法不同,另外 fsolve 的功能强大多很多,它可以直接方便的求解多变量方程组,线性和非线性,超静定和静不定方程,还可求解复数方程fun 同样可
7、以是句柄、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)基于 MATLAB/fsolve 函数的四连杆机构运动轨迹仿真-机械工程师