搜档网
当前位置:搜档网 › MATLAB数值分析实验五(欧拉法,荣格-库塔法解常微分方程)

MATLAB数值分析实验五(欧拉法,荣格-库塔法解常微分方程)

佛山科学技术学院

实 验 报 告

课程名称 数值分析 实验项目 常微分方程问题初值问题数值解法 专业班级 姓 名 学 号 指导教师 陈剑 成 绩 日 期

一. 实验目的

1、理解如何在计算机上实现用Euler 法、改进Euler 法、Runge -Kutta 算法求一阶常微分方程初值问题

⎩⎨

⎧=∈='1

)(]

,[),,()(y a y b a x y x f x y 的数值解。

2、利用图形直观分析近似解和准确解之间的误差。

二、实验要求

(1) 按照题目要求完成实验内容; (2) 写出相应的Matlab 程序;

(3) 给出实验结果(可以用表格展示实验结果); (4) 分析和讨论实验结果并提出可能的优化实验。 (5) 写出实验报告。 三、实验步骤

1、用Matlab 编写解常微分方程初值问题的Euler 法、改进Euler 法和经典的四阶Runge-Kutta 法。

2、给定初值问题

⎪⎩⎪⎨⎧

=≤≤-=;

1)1(,

21,1')1(2y x x

y x y

⎪⎨⎧=≤≤++-=31)0(10,25050')2(2y x x x y y 要求:(a )用Euler 法和改进的Euler 法(步长均取h=0.05)及经典的四阶Runge-Kutta 法(h=0.1)求(1)的数值解,并打印)10,....2,1,0(1.01=+=i i x 的值。

(b) 用经典的四阶Runge-Kutta 方法解(2),步长分别取h=0.1, 0.05,0.025,计算并打印

)10,....2,1,0(1.0==i i x 个点的值,与准确解2503

1

)(x e x y x +=-比较,并列表写出在

x=0.2,0.5,0.8处,对于不同步长h 下的误差,讨论同一节点处,误差随步长的变化规律。 (c )用Matlab 绘图函数绘制(2)的精确解和近似解的图形。

四、实验结果 %Euler.m

function y = Euler(x0,xn,y0,h) %Euler 法解方程f_xy ; %x0,y0为初始条件; %x0,xn 为求值区间; %h 为步长; %求区间个数: n = (xn-x0)/h;

%矩阵x 存储n+1个节点: x = [x0:h:xn]';

%矩阵y 存储节点处的值: y = [y0;zeros(n,1)];

%矩阵y_存储节点处导数值: y_(1)= f_xy(x0,y0); y_ = [y_(1);zeros(n,1)];

%进行迭代(欧拉法迭代;求导数): for i = 2:n+1

y (i) = y(i-1)+h*y_(i-1); y_(i) = f_xy(x(i),y(i)); end

%Imp_Euler.m

function y = Imp_Euler(x0,xn,y0,h)

%改进的Euler法解方程f_xy;

%x0,y0为初始条件;

%x0,xn为求值区间;

%h为步长;

%求区间个数:

n = (xn-x0)/h;

%矩阵x存储n+1个节点:

x = [x0:h:xn]';

%矩阵y存储节点处的值:

y = [y0;zeros(n,1)];

%矩阵y_存储节点处导数值:

y_(1)= f_xy(x0,y0);

y_ = [y_(1);zeros(n,1)];

%使用改进Euler法求值(欧拉法求近似;近似点导数;梯形校正;求导):for i = 2:n+1

y_l = y(i-1) + h*y_(i-1);

y_l = f_xy(x(i),y_l);

y(i) = y(i-1) + (h/2)*(y_(i-1)+y_l);

y_(i)= f_xy(x(i),y(i));

end

%R_Kutta4.m

function y = R_Kutta4(x0,xn,y0,h)

%Runger_Kutta法解方程f_xy;

%x0,y0为初始条件;

%x0,xn为求值区间;

%h为步长;

%求区间个数:

n = (xn-x0)/h;

%矩阵x存储n+1个节点:

x = [x0:h:xn]';

%矩阵y存储节点处的值:

y = [y0;zeros(n,1)];

%矩阵k1,k2,k3,k4存储各节点(中点)数值:

k1(1)= f_xy(x0,y0);

k1 = [k1(1);zeros(n,1)];

k2(1)= f_xy(x0+h/2,y0+h*k1(1)/2);

k2 = [k2(1);zeros(n,1)];

k3(1)= f_xy(x0+h/2,y0+h*k2(1)/2);

k3 = [k3(1);zeros(n,1)];

k4(1)= f_xy(x0+h,y0+h*k3(1));

k4 = [k4(1);zeros(n,1)];

for i= 2:n+1

y(i) = y(i-1)+(h/6)*(k1(i-1)+2*k2(i-1)+2*k3(i-1)+k4(i-1));

k1(i)= f_xy(x(i),y(i));

k2(i)= f_xy(x(i)+h/2,y(i)+h*k1(i)/2);

k3(i)= f_xy(x(i)+h/2,y(i)+h*k2(i)/2);

k4(i)= f_xy(x(i)+h,y(i)+h*k3(i));

end

(a):

%f_xy.m

function y_=f_xy(x,y)

%求解第五次作业第一题的点(x,y)处的导数;

y_ = 1/(x^2) - y/x;

%run521.m

clc,clear;

x0 = 1;

xn = 2;

h = 0.05;

y0 = 1;

%便于显示出x,与y对应:x = [x0:h:xn]';

y = Euler(x0,xn,y0,h);

YE =[x,y];

y = Imp_Euler(x0,xn,y0,h); YIE= [x,y];

h = 0.1;

x = [x0:h:xn]';

y = R_Kutta4(x0,xn,y0,h); YRK= [x,y];

(b): %f_xy.m

function y_=f_xy(x,y) %求第二个方程的导数: y_ = -50*y+50*(x^2)+2*x;

%run522.m

clc,clear; x0 = 0; xn = 1; y0 = 1/3; %步长0.1: h = 0.1; x = [x0:h:xn]';

y = R_Kutta4(x0,xn,y0,h); y_r= f_Real(x); Y1 = [x,y,y_r];

%步长0.05: h = 0.05; x = [x0:h:xn]';

y = R_Kutta4(x0,xn,y0,h); y_r= f_Real(x); Y2 = [x,y,y_r]; %步长0.025: h = 0.025; x = [x0:h:xn]';

y = R_Kutta4(x0,xn,y0,h); y_r= f_Real(x); Y3 = [x,y,y_r];

五、讨论分析

(a)

从结果可以看出使用RK 方法,步长较大但是结果也更加精确; (b)

分析求值结果的误差,可以发现当步长取0.1时,误差是超级大的(10^8数量级),但是当步长缩小一半取0.05时,误差就很小了,再缩小一半,误差就更小了。

根据书本的介绍,步长缩小一半,精度提高十多倍,但是从测试情况来看,步长有个临界点(可能仅仅针对这种凹形,指数形函数),太大时,会忽略掉函数的某些属性,譬如取0.1时跳过了凹形区域,从而丧失了精确度(错误结果),所以步长选择时要比较谨慎,以免出现这种情况,至于h 和误差的关系,在不出现

步长0.1: x 误差

步长0.05: x 误差

步长0.025: x 误差

错误选择的情况下,步长越小,误差是越小的,而且是指数型减小。

另外通过操作可以看到三种步长下的插值和准确值函数图像:

注意第一幅图有科学计数法标注(10^10)

下面两幅图可以看出,当步长减小时到0.025时,基本就与原值一致了:

六、改进实验建议

实验的题目表述有比较大的问题,有重复操作部分,有些表达也不是很清楚,所以希望出题时能够认真考虑下实现过程,是否有矛盾或是冗余的,不然很浪费时间又不能锻炼操作能力。

总的来说还是有收获的,尤其是RK步长取0.1时都觉得是否程序出错。

matlab欧拉法求解微分方程

matlab欧拉法求解微分方程 Matlab是一款用于科学计算、数据处理和可视化的工具软件,它不仅可以处理数字、符号运算,还可以用于各种重要的数学应用。欧拉法是最简单的数值解微分方程的方法之一,它可以在Matlab中进行实现。 欧拉法的实现过程如下: 1. 设定初始条件。 对于一个一阶微分方程$y' = f(t,y)$,需要给出初值$y(t_0) =y_0$和一定的步长$h$,即$t_n = t_0 + nh$。其中,$n$为正整数。可以将$t_n$与$y_n$一起存放到两个向量$t$和$y$中。 2. 设定迭代方程。 使用泰勒公式将$y(t + h)$展开,得到$y(t+h) = y(t)+hy'(t)+\frac{h^2}{2}y''(t)+O(h^3)$,由于这是一个微分方程的一阶泰勒公式,$y''$一般很难求得,可以将其忽略得到:$y(t + h) \approx y(t) + hf(t,y(t))$ 从而,欧拉法的迭代方程就得到了。可以在Matlab中用一行代码来实现: y(n+1) = y(n) + h*f(t(n),y(n)); 其中,$t(n)$和$y(n)$表示当前时刻$t$和对应的$y$值,而 $f(t(n),y(n))$表示在$t(n)$和$y(n)$处方程的斜率。 3. 进行迭代计算。 根据上述迭代方程循环进行计算即可。以下是一个示例程序: t0 = 0; y0 = 1; h = 0.1; % 步长 tf = 1; % 计算到1s N = round(tf/h)+1; % 总步数 t = linspace(t0,tf,N); % 时间向量

y = zeros(size(t)); % 初始值向量 y(1) = y0; for n = 1:N-1 y(n+1) = y(n) + h*func(t(n),y(n)); end plot(t,y) % 绘制y-t图像 其中,func为微分方程的右端函数。 欧拉法的优点是简单易行,可以提供一个初步接触微分方程解法 的方法。它的缺点是精度较低,误差会随着步长的增大而增加。因此,在高精度的数值计算中,需要使用其他更为复杂的方法,如四阶龙格 库塔法等。 总之,Matlab欧拉法求解微分方程是一种简单而实用的方法,可以应用于各种科学和工程领域的数值计算。在实际应用中,需要根据 实际情况选择不同的数值解法以及适当的步长。

实验五+MATLAB数值计算(含实验报告)

实验五 MATLAB 数值计算 一、实验目的 1.掌握求数值导数和数值积分的方法。 2.掌握代数方程数值求解的方法。 3.掌握常微分方程数值求解的方法。 二、实验的设备及条件 计算机一台(带有MATLAB7.0以上的软件环境)。 设计提示 1.参考本节主要内容,学习并理解相关函数的含义及调用方法。 三、实验内容 1.线性系统方程:分别使用左除(\)和求逆(inv )求解下面系统方程的 解: ?? ???=+=+=++377251463c b b a c b a 2. 数值积分:使用quad 和trapz 求解?-5 03/dx xe x 的数值积分,并与其解析解9243/5+--e 相比较; 3. 请完成教材P154页中实验指导环节的实验内容第2题 4. 请完成教材P155页中思考练习的第3题(1),并绘制解在该求解区间(即 [0,5])上的图像;。 5、请完成教材P164页实验指导环节的实验内容第5题。 (提示:该函数的符号导数,可以通过函数diff 求得。首先定义符号变表 达式,如求sin(x)的一阶符号导数,可以先定义f=’sin(x)’;df=diff(f);可求得df=cos(x)。其中df 即为函数f 的一阶符号导数)。

四、实验报告要求(包含预习报告要求和最终报告要求) 1.实验名称 2.实验目的 3.实验设备及条件 4.实验内容及要求 5.实验程序设计 指程序代码。 6.实验结果及结果分析 实验结果要求必须客观,有数据的可以记录数据,没有数据的简单描述实验现象。结果分析是对实验结果的理论评判。 7.实验中出现的问题及解决方法 8. 思考题的回答 五、 实验报告的提交方式 Word 文档,命名方式:实验号_你的学号_姓名!!! 例如本次实验:实验一_000000001_张三.doc (信息101提交报告邮箱):E_mail: matlab_xx01@https://www.sodocs.net/doc/c919078655.html, (网络工程101提交作业邮箱):E_mail: Matlab_wg01@https://www.sodocs.net/doc/c919078655.html, (注意网络班 的M 是大写的) 下一次课前提交,过期不收! 六、 参考文献 参考教材和Matlab 帮助文件。 1.实验名称 MATLAB 数值计算 2.实验目的 1.掌握求数值导数和数值积分的方法。 2.掌握代数方程数值求解的方法。 3.掌握常微分方程数值求解的方法。 预习报告 要求 最终报告要求

matlab求微分方程数值解

matlab求微分方程数值解 利用matlab求微分方程数值解是一种常用的数学计算方法。在实际工程和科学研究中,许多问题都可以用微分方程来描述,但是解析解往往难以求得,因此需要用数值方法求解微分方程。 求解微分方程的数值方法有很多种,其中比较常用的是欧拉法和龙格-库塔法。欧拉法是一种基本的数值方法,它采用离散化的方法将微分方程转化为差分方程,然后通过迭代来求出数值解。欧拉法的具体步骤是:首先将自变量和因变量离散化,然后利用微分方程的定义式将微分方程转化为差分方程,最后通过迭代求出数值解。欧拉法的优点是简单易懂,但是精度较低,容易产生误差。 龙格-库塔法是一种高阶数值方法,它将微分方程转化为一系列的差分方程,并采用递推的方法求解数值解。龙格-库塔法的优点是精度高,收敛速度快,适用于求解复杂的微分方程。但是龙格-库塔法的计算量较大,需要进行多次计算,计算时间较长。 在使用matlab求解微分方程时,可以直接调用matlab中的ode 函数来求解微分方程。ode函数是matlab中内置的求解微分方程的函数,它支持多种数值方法,包括欧拉法和龙格-库塔法等。使用ode函数可以简化求解微分方程的过程,提高计算效率。 在使用ode函数求解微分方程时,需要先定义微分方程的函数表达式,然后将函数表达式作为参数传入ode函数中。ode函数会自动

选择合适的数值方法来求解微分方程,并返回数值解。通过调整ode函数的参数,可以进一步提高求解微分方程的精度和计算效率。 除了ode函数外,matlab中还有很多其他的数值计算函数,如dsolve函数、pdepe函数等,它们可以用来求解不同类型的微分方程。在实际应用中,需要根据具体问题选择合适的数值方法和函数来求解微分方程。 利用matlab求解微分方程数值解是一种常用的数学计算方法,可以通过调用matlab中的内置函数来实现。在选择数值方法和函数时需要考虑精度和计算效率等因素,以便更好地解决实际问题。

matlab 数学实验 实验报告 欧拉公式 ROSSLER微分方程

数学实验—实验报告 一、实验项目: 二、实验目的和要求 1、本章将对人口变化、动物种群变迁、网络系统的可靠性分析,介绍微分方程(组)的模型建立、数值解和图形解等方法,并用MATLAB 几何直观地展示各种求解方法的求解结果。 2、利用欧拉公式求解方程 三、实验题目 问题一:求微分方程的解析解,并画出它们的图形, y ’=y +2x , y (0)=1, 0

matlab用欧拉法求常微分方程初值

Matlab中欧拉法求解常微分方程初值问题 一、概念介绍 在数学和工程领域,常微分方程初值问题是一个广泛应用的数学概念。它描述了一个未知函数在给定初始条件下的行为。而欧拉法则是一种 常用的数值方法,用来解决常微分方程初值问题。在Matlab中,我 们可以利用欧拉法来求解常微分方程问题,从而得到函数在给定初始 条件下的近似解。 二、欧拉法的基本原理 欧拉法的基本思想是通过离散化微分方程,将其转化为递推的差分方程。考虑一个一阶常微分方程初值问题: \[ \frac{dy}{dx} = f(x, y), \quad y(x_0) = y_0 \] 在欧拉法中,我们采用递推的方式,根据已知的初始条件和微分方程 的性质,通过迭代来得到逼近解的数值结果。具体地,我们首先将自 变量$x$的范围进行等间距分割,得到$x_0, x_1, x_2, ..., x_n$,并将 步长记为$h$。根据微分方程的性质,我们可以根据已知的初始条件$y(x_0) = y_0$,通过迭代计算得到近似解$y(x_1), y(x_2), ..., y(x_n)$。 三、Matlab中的欧拉法求解 在Matlab中,我们可以利用欧拉法来求解常微分方程初值问题。以 求解一阶常微分方程为例,假设我们需要求解以下的常微分方程初值

问题: \[ \frac{dy}{dx} = -2xy, \quad y(0) = 1 \] 我们可以利用欧拉法的思想,将自变量$x$的范围进行离散化,然后根据欧拉法的递推公式,利用迭代的方式得到近似解的数值结果。 具体地,在Matlab中,我们可以编写如下代码来实现欧拉法的求解过程: ```matlab function y = euler_method(f, x0, y0, h, n) % 初始化存储结果的数组 x = zeros(1, n+1); y = zeros(1, n+1); % 将初始条件存入数组 x(1) = x0; y(1) = y0; % 利用欧拉法进行迭代 for i = 1:n x(i+1) = x(i) + h; y(i+1) = y(i) + h * f(x(i), y(i)); end

matlab微分方程常用数值解法

一、概述 Matlab作为一种常用的科学计算软件,在微分方程的数值解法领域具有广泛的应用。微分方程是描述自然现象中变化规律的数学工具,而数值解法则是指使用计算机进行近似求解微分方程的方法。在Matlab 中,有多种常用的数值解法可以用来求解微分方程,例如欧拉法、改进的欧拉法、四阶龙格-库塔法等。本文将对这些数值解法进行介绍和比较,以帮助读者更好地理解和应用微分方程求解数值方法。 二、欧拉法 欧拉法是微分方程的最简单的数值解法之一,它通过离散化微分方程进行近似求解。具体而言,对于一阶常微分方程dy/dx=f(x,y),可以利用欧拉法进行数值解。欧拉法的基本思想是将自变量x的增量Δx分成n个小区间,然后根据微分方程的数值近似公式 y(x+Δx)=y(x)+f(x,y)Δx对每个小区间进行迭代计算。 欧拉法的优点是简单易实现,但由于它是一阶的数值方法,因此对于某些微分方程求解效果可能不够准确。 三、改进的欧拉法 改进的欧拉法是对欧拉法的一种改进,它通过在每个小区间内使用平均斜率来提高求解的精度。具体而言,对于微分方程dy/dx=f(x,y),改进的欧拉法可以通过以下迭代公式进行数值求解: y(x+Δx)=y(x)+Δx/2[f(x,y)+f(x+Δx,y+Δx*f(x,y))] 改进的欧拉法相比于欧拉法具有更高的数值精度,但计算量也相对增

加。 四、四阶龙格-库塔法 四阶龙格-库塔法是一种常用的数值微分方程求解方法,它通过四次迭代计算来获得微分方程的数值解。具体而言,对于微分方程 dy/dx=f(x,y),四阶龙格-库塔法可以用以下公式进行数值求解: k1=f(x,y) k2=f(x+Δx/2,y+Δx/2*k1) k3=f(x+Δx/2,y+Δx/2*k2) k4=f(x+Δx,y+Δx*k3) y(x+Δx)=y(x)+Δx/6*(k1+2*k2+2*k3+k4) 四阶龙格-库塔法相比于欧拉法和改进的欧拉法具有更高的数值精度和稳定性,但计算量也相对较大。 五、数值方法比较 在实际应用中,不同的微分方程数值求解方法具有各自的优缺点。下面我们对欧拉法、改进的欧拉法和四阶龙格-库塔法进行简要的比较: 1. 计算精度:四阶龙格-库塔法>改进的欧拉法>欧拉法 2. 计算稳定性:四阶龙格-库塔法>改进的欧拉法>欧拉法 3. 计算速度:欧拉法>改进的欧拉法>四阶龙格-库塔法 从上面的比较可以看出,对于追求高精度和稳定性的求解需求,四阶龙格-库塔法是一个更好的选择。而对于计算量较大和求解速度要求较高的情况,欧拉法和改进的欧拉法则更具优势。

MATLAB数值分析实验五(欧拉法,荣格-库塔法解常微分方程)

佛山科学技术学院 实 验 报 告 课程名称 数值分析 实验项目 常微分方程问题初值问题数值解法 专业班级 姓 名 学 号 指导教师 陈剑 成 绩 日 期 一. 实验目的 1、理解如何在计算机上实现用Euler 法、改进Euler 法、Runge -Kutta 算法求一阶常微分方程初值问题 ⎩⎨ ⎧=∈='1 )(] ,[),,()(y a y b a x y x f x y 的数值解。 2、利用图形直观分析近似解和准确解之间的误差。 二、实验要求 (1) 按照题目要求完成实验内容; (2) 写出相应的Matlab 程序; (3) 给出实验结果(可以用表格展示实验结果); (4) 分析和讨论实验结果并提出可能的优化实验。 (5) 写出实验报告。 三、实验步骤 1、用Matlab 编写解常微分方程初值问题的Euler 法、改进Euler 法和经典的四阶Runge-Kutta 法。 2、给定初值问题 ⎪⎩⎪⎨⎧ =≤≤-=; 1)1(, 21,1')1(2y x x y x y

⎪ ⎩ ⎪⎨⎧=≤≤++-=31)0(10,25050')2(2y x x x y y 要求:(a )用Euler 法和改进的Euler 法(步长均取h=0.05)及经典的四阶Runge-Kutta 法(h=0.1)求(1)的数值解,并打印)10,....2,1,0(1.01=+=i i x 的值。 (b) 用经典的四阶Runge-Kutta 方法解(2),步长分别取h=0.1, 0.05,0.025,计算并打印 )10,....2,1,0(1.0==i i x 个点的值,与准确解2503 1 )(x e x y x +=-比较,并列表写出在 x=0.2,0.5,0.8处,对于不同步长h 下的误差,讨论同一节点处,误差随步长的变化规律。 (c )用Matlab 绘图函数绘制(2)的精确解和近似解的图形。 四、实验结果 %Euler.m function y = Euler(x0,xn,y0,h) %Euler 法解方程f_xy ; %x0,y0为初始条件; %x0,xn 为求值区间; %h 为步长; %求区间个数: n = (xn-x0)/h; %矩阵x 存储n+1个节点: x = [x0:h:xn]'; %矩阵y 存储节点处的值: y = [y0;zeros(n,1)]; %矩阵y_存储节点处导数值: y_(1)= f_xy(x0,y0); y_ = [y_(1);zeros(n,1)]; %进行迭代(欧拉法迭代;求导数): for i = 2:n+1 y (i) = y(i-1)+h*y_(i-1); y_(i) = f_xy(x(i),y(i)); end

【MATLAB】实验五:数值微积分与方程数值求解

实验五 数值微积分与方程数值求解 一、实验目的 1. 掌握求数值导数和数值积分的方法。 2. 掌握代数方程数值求解的方法。 3. 掌握常微分方程数值求解的方法。 二、实验内容 要求:命令手工 ( )输入!!! 1. 求函数在指定点的数值导数。 23 2()123,1,2,302 6x x x f x x x x x ==

2. 用数值方法求定积分。 (1) 210I π= ?的近似值。 (2) 2220ln(1)1x I dt x π +=+? 3. 分别用三种不同的数值方法解线性方程组。 6525494133422139211 x y z u x y z u x y z u x y u +-+=-??-+-=??++-=??-+=?

4. 求非齐次线性方程组的通解。 123412341 2342736352249472x x x x x x x x x x x x +++=??+++=??+++=? 解:先建立M 函数文件,然后命令窗口中写命令。

121/119/112/115/111/1110/11100010X k k --????????????-??????=++?????????????????? ,其中12,k k 为任意常数。 5. 求代数方程的数值解。 (1) 3x +sin x -e x =0在x 0=1.5附近的根。 (2) 在给定的初值x 0=1,y 0=1,z 0=1下,求方程组的数值解。 23sin ln 703210 50y x y z x z x y z ?++-=?+-+=??++-=? ans = 1289/682

解微分方程欧拉法,R-K法及其MATLAB实例

解微分方程的欧拉法,龙格-库塔法及其MATLAB简单实例 欧拉方法(Euler method)用以对给定初值的常微分方程(即初值问题)求解 分为前进EULER法、后退EULER法、改进的EULER法。 缺点: 欧拉法简单地取切线的端点作为下一步的起点进行计算,当步数增多时,误差会因积累而越来越大。因此欧拉格式一般不用于实际计算。 改进欧拉格式: 为提高精度,需要在欧拉格式的基础上进行改进。采用区间两端的斜率的平均值作为直线方程的斜率。改进欧拉法的精度为二阶。 算法为: 微分方程的本质特征是方程中含有导数项,数值解法的第一步就是设法消除其导数值。 对于常微分方程: x∈[a,b] y(a) = y0 可以将区间[a,b]分成n段,那么方程在第xi点有y'(xi) = f(xi,y(xi)),再用向前差商近似代替导数则为: 在这里,h是步长,即相邻两个结点间的距离。因此可以根据xi点和yi点的数值计算出yi+1来: i=0,1,2,L 这就是向前欧拉格式。 改进的欧拉公式: 将向前欧拉公式中的导数f(xi,yi)改为微元两端导数的平均,即

上式便是梯形的欧拉公式。 可见,上式是隐式格式,需要迭代求解。为了便于求解,使用改进的欧拉公式: 数值分析中,龙格-库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。 实际上,龙格-库塔法是欧拉方法的一种推广,向前欧拉公式将导数项简单取为f(xn,yn),而改进的欧拉公式将导数项取为两端导数的平均。 龙格-库塔方法的基本思想: 在区间[xn,xn+1]内多取几个点,将他们的斜率加权平均,作为导数的近似。 龙格库塔法的家族中的一个成员如此常用,以至于经常被称为“RK4”或者就是“龙格库塔法”。 令初值问题表述如下。 则,对于该问题的RK4由如下方程给出: 其中 这样,下一个值(y n+1)由现在的值(y n)加上时间间隔(h)和一个估算的斜率的乘积决定。该斜率是以下斜率的加权平均:

matlab 解微分方程

matlab 解微分方程 Matlab是一种非常强大的数学软件,它不仅可以用于数值计算和数据分析,还可以用来解微分方程。微分方程是数学中的一种重要方程类型,描述了变量之间的关系以及其随时间的变化规律。在科学和工程领域中,微分方程的解析解往往很难求得,而数值解法则成为一种常用的求解手段。 在Matlab中,我们可以使用多种方法来求解微分方程,其中最常用的方法是数值解法。数值解法通过将微分方程转化为差分方程,然后利用计算机进行迭代计算,逐步逼近方程的解。常见的数值解法包括欧拉法、改进的欧拉法、龙格-库塔法等。 以一阶常微分方程为例,假设我们要求解如下的微分方程: dy/dx = f(x, y) 其中,f(x, y)是已知的函数。为了使用数值解法,我们首先需要将微分方程转化为差分方程,即将连续的求导操作转化为离散的差商操作。我们可以选择合适的步长h,将自变量x划分成若干个小区间,然后在每个区间内进行近似计算。 在Matlab中,可以使用ode45函数来求解微分方程。ode45函数利用了龙格-库塔法进行数值求解,它具有较高的精度和稳定性。使用ode45函数时,我们需要提供微分方程的右侧函数f(x, y),以及

初始条件y0。ode45函数会自动进行迭代计算,得到微分方程的数值解。 下面是一个使用ode45函数求解微分方程的示例: ```matlab % 定义微分方程的右侧函数 function dydx = f(x, y) dydx = x + y; end % 求解微分方程 xspan = [0 1]; % 自变量的范围 y0 = 0; % 初始条件 [x, y] = ode45(@f, xspan, y0); % 绘制解的图像 plot(x, y); xlabel('x'); ylabel('y'); title('Solution of dy/dx = x + y'); ``` 在上面的代码中,我们首先定义了微分方程的右侧函数f(x, y),然

matlab算法-求解微分方程数值解和解析解

MATLAB是一种用于数学计算、工程和科学应用程序开发的高级技术计算语言和交互式环境。它被广泛应用于各种领域,尤其在工程和科学领域中被用于解决复杂的数学问题。微分方程是许多工程和科学问题的基本数学描述,求解微分方程的数值解和解析解是MATLAB算法的一个重要应用。 1. 求解微分方程数值解 在MATLAB中,可以使用各种数值方法来求解微分方程的数值解。其中,常见的方法包括欧拉法、改进的欧拉法、四阶龙格-库塔法等。这些数值方法可以通过编写MATLAB脚本来实现,从而得到微分方程的近似数值解。以常微分方程为例,可以使用ode45函数来求解微分方程的数值解。该函数是MATLAB中用于求解常微分方程初值问题的快速、鲁棒的数值方法,可以有效地得到微分方程的数值解。 2. 求解微分方程解析解 除了求解微分方程的数值解外,MATLAB还可以用于求解微分方程的解析解。对于一些特定类型的微分方程,可以使用符号计算工具箱中的函数来求解微分方程的解析解。通过符号计算工具箱,可以对微分方程进行符号化处理,从而得到微分方程的解析解。这对于研究微分方程的性质和特点非常有帮助,也有助于理论分析和验证数值解的准确性。 3. MATLAB算法应用举例

在实际工程和科学应用中,MATLAB算法求解微分方程问题非常常见。在控制系统设计中,经常需要对系统的动态特性进行分析和设计,这 通常涉及到微分方程的建模和求解。通过MATLAB算法,可以对系统的微分方程进行数值求解,从而得到系统的响应曲线和动态特性。另外,在物理学、生物学、经济学等领域的建模和仿真中,也经常需要 用到MATLAB算法来求解微分方程问题。 4. MATLAB算法优势 相比于其他数学软件和编程语言,MATLAB在求解微分方程问题上具 有明显的优势。MATLAB提供了丰富的数值方法和工具,能够方便地 对各种微分方程进行数值求解。MATLAB具有直观的交互式界面和强 大的绘图功能,能够直观地展示微分方程的数值解和解析解,有利于 分析和理解问题。MATLAB还拥有庞大的用户社区和丰富的文档资料,能够为用户提供强大的支持和帮助。 MATLAB算法求解微分方程数值解和解析解是其重要的应用之一,该 算法在工程和科学领域具有广泛的应用前景。通过MATLAB算法,可以高效地求解各种微分方程问题,帮助用户理解和分析问题,为工程 和科学研究提供有力支持。掌握MATLAB算法求解微分方程数值解和解析解对于工程和科学领域的从业人员具有重要的意义。MATLAB是 一个非常强大的工程和科学计算软件,它提供了丰富的数学工具和算法,能够用于解决各种复杂的数学问题。其中,求解微分方程是MATLAB的一个重要应用领域。在工程和科学领域中,微分方程通常

第5次实验报告(常微分方程初值问题的数值解法)

班级: 学号: 姓名: 成绩: 实验5 常微分方程初值问题的数值解法实验 1实验目的 1)熟悉欧拉法、改进欧拉法和龙格-库塔法的原理。 2)根据以上方法,编程求解常微分方程初值问题。 2 实验内容 (1)编写程序,用以上各种方法求解教材P232例7-1、习题6、11的初值问题。 (2) 使用系统自带的函数dsolve 和ode45求例7-1的符号解析解和数值解。 3实验原理 求解微分方程初值问题 00 (,)()y f x y y x y '=⎧⎨=⎩ (1) 欧拉法(显式): 10(,)n n n n n y y hf x y x x nh +=+⎧⎨=+⎩ (2) 改进欧拉法 (0)1(0)111(,)(,)(,)2 n n n n n n n n n n y y hf x y h y y f x y f x y ++++⎧=+⎪⎨⎡⎤=++⎪⎣⎦⎩ (3) 经典龙格-库塔法(四阶) 11234121324300(22)6(,)(,)22(,)22(,)() i i i i i i i i i i h y y K K K K K f x y h h K f x y K h h K f x y K K f x h y hK y y x +⎧=++++⎪⎪=⎪⎪=++⎪⎨⎪=++⎪⎪⎪=++⎪=⎪⎩

4实验步骤 1)建立函数文件,根据各公式编写程序; 2)上机调试程序,运行程序进行计算,记录计算结果; 3)分析各公式计算结果,比较各公式的优缺点。 5 程序设计 欧拉法 改进欧拉法 function Euler1(x0,y0,h,n) %(x0,y0):方程的初值 %h:步长 %n:计算的步数 for i=1:n x=x0+h; yp=y0+h*f(x0,y0); yc=y0+h*f(x,yp); y=(yp+yc)/2; x %在屏幕显示每一步的x值 y %在屏幕显示每一步计算的方程的数值解 x0=x; y0=y; end 经典龙格-库塔法

MATLAB改进欧拉法与四阶龙格-库塔求解一阶常微分方程

姓名:樊元君学号:姓12200902日期:2012.11.06 一、实验目的 掌握MATLAB言、C/C++®言编写计算程序的方法、掌握改进欧拉法与四阶龙格-库塔求解一阶常微分方程的初值问题。掌握使用MATLAB序求解常微分方程问题的方法。 二、实验内容 1、分别写出改进欧拉法与四阶龙格-库塔求解的算法,编写程序上机调试出结果,要求所编程序适用于任何一阶常微分方程的数值解问题,即能解决这一类问题,而不是某一个问题。 实验中以下列数据验证程序的正确性。 卜'=-V2 求[丁(°)=2103X^5),步长h=0.25。 2、实验注意事项 fy'=一靖 二的精确解为】•=?嵬十通过调整步长,观察结果的精度的变化

三、程序流程图: •改进欧拉格式流程图:

•四阶龙格库塔流程图: 开始 I a 洪入栗据步长h; 初像点(黛―― 效值♦敏一CK.Y) 一 E M xl=xO+h;kl=f(xO,yO); k2=f(xO+h/2,yO+h/2*kI); k3=f(x0+h/2.y0+h/2*k2); k4=f(xl,yO+h*k3); yl=yO+h/6*Ckl+2*k2+2*k3+k4). 确出xl,yl.y (y*析的原 函数精确解》 i=i+l; xO=xl; yO=y1 四、源程序: •改进后欧拉格式程序源代码: function[]=GJOL(h,x0,y0,X,Y) formatlongh=input('h='); x0=input('x0='); y0=input('y0='); disp('输入的范围是:’);X=input('X=');Y=input('Y=');n=round((Y-X)/h); i=1;x1=0;yp=0;yc=0;fori=1:1:nx1=x0+h; yp=y0+h*(-x0*(y0『2);%yp=y0+h*(y0-2*x0/y0);% yc=y0+h*(-x1*(yp『2);%yc=y0+h*(yp-2*x1/yp);% y1=(yp+yc)/2;x0=x1;y0=y1;y=2/(1+x0A2);%y=sqrt(1+2*x0);% fprintf('结果=%.3f,%.8f,%.8f\n',x1,y1,y);

微分方程求解的后退欧拉法、龙格库塔法

数值计算方法实验上机测验 微分方程求解的后退欧拉法、龙格库塔法(三阶、四阶) 日期:2011-06-16 一、测验目的 1. 学习matlab的使用方法。 2. 掌握常微分方程的几种数值解法:后退欧拉法、龙格库塔法(三阶、四阶)。 3. 比较各方法的数值解及误差,了解各方法的优缺点。 二、实验题目 三、实验原理 1.对于后退欧拉法: 利用 (0) 1 (1) 111 (,) (,) n n n n k n n n n y y h f x y y y h f x y + + +++ ⎫ =+⎪ ⎬ =+⎪⎭ 进行迭代求解可以完成计算 需要将微分方程表达式和精度计算表达式作为两个函数保存在m文件里并在程序中调用:

由上述实验原理叙述的后退欧拉法,三阶龙格—库塔法,四阶龙格—库塔法几种常微分方程数值解法分别对已给定的初值问题进行求解,比较各方法的数值解及误差,了解各方法的优缺点。

五、实验结果 1.对于后退欧拉法: ①若h=0.05 h=0.05; y=0; x=0; for i=1:20 k1=h*wangdaren_wf(x,y); k2=h*wangdaren_wf(x+h,y+k1); y=y+0.5*k1+0.5*k2 x=x+h; z=wangdaren_jq(x) t=abs(y-z); A=[x y z t] y=0; x=0; for i=1:10 k1=h*wangdaren_wf(x,y); k2=h*wangdaren_wf(x+h,y+k1); y=y+0.5*k1+0.5*k2 x=x+h; z=wangdaren_jq(x); t=abs(y-z); A=[x y z t] end 结果为A= 1.0000 0.3648 0.3679 0.0031

数学实验“欧拉数值算法,Runge-Kutta数值算法”实验报告(内含matlab程序)

西京学院数学软件实验任务书

实验二十四实验报告 一、实验名称:欧拉数值算法(显式,隐式,欧拉预估-校正法),Runge-Kutta 数值算法。 二、实验目的:进一步熟悉欧拉数值算法(显式,隐式,欧拉预估-校正法),Runge-Kutta 数值算法。 三、实验要求:运用Matlab/C/C++/Java/Maple/Mathematica 等其中一种语言完成程序设计。 四、实验原理: 1.欧拉数值算法(显式): 微分方程里最简单的方程形式莫过于一阶常微分方程的初值问题,即: 0(,)()dy f x y a x b dx y a y ⎧=≤≤⎪⎨⎪=⎩ 其中a ,b 为常数。 因为其简单但又是求解其他方程的基础,所以发展了许多典型的解法。所有算法中的f 就是代表上式中(,)f x y ,而y f 表示(,)f x y y ∂∂,x f 表示(,)f x y x ∂∂。 简单欧拉法是一种单步递推算法。简单欧拉法的公式如

下所示: 1(,)n n n n y y hf x y +=+ 简单欧拉法的算法过程介绍如下: 给出自变量x 的定义域[,]a b ,初始值0y 及步长h 。 对0,1,()/k b a h =-,计算1(,)k k k k y y hf x y +=+ 2.欧拉数值算法(隐式): 隐式欧拉法也叫退欧拉法,隐式欧拉法的公式如下所示: 111(,)n n n n y y hf x y +++=+ 隐式欧拉法是一阶精度的方法,比它精度高的公式是: 111[(,)(,)]2 n n n n n n h y y f x y f x y +++=++ 隐式欧拉的算法过程介绍如下。 给出自变量x 的定义域[,]a b ,初始值0y 及步长h 。 对0,1,()/k b a h =-,用牛顿法或其他方法求解方111(,)k k k k y y hf x y +++=+ 得出1k y +。 3.欧拉预估-校正法: 改进欧拉法是一种二阶显式求解法,其计算公式如下所示: 1[,(,)]22 n n n n n n h h y y hf x y f x y +=+++

matlab 求解常微分方程组

一、概述 随着科技的发展,数学在各个领域中都扮演着非常重要的角色。微分方程作为数学中的一个重要分支,在物理、工程、生物等领域都有着广泛的应用。而 MATLAB 作为一个强大的数学软件工具,可以帮助我们快速高效地求解各种类型的微分方程组,从而为各领域的研究和应用提供有力的支持。本文将详细介绍如何使用 MATLAB 求解常微分方程组的方法及步骤。 二、常微分方程组的定义 常微分方程组是指这样一类微分方程组:一个或多个未知函数及其导数的方程组。一般形式为:dx1/dt=f1(t,x1,x2,...,xn), dx2/dt=f2(t,x1,x2,...,xn),..., dxn/dt=fn(t,x1,x2,...,xn)。其中 x1,x2,...,xn 是未知函数,t是自变量,f1,f2,...,fn 是关于 t 和 x1,x2,...,xn 的已知函数。 三、求解常微分方程组的方法 MATLAB 提供了多种方法来求解常微分方程组,常用的方法有:欧拉法、四阶龙格库塔法、常微分方程组函数 ode45、ode23、 ode113 等。下面将分别介绍各种方法的具体步骤。 四、使用欧拉法求解常微分方程组 欧拉法是一种简单粗糙的数值解法,通过分割等间距的步长满足微分方程初值问题。其具体步骤如下:

1. 定义微分方程组的初始条件和步长:x0=[x1(0),x2(0),...,xn(0)], h=步长。 2. 使用欧拉法逐步逼近微分方程组的解: for i=1:N t(i)=t(i-1)+h; x(:,i+1)=x(:,i)+h*f(t(i),x(:,i)); end 其中 x(:,i)=[x1(i),x2(i),...,xn(i)] 为微分方程组在第 i 个时间节点的解。 五、使用四阶龙格库塔法求解常微分方程组 四阶龙格库塔法是一种常用的数值解法,通过多次近似来计算微分 方程组的数值解。其具体步骤如下: 1. 定义微分方程组的初始条件和步长:x0=[x1(0),x2(0),...,xn(0)], h=步长。 2. 使用四阶龙格库塔法逐步逼近微分方程组的解: for i=1:N t(i)=t(i-1)+h; k1=h*f(t(i),x(:,i)); k2=h*f(t(i)+h/2,x(:,i)+k1/2); k3=h*f(t(i)+h/2,x(:,i)+k2/2); k4=h*f(t(i)+h,x(:,i)+k3); x(:,i+1)=x(:,i)+(k1+2*k2+2*k3+k4)/6; end

实验五用matlab求解常微分方程

实验五 用matlab 求解常微分方程 1.微分方程的概念 未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。如果未知函数是一元函数,称为常微分方程。常微分方程的一般形式为 0),,",',,()(=n y y y y t F 如果未知函数是多元函数,成为偏微分方程。联系一些未知函数的一组微分方程组称为微分方程组。微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为 ) ()(')()(1)1(1)(t b y t a y t a y t a y n n n n =++++-- 若上式中的系数 n i t a i ,,2,1),( =均与t 无关,称之为常系数。 2.常微分方程的解析解 有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1 +=y dt dy 可化为 dt y dy =+1,两边积分可得通解为 1-=t ce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解. 线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。 一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程 ),,",',()1()(-=n n y y y t f y 设 ) 1(21,,',-===n n y y y y y y ,可将上式化为一阶方程组 ⎪⎪⎪⎩⎪⎪⎪⎨⎧====-),,,,(''''2113221n n n n y y y t f y y y y y y y 反过来,在许多情况下,一阶微分方程组也可化为高阶方程。所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。 3.微分方程的数值解法 除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程无限世界,应用中主要依靠数值解法。考虑一阶常微分方程初值问题 ⎩⎨ ⎧=<<=000)()),(,()('y t y t t t t y t f t y f

龙格-库塔法,求解常微分方程

隆格库塔法求解常微分方程 摘要 科学技术中常常需要求解常微分方程的定解问题,这里问题最简单的形式,是本章将着重考察的一阶方程的初值问题.虽然求解常微分方程有各种各样的解析方法,但解析方法只能用来求解一些特殊类型的方程,实际问题中归结出来的微分方程主要靠数值解法求解. 本文着重讨论了隆格库塔法求解一阶常微分方程的初值问题,采用了精度较高的经典的四阶隆格库塔法,然后通过对实例运用Matlab编程进行计算求解,为了体现计算结果的精确性和方法的优越性,再采用了欧拉法和预估较正法对实例进行计算求解作为比较.通过比较三种方法的计算精度,发现四阶经典龙格-库塔方法的误差最小,预估较正法其次,欧拉方法误差则比较大.最后通过选取不同的步长,研究了不同的步长对隆格库塔法求解常微分方程初值问题的计算精度的影响. 总之,本文全面分析了隆格库塔法在求解常微分方程的应用,相比与其他的数值解法,隆格库塔法计算精度较高,收敛性较好,其中四阶的隆格库塔法的效率最高,精度也最高. 关键词:四阶隆格库塔法;欧拉法;预估较正法;一阶常微分方程;Matlab

Runge Kutta Method For Solving Ordinary Differential Equations ABSTRACT Problem solving ordinary differential equations are often needed in science andtechnology. the problem in the simplest form is the initial value problem of first order equations in this chapter ,which will be discussed. Although there are various analytical methods for solving ordinary differential equations, the analytical method can only be used to solve some special types of equations.differential equations can be summed up the actual problems which This paper discusses the initial value problem of Runge Kutta Barclays by solving a differential equation, using the four order Runge Kutta method with high accuracy.for instance through classic Matlab programming calculation, the superiority in order to accurately and reflect the calculation result, then the Euler method and the prediction correction method for instance by calculation through the calculation precision. The comparison of three kinds of methods, found that the error of four order Runge Kutta method of minimum, prediction correction method secondly, Euler method error is relatively large. Finally, by selecting different step, study the affect the calculation accuracy of different step of Runge Kutta method to solve initial value problems of ordinary differential equations. In short, this paper comprehensively analyzes the application of Runge Kutta method for solving ordinary differential equations, compared with the numerical solution of other, higher accuracy Runge Kutta method, good convergence, the Runge Kutta method of order four of the highest efficiency and its precision is the highest. Key words: Four order Runge Kutta method; Euler method; prediction correction method; first order ordinary differential equations; Matlab

相关主题