欧拉法与梯形法求解微分方程【含matlab源代码】

这篇具有很好参考价值的文章主要介绍了欧拉法与梯形法求解微分方程【含matlab源代码】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

梯形法求解微分方程,matlab,开发语言

本文介绍两种入门级求解微分方程的方法 —— 梯形法与欧拉法。

梯形法求解微分方程,matlab,开发语言

梯形法求解微分方程,matlab,开发语言

将上述方程组改写成matlab语言:

function F = fun(t,Y)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                            %
%   程序作者:Miracle         (matlab爱好者公众号)           %
%                                                            %
%              欢迎关注matlab爱好者公众号                      %
%                                                            %
% 任何人都可以免费无条件获取本程序,切勿将本程序用于商业用途。%
% 程序版权归matlab爱好者公众号所有。%
%                                                            %
% 敬告:切勿删改本声明部分,否则将自动失去本程序的使用权               %
%                                                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 把初值传给T、T、V、C
T = Y(1);
Tx = Y(2);
V = Y(3);
C = Y(4);
% 设置对应的微分方程
f1 = 1 - 0.1*T + 0.5*T*(1 - (T + Tx)/1000) - 0.0014*V*T;
f2 = 0.0014*V*T - 0.9*Tx - 0.03*Tx*C;
f3 = 3.09375*Tx - (3+0.007*T)*V;
f4 = 0.03*Tx*C-0.06*C;
% 放在一起
F = [f1;f2;f3;f4];
end

一、欧拉法

1.1 向前欧拉公式

梯形法求解微分方程,matlab,开发语言

1.2 向后欧拉公式

梯形法求解微分方程,matlab,开发语言

   欧拉法求解源代码   

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                            %
%   程序作者:Miracle         (matlab爱好者公众号)           %
%                                                            %
%              欢迎关注matlab爱好者公众号                      %
%                                                            %
% 任何人都可以免费无条件获取本程序,切勿将本程序用于商业用途。%
% 程序版权归matlab爱好者公众号所有。%
%                                                            %
% 敬告:切勿删改本声明部分,否则将自动失去本程序的使用权               %
%                                                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


clear;clc;close all;
Delta = 0.001;       %定义步长
t = 0:Delta:50;      %定义自变量t
n = length(t);       %自变量长度n
Y(:,1) = [20.7172;2;3.1478*10^5;122.1667]; %定义T T* V C的初始值


%% 自定义欧拉法,求解微分方程组
for k = 1:n-1
    %向前欧拉法
    %Y(:,k+1) = Y(:,k) + Delta*f(t(k),Y(:,k));
    Y(:,k+1) = Y(:,k) + Delta*f(t(k),Y(:,k));
    Y(:,k+1) = Y(:,k) + Delta*f(t(k+1),Y(:,k+1));
end
% 给T、T*、V、C赋值
T = Y(1,:);
T_xing = Y(2,:);
V =  Y(3,:);
C =  Y(4,:);
%% 绘制图像
figure;
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]);
subplot(2,2,1);
plot(t,T,'linewidth',1);xlabel('t');ylabel('T');title('T');
subplot(2,2,2);
plot(t,T_xing,'linewidth',1);xlabel('t');ylabel('T^*');title('T^*');
subplot(2,2,3);
plot(t,V,'linewidth',1);xlabel('t');ylabel('V');title('V');
subplot(2,2,4)
plot(t,C,'linewidth',1);xlabel('t');ylabel('C');title('C');

  欧拉法结果图  

梯形法求解微分方程,matlab,开发语言

二、梯形法

梯形法求解微分方程,matlab,开发语言

   梯形法求解源代码   

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                            %
%   程序作者:Miracle         (matlab爱好者公众号)           %
%                                                            %
%              欢迎关注matlab爱好者公众号                      %
%                                                            %
% 任何人都可以免费无条件获取本程序,切勿将本程序用于商业用途。%
% 程序版权归matlab爱好者公众号所有。%
%                                                            %
% 敬告:切勿删改本声明部分,否则将自动失去本程序的使用权               %
%                                                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


clear;clc;close all;
Delta = 0.001;        % 定义步长
t = 0:Delta:50;       % 定义自变量t
n = length(t);        % 自变量长度n
Y(:,1) = [20.7172;2;3.1478*10^5;122.1667];%定义T T* V C的初始值


%% 自定义梯形公式法,求解微分方程组
for k = 1:n-1    
    Y(:,k+1) = Y(:,k) + Delta*f(t(k),Y(:,k));
    Y(:,k+1) = Y(:,k) + Delta*(f(t(k),Y(:,k))+f(t(k+1),Y(:,k+1)));
end
% 给T、T*、V、C赋值
T = Y(1,:);
T_xing = Y(2,:);
V =  Y(3,:);
C =  Y(4,:);
%% 绘制图像
figure;
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]);
subplot(2,2,1);plot(t,T,'linewidth',1);xlabel('t');ylabel('T');title('T');
subplot(2,2,2);plot(t,T_xing,'linewidth',1);xlabel('t');ylabel('T^*');title('T^*');
subplot(2,2,3);plot(t,V,'linewidth',1);xlabel('t');ylabel('V');title('V');
subplot(2,2,4);plot(t,C,'linewidth',1);xlabel('t');ylabel('C');title('C');

   梯形法结果图   

梯形法求解微分方程,matlab,开发语言

