matlab求解微分方程组(matlab解微分方程的数值解)

如何用matlab来求解简单的微分方程?举例来说明吧。求解三阶常微分方程。我们知道,求解高阶常微分方程可以化为求解一阶常微分方程组。编写函数eq3.m:%解常微分方程3*y”’+5*y”+6*sin(t)*y=costfunctionydot=eq3(t,y)ydot=[y(2);y(3);(cos(t)-5*y(3)-6*sin(t)*y(1))/3];其中,ydot为一个

大家好,又见面了,我是你们的朋友全栈君。

如何用matlab来求解简单的微分方程?举例来说明吧。

  • 求解三阶常微分方程。我们知道,求解高阶常微分方程可以化为求解一阶常微分方程组。编写函数eq3.m:
%解常微分方程 3*y'''+5*y''+6*sin(t)*y=cost
function ydot = eq3(t,y) 
ydot=[y(2);y(3);(cos(t)-5*y(3)-6*sin(t)*y(1))/3]; 

其中,ydot为一个列向量,值分别表示y‘(1)、y‘(2)、y‘(3)的取值,t自因变量,y为因变量,一个y就可以表示因变量组了。事实上,说白了,这个函数就是申明一下变量使t和y,以及y一阶导的右端项为那三个。
接着,编写主函数如下:

%解常微分方程 3*y'''+5*y''+6*sin(t)*y=cost [t23,y23]=ode23(@eq3,[0,5],[0,1,3]) 

[0,5]表示自变量(这里是t)取值范围,[0,1,3]表示初始条件,也就是 y0y0y′′0 y 0 , y 0 ′ , 和 y 0 ″ ,计算出来的结果又三列数,分别表示 yyy′′ y , y ′ , 和 y ″ 在[0,5]中的取值。如图:
这里写图片描述

  • 二阶常微分方程
    编写函数eq2.m
function ydot= eq2(t,y)
ydot=[y(2);-3-cos(2*t) + 2*sin(t)+t-3.8]; 

主函数

clc
clear
[t,y]=ode23('eq2',[0,20],[0,1]); 
plot(t,y(:,1),'-',t,y(:,2),'-.')

这里写图片描述

  • 求解微分方程,以上matlab内部用的是欧拉折现法,或者是单步法的改进,得不到一个解析解。那么如何求带初值问题的解析解呢?如下:
y=dsolve('D3y-D2y=x','y(1)=8,Dy(1)=7,D2y(1)=4','x') 

一目了然,就不多解释了。

  • 方程组解析解,以及带初始条件的解析解。
clc,clear
equ1='D2f+3*g=sin(x)'; 
equ2='Dg+Df=cos(x)'; 
[general_f,general_g]=dsolve(equ1,equ2,'x') 
[f,g]=dsolve(equ1,equ2,'Df(2)=0,f(3)=3,g(5)=1','x') 
  • 非齐次线性方程组:

编写vdp1.m

function dy=vdp1(t,y); 
dy=[y(2);(1-y(1)^2)*y(2)-y(1)]; 

主函数:

[T,Y]=ode45('vdp1',[0 20],[2;0]); 
%观察结果。利用plot输出解的结果:
plot(T,Y(:,1),'-',T,Y(:,2),'--') 
title('Solution of van der Pol Equation,mu=1');
xlabel('time t'); 
ylabel('solution y'); 
legend('y1','y2');

绘图:
这里写图片描述
– 求解高阶微分方程
1、编写F.m函数,并保存

 function dy=F(t,y);
dy=[y(2);y(3);3*y(3)+y(2)*y(1)];

2、主函数

[T,Y]=ode45('F',[0 1],[0;1;-1]) %求解y'''-3y'-yy'=0 y(0)=0 y'(0)=1 y''(0)=-1
  • 求无初始条件的微分方程的解析通解各项
clc
clear
syms x y 
diff_equ='x^2+y+(x-2*y)*Dy=0'; 
dsolve(diff_equ,'x') 
%求无初始条件的微分方程的解析通解各项
  • 求线性系统的解析解并画相图
clc,clear
equ1='Dx1 - x2 = 0'; 
equ2='Dx2 + x1 + 2*x2 =0'; 
%[general_f,general_g]=dsolve(equ1,equ2,'t') 
[x1,x2]=dsolve(equ1,equ2,'x1(0)=1,x2(0)=0','t') 
x1_fun = matlabFunction(x1)
x2_fun = matlabFunction(x2)
t = 0:0.01:100
plot(x1_fun(t),x2_fun(t))
plot(t,x1_fun(t))
hold on;
plot(t,x2_fun(t))
hold off;
好吧,就说这么多了。这里介绍的是matlab内置的算法,知道原理自己动手编也是很快的啦。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125951.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python发送soap报文_python处理SOAP API

    python发送soap报文_python处理SOAP API我们常见的API一般是restful,但是有的时候也会遇到非restful的时候,对于RestfulAPI,我们很容易用python处理。SOAPAPI我们如何来处理呢?首先我们需要了解RestfulAPI和SOAPAPI架构TheRepresentationalStateTransfer(REST)架构服务通过统一资源定位器(URL)公开。这个逻辑名称将资源的标识与所接…

    2022年7月13日
    22
  • JAVA贪吃蛇代码(带注释)

    JAVA贪吃蛇代码(带注释)贪吃蛇图片是代码里面的素材游戏数据类packagecom.tang.retor_snaker;importjavax.swing.*;importjava.net.URL;publicclassData{privatestaticURLbodyURL=Data.class.getResource(“/com/tang/retor_snaker/statics/body.png”);privatestaticImageIconbo

    2022年5月25日
    63
  • rpm安装和卸载[通俗易懂]

    rpm安装和卸载[通俗易懂]一安装RPM是RedHat公司随RedhatLinux推出了一个软件包管理器,通过它能够更加轻松容易地实现软件的安装。  1.安装软件:执行rpm-ivhrpm包名,如:  #rpm-ivhapache-1.3.6.i386.rpm  2.升级软件:执行rpm-Uvhrpm包名。  3.反安装:执行rpm-erpm包名。  4.查询软件包的详细信息:执行r

    2022年5月22日
    90
  • Druid 介绍及配置「建议收藏」

    Druid 介绍及配置「建议收藏」 转自阿里Druid官方,欢迎大家使用Druid,常见问题在这里解答,希望对大家有所帮助。1.Druid是什么?Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。2.在哪里下载druid正式版本下载: maven中央仓库: http://central.maven.org/maven2/com/alibaba/druid/ 3.怎么获…

    2022年7月23日
    13
  • centos7系统更新命令_centos 更新

    centos7系统更新命令_centos 更新1.查看网络IP ifconfig2.下载命令 wget+网址3.安装 yum-y install + 目标4.删除文件 sudo rm 文件所在目录/目标强制删除文件 rm -f删除目录 rm -rf5.复制一个文件到另一个文件夹sudo cp /文件夹/文件 /另一个文件夹6.对一些文件进行读写sudo vim 文件名7….

    2022年8月19日
    12
  • 1.注册或登录页面设计:UILabel,UIButton,UITextField

    1.注册或登录页面设计:UILabel,UIButton,UITextField

    2021年8月29日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号