matlab 常微分方程数值解法
- 格式:ppt
- 大小:1.56 MB
- 文档页数:2
MATLAB常微分⽅程的数值解法MATLAB常微分⽅程的数值解法⼀、实验⽬的科学技术中常常要求解常微分⽅程的定解问题,所谓数值解法就是求未知函数在⼀系列离散点处的近似值。
⼆、实验原理三、实验程序1. 尤拉公式程序四、实验内容选⼀可求解的常微分⽅程的定解问题,分别⽤以上1, 4两种⽅法求出未知函数在节点处的近似值,并对所求结果与分析解的(数值或图形)结果进⾏⽐较。
五、解答1. 程序求解初值问题取n=10源程序:euler23.m:function [A1,A2,B1,B2,C1,C2]=euler23(a,b,n,y0)%欧拉法解⼀阶常微分⽅程%初始条件y0h = (b-a)/n; %步长h%区域的左边界a%区域的右边界bx = a:h:b;m=length(x);%前向欧拉法y = y0;for i=2:my(i)=y(i-1)+h*oula(x(i-1),y(i-1));A1(i)=x(i);A2(i)=y(i);endplot(x,y,'r-');hold on;%改进欧拉法y = y0;for i=2:my(i)=y(i-1)+h/2*( oula(x(i-1),y(i-1))+oula(x(i),y(i-1))+h*(oula(x(i-1),x(i-1))));B1(i)=x(i);B2(i)=y(i);endplot(x,y,'m-');hold on;%欧拉两步公式y=y0;y(2)=y(1)+h*oula(x(1),y(1));for i=2:m-1y(i+1)=y(i-1)+2*h*oula(x(i),y(i));C1(i)=x(i);C2(i)=y(i);endplot(x,y,'b-');hold on;%精确解⽤作图xx = x;f = dsolve('Dy=-3*y+8*x-7','y(0)=1','x');%求出解析解y = subs(f,xx); %将xx代⼊解析解,得到解析解对应的数值plot(xx,y,'k--');legend('前向欧拉法','改进欧拉法','欧拉两步法','解析解');oula.m:function f=oula(x,y)f=-3*y+8*x-7;2. 运算结果A1,A2为前向欧拉法在节点处的近似值,B1,B2为改进的欧拉法在节点处的近似值,C1,C2为欧拉公式法在节点处的近似值。
第8章 常微分方程的数值求解所谓的常微分方程就是把自变量t 和它的函数y 以及它的微商dy/dt 、d 2y/dt 2、…d n y/dt n 相联系的一个关系式0,...,,,22=⎪⎪⎭⎫ ⎝⎛n n dt y d dt y d dt dy y t f (1) 一个微分方程不只有一个或几个解,而是有无数个一簇解。
如一阶常微分方程dy/dt=1-e -t 的解为y(t)=t+e -t +C 。
C 为积分常数,C 取任意数值时,函数y(t)都满足微分方程。
因此,解有无数个。
如图在实际应用中,并不要求把所有的解都求出来,而是求满足某种指定条件的解。
这个条件通常称定解条件。
一个最重要的定解条件是初值条件。
对于上述方程,初值条件是:()00y t y =,()'00y dt t dy =,())2(0202y dt t dy =,…,())1(0101---=n n n y dt t dy (2) x 0是自变量的某个指定的“初值”,而0y 、'0y 、)2(0y 、…、)1(0-n y 则是未知函数及其到n -1阶微商的指定“初值”。
求解满足这样初值条件的微分方程问题称为初值问题。
如果能从方程(1)将n n dt y d 解出,则微分方程变成下面的形式⎪⎪⎭⎫ ⎝⎛=--1122,...,,,n n n n dt y d dt y d dt dy y t f dt y d (3) 这里的f 与式(1)中的f 不同,它是n+1个自变量的已知函数。
这种微分方程称为正规形微分方程。
而式(1)有时称为隐微分方程。
我们只考虑正规形微分方程,而且是一阶常微分方程的初值问题: ()y t f dtdy,=,()00y t y =, (4) 设函数()y t f ,在区域T t t ≤≤0,∞<u 内连续,并且存在常数L(Lipschitz 常数),对所有],[00T t t ∈和y 1、y 2,有()()2121,,y y L y t f y t f -≤-,由常微分方程理论得知,初值问题(4)在区间[t 0, T]有唯一解,且连续可微。
实验⼆MATLAB数值计算常微分⽅程(组)的求解实验⼆ MATLAB 数值计算:常微分⽅程(组)的求解⼀、实验⽬的在物理学和⼯程技术上,很多问题都可以⽤⼀个或⼀组常微分⽅程来描述,因此要解决相应的实际问题往往需要⾸先求解对应的微分⽅程。
在⼤多数情况下这些微分⽅程通常是⾮线性的或者是超越⽅程(⽐如范德堡⽅程,波导本征值⽅程等),因此往往需要使⽤计算机数值求解。
MATLAB 作为⼀种强⼤的科学计算语⾔,其在数值计算和数据的可视化⽅⾯具有⽆以伦⽐的优势。
在解决常微分⽅程问题上,MATLAB 就提供了多种可适⽤于不同场合(如刚性和⾮刚性问题)下的求解器(Solver),例如ode45,ode15s ,ode23,ode23s 等等。
本次实验将以范德堡⽅程的计算和地球卫星的运⾏轨道的仿真为例,练习使⽤MATLAB 的常微分⽅程求解器,以期达到如下⼏个⽬的:1. 熟悉常微分⽅程的求解⽅法,了解状态⽅程的概念;2. 能熟练使⽤dsolve 函数解析求解常微分⽅程;3. 能熟练运⽤ode45、ode15s 求解器分别数值求解⾮刚性和刚性常微分⽅程;4. 学习⽤求解器来绘制相图的⽅法。
⼆、实验的预备知识1.微分⽅程的概念未知的函数以及它的某些阶的导数连同⾃变量都由⼀已知⽅程联系在⼀起的⽅程称为微分⽅程。
如果未知函数是⼀元函数,称为常微分⽅程(Ordinary differential equations ,简称odes )。
n 阶常微分⽅程的⼀般形式(隐式)为:0),,",',,()(=n y y y y t F (1)其中t 为⾃变量。
如果未知函数是多元函数,成为偏微分⽅程。
联系⼀些未知函数的⼀组微分⽅程组称为微分⽅程组。
微分⽅程中出现的未知函数的导数的最⾼阶解数称为微分⽅程的阶。
若⽅程中未知函数及其各阶导数都是⼀次的,称为线性常微分⽅程,⼀般表⽰为)()(')()(1)1(1)(t b y t a y t a y t a y n n n n =++++--若上式中的系数a i (t), i =1,2,…,n 均与t ⽆关,称之为常系数。
利用MATLAB求解常微分方程数值解目录1.容简介12.Euler Method(欧拉法)求解12.1.显式Euler法和隐式Euler法22.2.梯形公式和改进Euler法32.3.Euler法实用性53.Runge-Kutta Method(龙格库塔法)求解53.1.Runge-Kutta基本原理63.2.MATLAB中使用Runge-Kutta法的函数74.使用MATLAB求解常微分方程84.1.使用ode45函数求解非刚性常微分方程84.2.刚性常微分方程95.总结9参考文献11附录121.显式Euler法数值求解122.改进Euler法数值求解123.四阶四级Runge-Kutta法数值求解134.使用ode45求解141.容简介把《高等工程数学》看了一遍,增加对数学容的了解,对其中数值解法比较感兴趣,这大概是因为在其它各方面的学习和研究中经常会遇到数值解法的问题。
理解模型然后列出微分方程,却对着方程无从下手,无法得出精确结果实在是让人难受的一件事情。
实际问题中更多遇到的是利用数值法求解偏微分方程问题,但考虑到先从常微分方程下手更为简单有效率,所以本文只研究常微分方程的数值解法。
把一个工程实际问题弄出精确结果远比弄清楚各种细枝末节更有意思,因此文章中不追求非常严格地证明,而是偏向如何利用工具实际求解出常微分方程的数值解,力求将课程上所学的知识真正地运用到实际方程的求解中去,在以后遇到微分方程的时候能够熟练运用MATLAB得到能够在工程上运用的结果。
文中求解过程中用到MATLAB进行数值求解,主要目的是弄清楚各个函数本质上是如何对常微分方程进行求解的,对各种方法进行MATLAB编程求解,并将求得的数值解与精确解对比,其中源程序在附录中。
最后考察MATLAB中各个函数的适用围,当遇到实际工程问题时能够正确地得到问题的数值解。
2.Euler Method(欧拉法)求解Euler法求解常微分方程主要包括3种形式,即显式Euler法、隐式Euler法、梯形公式法,本节容分别介绍这3种方法的具体容,并在最后对3种方法精度进行对比,讨论Euler法的实用性。
MATLAB是一种用于科学计算和工程应用的高级编程语言和交互式环境。
它在数学建模、模拟和分析等方面有着广泛的应用。
在MATLAB 中,常微分方程的数值求解是一个常见的应用场景。
在实际工程问题中,通常需要对常微分方程进行数值求解来模拟系统的动态行为。
本文将介绍MATLAB中对常微分方程进行数值求解的快速方法。
1. 基本概念在MATLAB中,可以使用ode45函数来对常微分方程进行数值求解。
ode45是一种常用的Runge-Kutta法,它可以自适应地选取步长,并且具有较高的数值精度。
使用ode45函数可以方便地对各种类型的常微分方程进行求解,包括一阶、高阶、常系数和变系数的微分方程。
2. 函数调用要使用ode45函数进行常微分方程的数值求解,需要按照以下格式进行函数调用:[t, y] = ode45(odefun, tspan, y0)其中,odefun表示用于描述微分方程的函数,tspan表示求解的时间跨度,y0表示初值条件,t和y分别表示求解得到的时间序列和对应的解向量。
3. 示例演示为了更好地理解如何使用ode45函数进行常微分方程的数值求解,下面我们以一个具体的例子来进行演示。
考虑如下的一阶常微分方程:dy/dt = -2*y其中,y(0) = 1。
我们可以编写一个描述微分方程的函数odefun:function dydt = odefun(t, y)dydt = -2*y;按照上述的函数调用格式,使用ode45函数进行求解:tspan = [0 10];y0 = 1;[t, y] = ode45(odefun, tspan, y0);绘制出解曲线:plot(t, y);4. 高级用法除了基本的函数调用方式外,MATLAB中还提供了更多高级的方法来对常微分方程进行数值求解。
可以通过设定选项参数来控制数值求解的精度和稳定性,并且还可以对刚性微分方程进行求解。
5. 性能优化在实际工程应用中,常常需要对大规模的常微分方程进行数值求解。
MATLAB在常微分方程数值解中的应用摘要】许多现实问题都可以通过微分方程的形式进行表示,传统解微分方程的方法有近似分析解法、表解法和图解法,这些方法需对其进行大量的假设,而使得数学模型有一定的失真,有一定的局限性。
数值解法利用计算机,使得求解更精确、效率更高,而MATLAB是一种数学软件包,有高级编程格式,使得计算结果更具有可信性,因此微分方程的求解及MATLAB在其中的应用具有实际意义。
本文对常微分方程数值解问题作进一步探讨,并应用MATLAB寸其中难解的改进Euler法和Runge-Kutta法进行编程实现,程序简洁、直观,求解速度快、方法实用性较强。
【关键词】常微分方程数值解MATLAB Euler法龙格-库塔方法ode45ode15s b5E2RGbCAPMatlab in ordinary differential equation numerical solution of application p1EanqFDPwYang Hua Zhang Lei【Abstract 】Many practical problems can be using differential equations in the form of represe ntati on, the traditi onal method of solvi ng differe ntial equati ons are similar an alysis method, table method and graphical method, these methods to carry on the large amounts of hypothesis, so that the mathematical model has certa in distort ion, have certa in limitatio n. Numerical soluti on of using a computer, make solving more accurate and more efficient, and MATLAB is a kind of mathematics software package, with adva need program ming format, maki ng calculati on result is more credibility, therefore differential equation and solution of the MATLAB in one of the application of practical significanee. This paper numerical solution of differential equation problem further discussion, and the application of MATLAB in which the difficult solution improvement Euler method and Runge - Kutta method on the programming, the program is concise, intuitive and solution speed, method of practical stronger. DXDiTa9E3d【Key words 】ordinary differential equation, numerical solution , Matlab , Euler method , Runge-Kutta method RTCrpUDGiT【引言】微分方程的概念:未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。
MATLAB 二阶常微分方程数值求解函数一、MATLAB 中常微分方程的求解在科学计算领域,常微分方程是一个非常重要的数学工具,常被用于描述动态系统的演变规律。
MATLAB 作为一种功能强大的科学计算软件,提供了丰富的工具箱和函数,用于求解常微分方程。
其中,二阶常微分方程求解函数是其中的重要一部分。
二、二阶常微分方程的数值求解方法1. 常微分方程的基本概念在了解 MATLAB 中的二阶常微分方程数值求解函数之前,首先要明确常微分方程的基本概念。
常微分方程是关于未知函数及其导数的方程,而二阶常微分方程则是包含到二阶导数的方程。
通常情况下,常微分方程不易求解,因此需要借助数值求解方法进行近似求解。
2. MATLAB 中的数值求解函数在 MATLAB 中,有多种数值求解方法可用于求解二阶常微分方程,例如 ODE45、ODE23、ODE113 等。
这些函数可以根据用户输入的微分方程表达式和初始条件,使用不同的数值方法进行求解,得到相应的数值解。
三、使用 MATLAB 数值求解二阶常微分方程的示例考虑一个带有阻尼和弹簧的振动系统,其运动方程为:\[ m\frac {d^2x}{dt^2} + c\frac{dx}{dt} + kx = 0 \]其中,\( m \) 为质量,\( c \) 为阻尼系数,\( k \) 为弹簧刚度。
现在,我们可以使用 MATLAB 中的二阶常微分方程数值求解函数来求解该振动系统的运动方程。
```matlabfunction secondOrderODEExample% 定义常数m = 1; % 质量c = 0.1; % 阻尼系数k = 1; % 弹簧刚度% 定义初始条件x0 = 1; % 初位移v0 = 0; % 初速度% 定义时间范围tspan = [0 10]; % 时间范围% 定义运动方程odefun = @(t,x) [x(2); -c/m*x(2) - k/m*x(1)];% 求解微分方程[t, sol] = ode45(odefun, tspan, [x0 v0]);% 绘制位移随时间变化图figure;plot(t, sol(:,1));xlabel('Time');ylabel('Displacement');title('Displacement vs. Time');end```代码中,我们使用了 MATLAB 中的 ode45 函数来求解给定的二阶常微分方程,并绘制了位移随时间变化的图像。