改进欧拉法求解初值问题教学提纲
- 格式:doc
- 大小:17.00 KB
- 文档页数:2
改进的欧拉算法课程设计一、课程目标知识目标:1. 理解欧拉算法的基本原理及其在数值分析中的应用;2. 掌握改进的欧拉算法的计算步骤和推导过程;3. 能够运用改进的欧拉算法解决简单的数值问题。
技能目标:1. 培养学生运用数学软件或编程语言实现改进的欧拉算法的能力;2. 提高学生分析数值问题、设计算法及解决问题的能力;3. 培养学生通过合作学习,进行算法优化和调试的能力。
情感态度价值观目标:1. 培养学生对数值分析学科的兴趣,激发其探究精神;2. 增强学生的团队合作意识,学会倾听、尊重他人意见;3. 培养学生严谨、踏实的科学态度,提高其面对问题的勇气和信心。
本课程针对高年级学生,结合数值分析学科特点,注重理论知识与实践操作的结合。
通过本课程的学习,使学生能够深入理解并掌握改进的欧拉算法,培养其运用所学知识解决实际问题的能力,同时提高学生的情感态度价值观,为后续学习和工作打下坚实基础。
二、教学内容本章节教学内容以《数值分析》教材中关于改进的欧拉算法的相关章节为基础,进行以下组织:1. 回顾欧拉算法的基本原理,对比其与改进的欧拉算法的优缺点;- 教材章节:3.2 欧拉方法及其改进2. 详细讲解改进的欧拉算法的推导过程和计算步骤;- 教材章节:3.3 改进的欧拉方法3. 分析改进的欧拉算法在数值求解常微分方程中的应用;- 教材章节:3.4 数值求解常微分方程实例4. 通过实例演示,让学生动手实践改进的欧拉算法,提高其编程和解决问题的能力;- 教学实例:求解一维非线性常微分方程初值问题5. 组织课堂讨论,分析改进的欧拉算法在求解过程中的误差来源及优化方法;- 教材章节:3.5 改进的欧拉方法的误差分析6. 总结改进的欧拉算法的特点、适用范围及其在工程和科学研究中的应用。
教学内容安排和进度如下:第1-2课时:回顾欧拉算法,引入改进的欧拉算法;第3-4课时:详细讲解改进的欧拉算法的推导和计算步骤;第5-6课时:分析改进的欧拉算法在数值求解中的应用;第7-8课时:实例演示,学生动手实践;第9-10课时:课堂讨论,总结和拓展。
欧拉⽅法解决微分⽅程初值问题
微分⽅程初值问题
初值问题\begin{cases}y^{\prime}=f(x, y)\\ y(x_{0})=y_{0}\end{cases}的解y=y(x)代表通过点(x_0, y_0)的⼀条称为微分⽅程的积分曲线。
积分曲线上的每⼀个点(x, y)的切线斜率等于函数y^{\prime}在这点的值.
欧拉⽅法画出函数图像
在最⼀开始的(x_0, y_0)位置开始,每次我们都给x⼀个步长\Delta x,如果这个步长⽐较⼩我们就可以认为(x, g(x))和(x+\Delta x, g(x+\Delta x))两点构成的直线的斜率近似为函数在x处的导数。
这样每次都画出这样⼀条“线段”,然后x跳到x+\Delta x这个位置,重复上⾯的过程就可以近似的画出这条直线的图像。
代码实现
import matplotlib.pyplot as plt
x, y = 0.0, 1.0
step = 0.1
X, Y = [x], [y]
def f(x:float, y:float):
return y - 2 * x / y
while x < 10.0:
k = f(x, y)
y = y + k * step
x = x + step
X.append(x)
Y.append(y)
print(X, Y, sep='\n')
plt.plot(X, Y)
plt.show()
Processing math: 0%。
分别利用欧拉法和改进欧拉法求解微分方程组的数值解欧拉法(Euler’s Method)和改进欧拉法(Improved Euler’s Method),是求解常微分方程数值解的两种常用方法。
它们都属于一阶精度的显式迭代算法。
首先,我们来介绍一下欧拉法。
欧拉法是一种简单的数值求解算法,它基于微分方程的定义,将微分方程转化为差分方程。
考虑一个一阶常微分方程 dy/dx = f(x, y),并给定初始条件 y(x0)= y0,我们希望求解在给定区间 [x0, xn] 上方程的数值解。
首先,我们将区间 [x0, xn] 平均分成 N 个小区间,每个小区间的长度为 h = (xn - x0) / N。
然后,我们可以使用以下的欧拉迭代公式计算数值解:y[i+1] = y[i] + h * f(x[i], y[i])其中,x[i] = x0 + i * h,y[i] 是在点 x[i] 处的数值解。
通过不断迭代上述公式,我们可以获得[x0, xn] 上微分方程的数值解。
欧拉法的优点在于简单易懂,计算速度较快。
然而,欧拉法的缺点是精度较低,误差随着步长h 的增大而增大。
为了提高精度,我们可以使用改进欧拉法。
改进欧拉法,也称为龙格–库塔算法(Runge-Kutta Method)或四阶龙格–库塔方法,是一种基于欧拉法的改进算法。
改进欧拉法使用了更多的近似取值,以减小误差。
与欧拉法类似,我们将区间 [x0, xn] 平均分成 N 个小区间,每个小区间的长度为 h = (xn - x0) / N。
然后,我们可以使用以下的公式计算数值解:k1 = h * f(x[i], y[i])k2 = h * f(x[i] + h/2, y[i] + k1/2)y[i+1] = y[i] + k2其中,k1 和 k2 是计算过程中的辅助变量。
通过不断迭代上述公式,我们可以获得 [x0, xn] 上微分方程的数值解。
改进欧拉法相对于欧拉法而言,计算精度更高。
第8章 常微分方程数值解法本章主要内容:1.欧拉法、改进欧拉法. 2.龙格-库塔法。
3.单步法的收敛性与稳定性。
重点、难点一、微分方程的数值解法在工程技术或自然科学中,我们会遇到的许多微分方程的问题,而我们只能对其中具有较简单形式的微分方程才能够求出它们的精确解。
对于大量的微分方程问题我们需要考虑求它们的满足一定精度要求的近似解的方法,称为微分方程的数值解法。
本章我们主要讨论常微分方程初值问题⎪⎩⎪⎨⎧==00)(),(yx y y x f dx dy的数值解法。
数值解法的基本思想是:在常微分方程初值问题解的存在区间[a,b]内,取n+1个节点a=x 0<x 1<…<x N =b (其中差h n = x n –x n-1称为步长,一般取h 为常数,即等步长),在这些节点上把常微分方程的初值问题离散化为差分方程的相应问题,再求出这些点的上的差分方程值作为相应的微分方程的近似值(满足精度要求)。
二、欧拉法与改进欧拉法欧拉法与改进欧拉法是用数值积分方法对微分方程进行离散化的一种方法。
将常微分方程),(y x f y ='变为()*+=⎰++11))(,()()(n xn x n n dtt y t f x y x y1.欧拉法(欧拉折线法)欧拉法是求解常微分方程初值问题的一种最简单的数值解法。
欧拉法的基本思想:用左矩阵公式计算(*)式右端积分,则得欧拉法的计算公式为:Nab h N n y x hf y y n n n n -=-=+=+)1,...,1,0(),(1 欧拉法局部截断误差11121)(2++++≤≤''=n n n n n x x y h R ξξ或简记为O (h 2)。
我们在计算时应注意欧拉法是一阶方法,计算误差较大。
欧拉法的几何意义:过点A 0(x 0,y 0),A 1(x 1,y 1),…,A n (x n ,y n ),斜率分别为f (x 0,y 0),f (x 1,y 1),…,f (x n ,y n )所连接的一条折线,所以欧拉法亦称为欧拉折线法。
课题10. 常微分方程初值问题的数值方法一.问题提出(1)利用欧拉方法和改进的欧拉方法求解初值问题:dy/dx=4*x/y-x*y; y(0)=3; 其中0<x<=2二.问题算法、c语言编程和上机运算结果1.欧拉法算法:输入微分方程f(x,y);输入积分部数n;输入初值x0,y0;输入步长h;利用k1=f(xn,yn)y(n+1)=yn+k1*h;n=0,1,2……采取不断循环计算;输出x1,x2,……xn.程序:/*微分方程*/float f(x,y)float x,y;{float z;z=4*x/y-x*y;return(z);}/* 欧拉法*/float EULAR(f)float (*f)();{int i,n;float x0,y0,x,y,k1,h;printf("\n请输入积分步数n:");scanf("%d",&n);printf("\n请输入初值x(0) y(0):");scanf("%f%f",&x0,&y0);printf("\n请输入步长h:");scanf("%f",&h);printf("\n x y"); printf("\n %f %f",x0,y0); for(i=1;i<=n;i++){x=x0+h;k1=(*f)(x0,y0);y=y0+h*k1;printf("\n %f %f",x,y); x0=x;y0=y;}}main(){EULAR(f);}结果:(1)h=0.1时(2)h=0.2时(3)h=0.4时2.改进的欧拉法算法:输入微分方程f(x,y);输入积分部数n;输入初值x0,y0;输入步长h;利用k1=f(xn,yn)k2=f(xn+h,yn+h*k1)y(n+1)=yn+(k1+k2)/2;n=0,1,2……采取不断循环计算;输出x1,x2,……xn.程序:/*微分方程*/float f(x,y)float x,y;{float z;z=y-2.0*x/y;return(z);}/* 改进欧拉法*/float EULAR(f)float (*f)();{int i,n;float x0,y0,x,y,k1,k2,h;printf("\n请输入积分步数n:");scanf("%d",&n);printf("\n请输入初值x(0) y(0):");scanf("%f%f",&x0,&y0);printf("\n请输入步长h:");scanf("%f",&h);printf("\n x y"); printf("\n %f %f",x0,y0); for(i=1;i<=n;i++){x=x0+h;k1=(*f)(x0,y0);k2=(*f)(x,y0+h*k1);y=y0+h*(k1+k2)/2.0;printf("\n %f %f",x,y); x0=x;y0=y;}}main(){EULAR(f);}结果:(1)当h=0.1时(2)当h=0.2时(3)当h=0.4时三.结果分析讨论1.对比欧拉法,改进的欧拉法和精确解的结果可知,改进的欧拉法所得到结果的精度比欧拉法的大,这是因为改进的欧拉法融入了属于隐式公式的梯形公式,它的计算数值解的精度要比欧拉公式好。
《计算方法》实验指导书实验1 方程求根一、实验目的1.通过对二分法、牛顿法、割线法作编程练习,进一步体会它们各自不同的特点;2.了解二分法,切线法,割线法。
3.能熟练运用二分法,牛顿法进行方程求根4.通过上机调试运行,对方程求根的几种方法程序进行改进。
二、实验要求1.上机前作好充分准备,包括复习编程所需要的语言工具。
2.上机时要遵守实验室的规章制度,爱护实验设备。
3.记录调试过程及结果,记录并比较与手工运算结果的异同。
4.程序调试完后,须由实验辅导教师在机器上检查运行结果。
5.给出本章实验单元的实验报告。
三、实验环境、设备1.硬件设备:IBM PC以上计算机,有硬盘和一个软驱、单机和网络环境均可。
2.软件环境:C语言运行环境。
四、实验原理、方法二分算法计算步骤:(1)输入有根区间的端点a、b及预先给定的精度ε;(2)计算中点x=(a+b)/2;(3)若f(x)f(b)<0,则a=x,转向下一步;否则b=x,转向下一步;(4)若b-a<ε,则输出方程满足精度要求的根x,结束;否则转向步骤(2)。
迭代法:牛顿法:牛顿迭代法是一种逐步线性化方法,即将非线性方程f(x)=0的求根问题归结为计算一系列线性方程的根。
设x k 是方程f(x)=0的一个近似根,将f(x)在x k 处作一阶泰勒展开,即f(x)≈f(x k )+f′(x k )(x- x k )于是得到如下的近似方程f(x k )+f′(x k )(x- x k )=0 (2.7)设f′(x k )≠0,则式(2.7)的解为)()('k k k x f x f x x -= 取x 作为原方程的新的近似根x k+1,即令)()('1k k k k x f x f x x -=+ k=0,1,2, … (2.8)则称式(2.8)为牛顿迭代公式。
用牛顿迭代公式(2.8)求方程近似根的方法称为牛顿迭代法,简称牛顿法,又称切线法。
第九章 解常微分方程初值问题4. 改进Euler 方法我们先用Euler 公式求的一个初步的近似值,再用梯形公式将它校正一次,即按(5)迭代一次得y 1+n ,这个结果称为校正值,这样建立的校正系统通常成为改进Euler 公式.y 1+n = y n +h /2(f (n n y x ,) + f (x n +1, n y + h* f (n n y x ,))) (6)即迭代公式为:⎪⎪⎪⎨⎧+=+=+),,(*),,(*1p n n c n n n p y x f h y y y x f h y y(7)进过计算得出改进Euler 法比Euler 法 明显改善了精度.上机实验⑷上机题目:贬值求一阶常微分方程的初值问题实验目的:掌握各种Euler 方法和梯形法。
进过计算结果来分析四种方法的优缺点,掌握规律。
分析结果。
实验要求:用不同的方法来解同一个例子。
① 上机前充分准备,复习有关内容,写出计算步骤,查对程 序。
②改进Euler 法在Matlab 环境中运算,并分析出最好的方法,再给出它的流程图。
③实验结束后写出完整的实验报告。
算法说明:①经过所给出的方程组和初值初步改变方程组。
②由以上四种方法的计算公式来逐步计算y 的每个值。
③最后为了方便比较列为表最适合。
上机例题:例1.后退Euler 方法解初值问题,h =0.1⎩⎨⎧=〈〈='1y(0)1x 0 2x/y,-y y Matlab 程序:function[x,y]=gaijing(f,x0,y0,a,b,n)h=(b-a)/n; %定义并计算步长 for k=1:n+1x(k)=a+(k-1)*h; %计算x(k) endy(1)=y0; for i=1:nyp=y(i)+h*subs(subs(f,x(i)),y(i)); %由改进Euler 的公式计算. yc=y(i)+h*subs(subs(f,x(i+1)),yp); y(i+1)=(1/2)*(yp+yc); enddisp(sprintf(' i x(i) y(i)')); %为了方便以规定格式先输出 i,x(i),y(i). for i=1:ndisp(sprintf(' %d %f %f',i,x(i+1),y(i+1))); %为了方便观察结果在先输出的格式下输出结果end s=y(i);运行结果:[x,y]=gaijing('y-2*x/y',0,1,0,1,10) i x(i) y(i) 1 0.100000 1.0959092 0.200000 1.1840973 0.300000 1.2662014 0.400000 1.3433605 0.500000 1.4164026 0.600000 1.4859567 0.700000 1.5525148 0.800000 1.6164759 0.900000 1.678166 10 1.000000 1.737867改进Euler 的流程图:流程图解释:1) 输入N h y x 最大循环次序,,,00;2)1腻给n;3)把 10x h x 腻给+ 把1000002)(,),(,),(y y y y y x hf y y y x hf y c p c p p 腻给腻给腻给+++;4)输出1x ,1y ;5)判断n 是否等于 N ,若n=N ,那么停止;否则到第6步;6)把n+1 赋给 n,把1x 赋给0x ,把1y 腻给0y 到步骤3;上机结果分析:梯形方法是Euler 的校正,它比Euler 方法好的多,改进Euler 是梯形方法的校正。