Matlab多项式求根和微分方程求解(专题六)

目录

多项式求根

poly

roots

函数求根

solve

fzero(非线性函数)

 fsolve(非线性方程组)

 求解微分方程

1.符号解

  (1)线性和部分非线性

    a.线性

 b.部分非线性

    (2)非线性

2.数值解

(1)龙格-库塔

(2)欧拉方法


 

多项式求根

poly

 p = poly(r)
 p = poly(A)

r是多项式的跟,返回的p是多项式系数。

A是方阵,返回的p是特征多项式的系数。

例如已知某多项式的跟为1,2,求该多项式。

poly([1 2])

ans =1    -3     2

则该多项式为eq?x%5E2-3x+2

结果不太好看??

那么我们可以用poly2sym函数来进行

poly2sym([1 -3 2])

5c11a1784dad4cee8663039bf55e226d.png 

再如,求方阵eq?A%3D%5Cbegin%7Bbmatrix%7D%201%20%262%20%5C%5C1%20%26%202%20%5Cend%7Bbmatrix%7D的特征多项式。

这是比较简单的矩阵,可以手算

f77a5ef6ada74a6781fd42680358ad62.png

当矩阵比较复杂时建议用代码实现

A=[1 2;1 2];
poly([A])

ans =1    -3     0   

eq?%5Clambda%5E2-3%5Clambda%20+0

来个复杂的矩阵B=[4 6 0;-3 -5 0;-3 -6 1]

db31f704de864afd944cd08c967733f3.png

roots

我们知道上一题中特征多项式为eq?%5Clambda%5E3+0*%20%5Clambda-3%20%5Clambda+2=0;

那么假如我们想求特征值(根),可以用roots命令来做

保留上面的B矩阵并赋值r.

c3647c18afe54f28ac460f3691f7d89a.png

roots也可用于多项式

例如求(题目来源高代三导从书第一章例1.15)

eq?x%5E7+2x%5E6+6x%5E5-8x%5E4-17x%5E3+6x%5E2-20x+8%3D0的根。

5d62598ec5fa40a49b85fe1f8e0c7a44.png

 

太复杂?好的,咱们来道简单题

eq?x%5E2-3x+2的根

216c04a3084242e4b37704e489c675f7.png

函数求根

solve

S = solve(eqn,var)

eqn为方程组或者单个方程,var为需要求的方程的变量。

比如求单变量方程eq?%5Cfrac%7B%28n-100%29%28n-300%29%7D%7B20000%7D+0.4%3D0,求n的值。

syms n;
y=(n-100)*(n-300)/20000+0.4;
y1=solve(y==0,n);
vpa(y1,4)%精确四位小数

7dd330231e2c45d4b050d3f1899621a3.png 

再如求多变量方程组

 eq?%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%20x%5E2+y%5E2%3D1%5C%5C%20x+y%3D1%20%5Cend%7Bmatrix%7D%5Cright.

clear
syms x y
eq=[x^2+y^2==1,x+y==1];
vars=[x,y];
[x,y]=solve(eq,vars)

即x=0,1.y=1,0 

 

fzero(非线性函数)

 x = fzero(fun,x0)

 fun - 求解的函数
        函数句柄(标识符@(x)) | 函数名称(变成字符串形式)

 x0 - 初始值
        标量 | 二元素向量

x0是初始猜测值,或者猜测的范围。

标准形式f(x)=0

标识符写法

fun=@(x)x^3-2*x-5;
fzero(fun,1)
%fzero(fun,[-5,5])

字符串写法

fun='x^3-2*x-5';
fzero(fun,1)
%fzero(fun,[-5,5])

 fsolve(非线性方程组)

例如用fsolve求下非线性方程组。

c43ac20909984b15b1c6de74ff66ee3d.png

先编写m函数文件

function F=c(x)
F=[2*x(1)-x(2)-exp(-x(1));
    -x(1)+2*x(2)-exp(-x(2))
    ];

记得保存,然后在命令行引用c编写好的函数。

x=fsolve('c',[-5,-5])

 求解微分方程

1.符号解

  (1)线性和部分非线性

    a.线性

eq?y%7B%7D%27%3D2ax的通解

y1=dsolve('Dy=2*a*x','x')

 1f4e61be32b747bf96b8dafec6219e66.png

eq?3y%27%27+4y%27+5y%3De%5Ex的特解

满足初始值y'(0)=0,y(0)=1

y2=dsolve('3*D2y+4*Dy+5*y=exp(x)','Dy(0)=0','y(0)=1','x');
simplify(y2)

 b.部分非线性

求方程特解x,y(1)=2.

clear
y3=dsolve('Dy=x/y+y/x','y(1)=2','x')

    (2)非线性

需要自己手动调用x,y

1e1a14f601434c71843eccd019f9ac80.png

clear
S=dsolve('Dx=y+1','Dy=x+1','x(0)=-2','y(0)=0','t');
x=S.x
y=S.y

经过2023版本测试,可以不需要自己手动调用,即最后两行可不要。2014可能需要调用。

2.数值解

(1)龙格-库塔

(2)欧拉方法

这两个方法由于内容较多,我会下主页下一篇文章中详细展开来讲

 

  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无常(F)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值