【数值分析实验】(八)常微分方程的数值解法(含matlab代码)

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

1 背景简介

        科学技术中很多问题都可用常微分方程的定解问题来描述,主要有初值问题和边值问题两大类。常微分方程式描述连续变化的数学语言,微分方程的求解时确定满足给定方程的可微函数,要找出这类问题的解析解往往非常困难,甚至是不可能的。研究一阶常微分方程初值问题的数值解法是本实验的主要目的,在未知函数解析表达式的情况下,采用近似计算未知函数在其定义域中的某些离散点上的函数值。

2 案例设计

常微分方程数值解的实现,以洛伦茨方程为例,数值分析实验,matlab,算法,线性代数,数据分析

3 数学模型

常微分方程数值解的实现,以洛伦茨方程为例,数值分析实验,matlab,算法,线性代数,数据分析

3.1 欧拉法

3.1.1 算法过程

常微分方程数值解的实现,以洛伦茨方程为例,数值分析实验,matlab,算法,线性代数,数据分析

3.1.2 代码

%% 设置参数
% 输入步长
h = 0.05;
% 输入x上下界
xa = 0; xb = 1;
% 设置函数及y0值
x = xa:h:xb;
f = @(x,y)(3*y/(1+x));
yn = zeros(1, length(x));
yn(1) = 1;
%% 利用欧拉法求解初值问题
for i = 1:(length(x)-1)
    yn(i+1) = yn(i) + h * f(x(i),yn(i));
end
yn % 输出结果

3.1.3 计算结果

常微分方程数值解的实现,以洛伦茨方程为例,数值分析实验,matlab,算法,线性代数,数据分析

3.2 改进欧拉法

3.2.1 算法过程

常微分方程数值解的实现,以洛伦茨方程为例,数值分析实验,matlab,算法,线性代数,数据分析

3.2.2 代码

%% 设置参数
% 输入步长
h = 0.1;
% 输入x上下界
xa = 0; xb = 1;
% 设置函数及y0值
x = xa:h:xb;
f = @(x,y)(3*y/(1+x));
yn = zeros(1, length(x));
yn(1) = 1;
%% 利用改进欧拉法求解初值问题
for i = 1:(length(x)-1)
    p = yn(i) + h * f(x(i),yn(i));
    c = yn(i) + h * f(x(i+1),p);
    yn(i+1) = (1/2) * (p+c);
end
yn % 输出结果

3.2.3 计算结果

常微分方程数值解的实现,以洛伦茨方程为例,数值分析实验,matlab,算法,线性代数,数据分析

3.3 四阶龙格-库塔方法

3.3.1 算法过程

常微分方程数值解的实现,以洛伦茨方程为例,数值分析实验,matlab,算法,线性代数,数据分析

3.3.2 代码

%% 设置参数
% 输入步长
h = 0.2;
% 输入x上下界
xa = 0; xb = 1;
% 设置函数及y0值
x = xa:h:xb;
f = @(x,y)(3*y/(1+x));
yn = zeros(1, length(x));
yn(1) = 1;
%% 利用四阶龙格-库塔求解初值问题
for i=1:(length(x) - 1) 
     K1 = f(x(i), yn(i));
     K2 = f(x(i)+ 0.5 * h, yn(i) + 0.5 * h * K1);
     K3 = f((x(i) + 0.5 * h), (yn(i) + 0.5 * h * K2));
     K4 = f((x(i) + h), (yn(i) + K3 * h));
     yn(i+1) = yn(i) + (1/6) * (K1 + 2 * K2 + 2 * K3 + K4) * h;
end
yn % 输出结果

3.3.3 计算结果

常微分方程数值解的实现,以洛伦茨方程为例,数值分析实验,matlab,算法,线性代数,数据分析

4 分析与讨论

        对比三种方法,在相同步长的情况下,欧拉法每步只计算一个函数值,改进的欧拉法每步计算两个函数值,四阶龙格-库塔方法每步需计算四个函数值,即四阶龙格-库塔方法的计算量约为欧拉法的4倍,是改进欧拉法的2倍。为了比较计算精度,可以将欧拉法的步长取h,改进欧拉法取2h,四阶龙格-库塔方法取4h,这样求解同一初值问题时,它们的计算量相当,可以比较它们的计算结果,看出它们的精度差异。实验结果表明,四阶龙格-库塔十分接近精确解,其次是改进欧拉法,最后是欧拉法。