感谢Miracle向公众号投稿!欢迎更多爱好、喜欢matlab编程的朋友来稿,在公众号回复“投稿”了解投稿详情。

参考资料:

[1] https://blog.csdn.net/weixin_42141390/article/details/110184743
[2] https://blog.csdn.net/misskissC/article/details/8913941

图片来源:由 Gerd Altmann 在Pixabay上发布文章来源地址https://www.toymoban.com/news/detail-553223.html

到了这里,关于欧拉法与梯形法求解微分方程【含matlab源代码】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于MATLAB的微分方程的解析解与欧拉算法的数值解(附完整代码)

    正常的求解微分方程的MATLAB格式如下: 如果需要指明自变量,则如下: 格式中的 fi 既可以描述微分方程,又可以描述 初始条件 或 边界条件 。 描述微分方程的MATLAB格式为: D4y=7 ; 描述条件的MATLAB格式为: D2y(2)=3 ; 输入信号u(t)如下: 求解如下微分方程的通解 解: 此题需

    2023年04月09日
    浏览(45)
  • MATLAB求解偏微分方程【PDE和差分法】

    目录 前言  1.用差分法求解 显示差分 其他方程举例 : r是什么 2.PDETOOL 3.pdepe函数 示例:热方程 代码:   在我们处理一些公式时,常常会有偏微分方程出现,所以我今天整理了一下求解偏微分方程的常用方法,希望有所帮助 在1979年复旦大学学者的一篇论文里,谈到了偏微分

    2024年02月04日
    浏览(49)
  • MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

    非线性方程的求根方法很多,常用的有牛顿迭代法,但该方法需要求原方程的导数,而在实际运算中这一条件有时 是不能满足的,所以又出现了弦截法、二分法等其他方法。 在 MATLAB 中,非线性方程的求解和最优化问题往往需要调用最优化工具箱来解决。优化工具箱提供了一

    2024年02月08日
    浏览(54)
  • matlab使用教程(27)—微分代数方程(DAE)求解

            微分代数方程是一类微分方程,其中一个或多个因变量导数未出现在方程中。方程中出现的未包含其导数的变量称为代数变量,代数变量的存在意味着您不能将这些方程记为显式形式 y ′ = f t , y 。相反,您可以解算下列形式的 DAE:         • ode15s 和 ode23t

    2024年02月11日
    浏览(46)
  • 【数学建模\MATLAB】掌握用Matlab求解微分方程问题

    d y d t = a y 2 cfrac{dy}{dt}=ay^2 d t d y ​ = a y 2 结果 d 3 y d t 3 = b y cfrac{d^3y}{dt^3}=by d t 3 d 3 y ​ = b y 结果 x 2 + y + ( x − 2 y ) y ′ = 0 x^2+y+(x-2y)yprime=0 x 2 + y + ( x − 2 y ) y ′ = 0 结果: d 2 y d t 2 = a y , 初 始 条 件 为 y ( 0 ) = 5 , y ′ ( 0 ) = 1 cfrac{d^2y}{dt^2}=ay, text初始条件为y(0)=5,yprime(

    2024年02月03日
    浏览(43)
  • matlab使用教程(28)—微分方程(ODE)求解常见问题

            本博客说明如何将 ODE 解约束为非负解。施加非负约束不一定总是可有可无,在某些情况下,由于方程的物理解释或解性质的原因,可能有必要施加非负约束。仅在必要时对解施加此约束,例如不这样做积分就会失败或者解将不适用的情况。         如果解的

    2024年02月11日
    浏览(54)
  • 微分方程+传染病模型(指数传播、SI、SIS、SIR模型)+MATLAB求解

    本文为北海的数模课程学习笔记,课程出自微信公众号:数学建模BOOM。 求赞!求收藏!求关注! 微分方程结合传染病模型(如指数传播、SI、SIS、SIR模型)提供了一种用数学公式描述疾病传播动态的方法,有助于理解和预测疾病在人群中的传播路径和速度。 目录 指数传播模

    2024年02月04日
    浏览(57)
  • Fortran 微分方程求解 --ODEPACK

    最近涉及到使用Fortran对微分方程求解,我们知道MATLAB已有内置的函数,比如ode家族,ode15s,对应着不同的求解办法。通过查看odepack的官方文档,我尝试使用了dlsode求解刚性和非刚性常微分方程组。 首先是github网址:https://github.com/jacobwilliams/odepack 具体使用办法: 1.我使用的

    2024年02月11日
    浏览(42)
  • PINN深度学习求解微分方程系列一:求解框架

    下面我将介绍内嵌物理知识神经网络(PINN)求解微分方程。首先介绍PINN基本方法,并基于Pytorch框架实现求解一维Poisson方程。 内嵌物理知识神经网络(PINN)入门及相关论文 深度学习求解微分方程系列一:PINN求解框架(Poisson 1d) 深度学习求解微分方程系列二:PINN求解burg

    2023年04月16日
    浏览(41)
  • Simulink基础【1】-弹簧-阻尼模型的常微分方程求解

    Simulink是Matlab软件的框图设计环境,可用于各种动态系统的建模、分析与仿真过程。如:导航制导、通讯、电子、机械、热力学等诸多领域。这些系统在数学角度描述上涉及连续、离散、非线性、时变等用解析方法难以求解的系统,因而采用Simulink进行建模与仿真是指导这些系

    2023年04月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包