常微分方程数值解的实现,以洛伦茨方程为例,数值分析实验,matlab,算法,线性代数,数据分析文章来源地址https://www.toymoban.com/news/detail-772911.html

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

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

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

相关文章

  • MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

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

    2024年02月08日
    浏览(56)
  • 基于MATLAB的微分方程的解析解与欧拉算法的数值解(附完整代码)

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

    2023年04月09日
    浏览(46)
  • 【数值分析实验】(五)线性方程组的迭代解法(含matlab代码)

            迭代法就是用某种极限过程去逐步逼近线性方程精确解的方法。迭代法具有需要计算机的存储单元较少、程序设计简单、原始系数矩阵在计算过程中始终不变等优点,但存在收敛性及收敛速度问题。 3.1.1 算法过程 3.1.2 代码 3.1.3 计算结果 3.2.1 算法过程 3.2.2 代码

    2024年02月03日
    浏览(46)
  • 通过Matlab编程分析微分方程、SS模型、TF模型、ZPK模型的关系

    以最简单的单自由度振动模型为例: 以上表示u(t)线性组合输入系统(这里是3u(t))时求系统的响应(即输出函数y(t)) SS模型也可转成TF模型: tf(ss(A,B,C,D)) TF转零极点增益ZPK模型 [z p k]=tf2zp([3],[1 0 4]) z = Empty matrix: 0-by-1 p = 0 + 2.0000i 0 - 2.0000i k = 3 即 还可以用residue函数将传递函数

    2024年02月11日
    浏览(42)
  • matlab解微分方程

    f=@(变量) 表达式; x1为2 3 4 5;x2为3 4 5 6的情况下求解函数f的值 用“dsolve” step1: 申明自变量和因变量 syms y(x) step2:编程 得到: step1: 申明自变量和因变量 syms y(x) step2:编程 得到 step1.写函数文件 step2.主函数 相当于定义了一个新向量y,然后列 匿名函数 ,方程的 左边都是一阶

    2024年02月13日
    浏览(81)
  • MATLAB-常微分方程求解

    MATLAB中可以用来求解常微分方程(组)的函数有ode23、 ode23s、 ode23t、 ode23tb 、ode45、ode15s和odel13等,见下表。它们的具体调用方法类似,为了方便后面的描述, 在后面的介绍中将使用solver统一代替它们。 函数的具体调用方法如下。 [T,Y] =solver( odefun, tspan,y0) [T,Y] = solver( odefun,

    2024年02月02日
    浏览(50)
  • matlab解微分方程:方向场

    在微分方程中,常见的形式是: x ′ = f ( x , t ) x\\\'=f(x,t) x ′ = f ( x , t ) 方向场的每一个矢量可以形象地刻画一阶微分方程的解。在方向场中的每个点处,都会出现一条其斜率等于通过该点的微分方程解的矢量。给定一个初值,微分方程对应一条curve曲线,点上的方向矢量和相

    2024年02月13日
    浏览(37)
  • matlab使用教程(29)—微分方程实例

            此示例说明如何使用 MATLAB® 构造几种不同类型的微分方程并求解。MATLAB 提供了多种数值算法来求解各种微分方程:         vanderpoldemo 是用于定义 van der Pol 方程的函数 function dydt = vanderpoldemo(t,y,Mu) %VANDERPOLDEMO Defines the van der Pol equation for ODEDEMO. % Copyright 1984-2

    2024年02月10日
    浏览(46)
  • 【Matlab】一、解常微分方程ODE

    ​ 在matlab中,我们可以求解常微分方程的 解析解 ,和 数值解 ,一般使用 dsolve 来求解常微分方程的解析解,使用类似于 ode45 的求解器来求解常微分方程的数值解。 求解解析解 ,例如求解该方程的解析解 d y d x = 3 x 2 + 1 frac{dy}{dx}=3x^2 + 1 d x d y ​ = 3 x 2 + 1 只需要在命令行中

    2024年02月07日
    浏览(47)
  • Matlab偏微分方程拟合 | 完整源码 | 视频教程

    作者简介:工学博士,高级工程师,专注于工业软件算法研究 本文已收录于专栏:《 复杂函数拟合案例分享 》本专栏旨在提供 1.以 案例 的形式讲解各类复杂函数拟合的程序实现方法,并提供所有案例 完整源码 ;2. 复杂函数 包含:分段函数、积分函数、常/偏微分函数、隐

    2024年04月10日
    浏览(92)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包