数学实验“微分方程组边值问题数值算法(打靶法,有限差分法)”实验报告(内含matlab程序)

合集下载

微分方程数值解法实验报告

微分方程数值解法实验报告

微分方程数值解法实验报告2篇微分方程数值解法实验报告(一)在实际科学与工程问题中,我们经常会遇到微分方程的求解。

然而,许多微分方程往往没有解析解,这就需要我们利用数值方法来获得近似解。

本篇实验报告将介绍两种常见的微分方程数值解法:欧拉方法和改进的欧拉方法。

一、欧拉方法欧拉方法是最简单的微分方程数值解法之一。

其基本原理为离散化微分方程,将微分方程中的导数用差商代替。

设要求解的微分方程为dy/dx = f(x, y),步长为h,则可用以下公式进行递推计算:y_{n+1} = y_n +hf(x_n, y_n)二、算法实现为了对欧拉方法进行数值实验,我们以一阶线性常微分方程为例:dy/dx = x - y, y(0) = 1步骤如下:(1)选择合适的步长h和求解区间[a, b],这里我们取h=0.1,[a, b] = [0, 1];(2)初始化y_0 = 1;(3)利用欧拉方法递推计算y_{n+1} = y_n + 0.1(x_n - y_n);(4)重复步骤(3),直到x_n = 1。

三、实验结果与讨论我们通过上述步骤得到了在[0, 1]上的近似解y(x)。

下图展示了欧拉方法求解的结果。

从图中可以看出,欧拉方法得到的近似解与精确解有一定的偏差。

这是因为欧拉方法只是通过递推计算得到的近似解,并没有考虑到更高阶的误差。

所以在需要高精度解时,欧拉方法并不理想。

四、改进的欧拉方法针对欧拉方法的不足,我们可以考虑使用改进的欧拉方法(也称为改进的欧拉-柯西方法)。

它是通过利用前后两个步长欧拉方法得到的结果作为差商的中间项,从而提高了求解精度。

一阶线性常微分方程的改进欧拉方法可以表示为:y_{n+1} = y_n + h(f(x_n, y_n) + f(x_{n+1}, y_n + hf(x_n,y_n)))/2五、算法实现与结果展示将改进的欧拉方法应用于前述的一阶线性常微分方程,我们同样选择h=0.1,[a, b] = [0, 1]。

微分方程数值解实验报告

微分方程数值解实验报告

微分方程数值解实验报告实验目的:掌握微分方程数值解的基本方法,能够利用计算机编程求解微分方程。

实验原理:微分方程是自然科学与工程技术中常见的数学模型,它描述了变量之间的关系及其随时间、空间的变化规律。

解微分方程是研究和应用微分方程的基础,但有很多微分方程无法找到解析解,只能通过数值方法进行求解。

本实验采用欧拉方法和改进的欧拉方法求解微分方程的初值问题:$$\begin{cases}\frac{dy}{dt}=f(t,y)\\y(t_0)=y_0\end{cases}$$其中,$f(t,y)$是给定的函数,$y(t_0)=y_0$是已知的初值条件。

欧拉方法是最基本的数值解法,其步骤如下:1.给定$t_0$和$y_0$2.计算$t_{i+1}=t_i+h$,其中$h$是步长3. 计算$y_{i+1}=y_i+hf(t_i,y_i)$4.重复步骤2、3直到达到终止条件改进的欧拉方法是对欧拉方法进行改进,通过利用函数$y(t)$在$t+\frac{1}{2}h$处的斜率来更准确地估计$y_{i+1}$,其步骤如下:1.给定$t_0$和$y_0$2.计算$t_{i+1}=t_i+h$,其中$h$是步长3. 计算$y_*=y_i+\frac{1}{2}hf(t_i,y_i)$4. 计算$y_{i+1}=y_i+hf(t_i+\frac{1}{2}h,y_*)$5.重复步骤2、3、4直到达到终止条件实验步骤:1.编写程序实现欧拉方法和改进的欧拉方法2.给定微分方程和初值条件3.设置步长和终止条件4.利用欧拉方法和改进的欧拉方法求解微分方程5.比较不同步长下的数值解与解析解的误差6.绘制误差-步长曲线,分析数值解的精度和收敛性实验结果:以一阶常微分方程$y'=3ty+t$为例,给定初值$y(0)=1$,取步长$h=0.1$进行数值求解。

利用欧拉方法求解微分方程得到的数值解如下:\begin{array}{cccc}t & y_{\text{exact}} & y_{\text{Euler}} & \text{误差} \\ \hline0.0&1.000&1.000&0.000\\0.1&1.035&1.030&0.005\\0.2&1.104&1.108&0.004\\0.3&1.212&1.217&0.005\\0.4&1.360&1.364&0.004\\0.5&1.554&1.559&0.005\\0.6&1.805&1.810&0.005\\0.7&2.131&2.136&0.005\\0.8&2.554&2.560&0.006\\0.9&3.102&3.107&0.006\\1.0&3.807&3.812&0.005\\\end{array}利用改进的欧拉方法求解微分方程得到的数值解如下:\begin{array}{cccc}t & y_{\text{exact}} & y_{\text{Improved Euler}} & \text{误差} \\\hline0.0&1.000&1.000&0.000\\0.1&1.035&1.035&0.000\\0.2&1.104&1.103&0.001\\0.3&1.212&1.211&0.001\\0.4&1.360&1.358&0.002\\0.5&1.554&1.552&0.002\\0.6&1.805&1.802&0.003\\0.7&2.131&2.126&0.005\\0.8&2.554&2.545&0.009\\0.9&3.102&3.086&0.015\\1.0&3.807&3.774&0.032\\\end{array}误差-步长曲线如下:实验结论:通过对比欧拉方法和改进的欧拉方法的数值解与解析解的误差,可以发现改进的欧拉方法具有更高的精度和收敛性。

微分方程数值方法实验报告

微分方程数值方法实验报告

微分方程数值方法实验报告微分方程数值方法实验报告一、实验目的1、了解Euler法及梯形法的基本原理,能用其解决常微分方程初值问题,并把计算结果用图形表示出来。

2、理解4阶RK法基本计算步骤,能编程实现算法并解决相关常微分方程初值问题。

3、了解MATLAB主要功能和基本特征,熟悉MATLAB操作环境。

掌握MATLAB常用函数的使用以及图形处理。

二、实验题目对于初值问题u’=u,u(0)=1,在区间[0,1]上,用Euler法,梯形法及RK方法进行计算,取步长h=0.1,0.2,0.5,试比较(1)用同样步长,三种方法中哪一个精度最好;(2)对同一种方法一不同步长进行计算,哪一个结果最好。

三、实验内容1、步长为h=0.1时,用三种方法计算题目1)、MATLAB程序Euler法:>> a=0;b=1;h=0.1;N=(b-a)/h;y=zeros(N+1,1);y(1)=1;x=a:h:b;>> for i=2:N+1y(i)=y(i-1)+h*y(i-1);end求得:y = (1 1.1 1.21 1.331 1.4641 1.6105 1.7716 1.9487 2.1436 2.3579 2.5937)’梯形法:>> z=zeros(N+1,1);>> z(1)=1;>> for i=2:N+1v1=z(i-1);t=z(i-1)+h*v1;v2=t;z(i)=z(i-1)+h/2*(v1+v2);end1求得:z = (1 1.105 1.2205 1.3476 1.4873 1.641 1.8101 1.99622.2008 2.4258 2.6734)’RK法:>> w=zeros(N+1,1);>> w(1)=1;>> for i=2:N+1K1=w(i-1);K2=w(i-1)+K1*h/2;K3=w(i-1)+K2*h/2;K4=w(i-1)+K3*h;w(i)=w(i-1)+h*(K1+2*K2+2*K3+K4)/6;end求得:w =(1 1.1052 1.2214 1.3499 1.4918 1.6487 1.8221 2.01382.2255 2.4596 2.7183)’>> plot(x,y)>> hold on>> plot(x,z,':')>> plot(x,w,'--')>> plot(x,exp(x),'*')>> title('相同步长下三种方法与准确解的对比')>> legend('Euler法','梯形法','四阶RK法','准确解') 2)、图形对比相同步长下三种方法与准确解的对比2.82.62.42.221.81.6Euler法1.4梯形法四阶RK法1.2准确解1 00.10.20.30.40.50.60.70.80.9123)、结果分析由图得出三种方法中四阶RK法经确度最高,梯形法次之,Euler法精确度最差。

数学实验“微分方程组边值问题数值算法(打靶法,有限差分法)”实验报告(内含matlab程序)

数学实验“微分方程组边值问题数值算法(打靶法,有限差分法)”实验报告(内含matlab程序)

西京学数学软件实验任务书课程名称数学软件实验班级数0901学号0912020107姓名李亚强微分方程组边值问题数值算法(打靶法,有限差分法)实验课题熟悉微分方程组边值问题数值算法(打靶法,有限差实验目的分法)运用Matlab/C/C++/Java/Maple/Mathematica等其中实验要求一种语言完成微分方程组边值问题数值算法(打靶法,有限差分法)实验内容成绩教师实验二十七实验报告1、实验名称:微分方程组边值问题数值算法(打靶法,有限差分法)。

2、实验目的:进一步熟悉微分方程组边值问题数值算法(打靶法,有限差分法)。

3、实验要求:运用Matlab/C/C++/Java/Maple/Mathematica 等其中一种语言完成程序设计。

4、实验原理:1.打靶法:对于线性边值问题(1)⎩⎨⎧==∈=+'+''βα)(,)(],[)()()(b y a y b a x x f y x q y x p y 假设是一个微分算子使:L ()()Ly y p x y q x y '''=++则可得到两个微分方程:,,)(1x f Ly =α=)(1a y 0)(1='a y ,, (2)⇔)()()(111x f y x q y x p y =+'+''α=)(1a y 0)(1='a y ,,02=Ly 0)(2=a y 1)(2='a y ,, (3)⇔0)()(222=+'+''y x q y x p y 0)(2=a y 1)(2='a y 方程(2),(3)是两个二阶初值问题.假设是问题1y(2)的解,是问题(3)的解,且,则线性边值问2y 2()0y b ≠题(1)的解为: 。

1122()()()()()y b y x y x y x y b β-=+2.有限差分法:基本思想是把连续的定解区域用有限个离散点构成的网格来代替,这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似, 积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组 , 解此方程组就可以得到原问题在离散点上的近似解。

微分方程数值解实验报告

微分方程数值解实验报告

微分方程数值解实验报告微分方程数值解实验报告一、引言微分方程是数学中一类重要的方程,广泛应用于各个科学领域。

在实际问题中,往往难以得到微分方程的解析解,因此需要借助数值方法来求解。

本实验旨在通过数值解法,探索微分方程的数值解及其应用。

二、数值解法介绍常用的微分方程数值解法有欧拉法、改进欧拉法、四阶龙格-库塔法等。

在本实验中,我们将采用改进欧拉法进行数值解的求取。

改进欧拉法是一种一阶的显式迭代法,其基本思想是将微分方程的导数用差商来近似表示,并通过迭代逼近真实解。

具体迭代公式如下:\[y_{n+1} = y_n + h \cdot f(x_n + \frac{h}{2}, y_n + \frac{h}{2} \cdot f(x_n, y_n))\]其中,\(y_n\)表示第n步的近似解,\(h\)表示步长,\(f(x_n, y_n)\)表示微分方程的导数。

三、实验步骤1. 确定微分方程及初始条件在本实验中,我们选择经典的一阶常微分方程:\[y' = -2xy\]并给定初始条件\(y(0) = 1\)。

2. 设置步长和迭代次数为了得到较为准确的数值解,我们需要合理选择步长和迭代次数。

在本实验中,我们将步长设置为0.1,迭代次数为10。

3. 迭代计算数值解根据改进欧拉法的迭代公式,我们可以通过编写计算程序来求解微分方程的数值解。

具体计算过程如下:- 初始化:设定初始条件\(y_0 = 1\),并给定步长\(h = 0.1\)。

- 迭代计算:使用改进欧拉法的迭代公式,通过循环计算得到\(y_1, y_2, ...,y_{10}\)。

- 输出结果:将计算得到的数值解输出,并进行可视化展示。

四、实验结果与分析通过以上步骤,我们得到了微分方程的数值解\(y_1, y_2, ..., y_{10}\)。

将这些数值解进行可视化展示,可以更直观地观察到解的变化趋势。

根据实验结果,我们可以发现随着迭代次数的增加,数值解逐渐逼近了真实解。

打靶法(含Matlab程序)

打靶法(含Matlab程序)

西京学数学软件实验任务书动方向控制减速的推力,主要的控制量只有一个减速推力,减速还会消耗燃料让登月器的质量减小。

所以在极坐标下系统的状态就是x‘=[质量m,角度theta,高度r,角速度omega,径速度v]这五个量,输入就是减速力F。

先列微分方程,dx/dt=f(x)+B*F,其中x是5*1的列向量,质量dm/dt=-F/2940,剩下几个翻下极坐标的手册。

把这个动力学模型放到matlab里就能求解了,微分方程数值解用ode45。

第一问F=0,让你求椭圆轨道非常容易。

注意附件1里说15公里的时候速度是1.7km/s。

算完以后验证一下对不对,对的话就是他了,不对的话说明这个椭圆轨道有进动,到时再说。

(2) 算出轨道就能计算减速力了。

这时候你随便给个常数减速力到方程里飞船八成都能降落,但不是最优解。

想想整个过程,开始降落之前飞船总机械能就那么多,你需要对飞船做负功让机械能减到0。

题目里写发动机喷出翔的相对速度是一定的,直觉告诉我飞船速度快的时候多喷一些速度慢的时候少喷一些,可以提高做负功的效率。

但是多喷也不能超过上限7500N,所以这就是一个带约束优化问题,matlab里边有专用的优化函数,用fmincon就好。

找出最优解以后把过程画出来,看看F可不可以是那5个状态量的线性组合,如果是的话就非常happy,不是的话再说。

三四阶段你可以扯点图像识别,什么二维复利叶分解找平坦区域,怎么一边下降一边根据自身状态调整路径之类的。

五六阶段还真不知道说什么。

一二阶段肯定是重点啦(3) 误差分析其实还挺难的。

可能的误差来源是地球的引力,月亮绕地球向心加速度,太阳的引力(可能会很小),对自身速度、角度的测量误差(比如你测出自身当前速度100m/s但实际上是105m/s),控制的时候F大小以及角度的误差(比如你想朝正前方向喷2000N但实际上偏了2度而且F=2010N之类)。

上一问已经求出了最优控制策略和飞船路线,把这些扰动加进去以后算出新的路线减掉理想路线求偏差,然后随便用个卡尔曼滤波器把误差给校正All for Joy2014/9/13 11:14:38老师的思路,求大神解答给我一份呀实验二十七实验报告一、实验名称:微分方程组边值问题数值算法(打靶法,有限差分法)。

打靶法(含Matlab程序)

打靶法(含Matlab程序)

西京学数学软件实验任务书动方向控制减速的推力,主要的控制量只有一个减速推力,减速还会消耗燃料让登月器的质量减小。

所以在极坐标下系统的状态就是x‘=[质量m,角度theta,高度r,角速度omega,径速度v]这五个量,输入就是减速力F。

先列微分方程,dx/dt=f(x)+B*F,其中x是5*1的列向量,质量dm/dt=-F/2940,剩下几个翻下极坐标的手册。

把这个动力学模型放到matlab里就能求解了,微分方程数值解用ode45。

第一问F=0,让你求椭圆轨道非常容易。

注意附件1里说15公里的时候速度是s。

算完以后验证一下对不对,对的话就是他了,不对的话说明这个椭圆轨道有进动,到时再说。

(2) 算出轨道就能计算减速力了。

这时候你随便给个常数减速力到方程里飞船八成都能降落,但不是最优解。

想想整个过程,开始降落之前飞船总机械能就那么多,你需要对飞船做负功让机械能减到0。

题目里写发动机喷出翔的相对速度是一定的,直觉告诉我飞船速度快的时候多喷一些速度慢的时候少喷一些,可以提高做负功的效率。

但是多喷也不能超过上限7500N,所以这就是一个带约束优化问题,matlab里边有专用的优化函数,用fmincon就好。

找出最优解以后把过程画出来,看看F可不可以是那5个状态量的线性组合,如果是的话就非常happy,不是的话再说。

三四阶段你可以扯点图像识别,什么二维复利叶分解找平坦区域,怎么一边下降一边根据自身状态调整路径之类的。

五六阶段还真不知道说什么。

一二阶段肯定是重点啦(3) 误差分析其实还挺难的。

可能的误差来源是地球的引力,月亮绕地球向心加速度,太阳的引力(可能会很小),对自身速度、角度的测量误差(比如你测出自身当前速度100m/s但实际上是105m/s),控制的时候F大小以及角度的误差(比如你想朝正前方向喷2000N但实际上偏了2度而且F=2010N之类)。

上一问已经求出了最优控制策略和飞船路线,把这些扰动加进去以后算出新的路线减掉理想路线求偏差,然后随便用个卡尔曼滤波器把误差给校正All for Joy2014/9/13 11:14:38老师的思路,求大神解答给我一份呀实验二十七实验报告实验名称:微分方程组边值问题数值算法(打靶法,有限差分法)。

(完整版)二阶常微分方程边值问题的数值解法毕业论文

(完整版)二阶常微分方程边值问题的数值解法毕业论文

二阶常微分方程边值问题的数值解法摘要求解微分方程数值解的方法是多种多样的,它本身已形成一个独立的研究方向,其要点是对微分方程定解问题进行离散化.本文以研究二阶常微分方程边值问题的数值解法为目标,综合所学相关知识和二阶常微分方程的相关理论,通过对此类方程的数值解法的研究,系统的复习并进一步加深对二阶常微分方成的数值解法的理解,为下一步更加深入的学习和研究奠定基础.对于二阶常微分方程的边值问题,我们总结了两种常用的数值方法:打靶法和有限差分法.在本文中我们主要探讨关于有限差分法的数值解法.构造差分格式主要有两种途径:基于数值积分的构造方法和基于Taylor展开的构造方法.后一种更为灵活,它在构造差分格式的同时还可以得到关于截断误差的估计.在本文中对差分方法列出了详细的计算步骤和Matlab程序代码,通过具体的算例对这种方法的优缺点进行了细致的比较.在第一章中,本文将系统地介绍二阶常微分方程和差分法的一些背景材料.在第二章中,本文将通过Taylor展开分别求得二阶常微分方程边值问题数值解的差分格式.在第三章中,在第二章的基础上利用Matlab求解具体算例,并进行误差分析.关键词:常微分方程,边值问题,差分法,Taylor展开,数值解The Numerical Solutions ofSecond-Order Ordinary Differential Equations with the Boundary Value ProblemsABSTRACTThe numerical solutions for solving differential equations are various. It formed an independent research branch. The key point is the discretization of the definite solution problems of differential equations. The goal of this paper is the numerical methods for solving second-order ordinary differential equations with the boundary value problems. This paper introduces the mathematics knowledge with the theory of finite difference. Through solving the problems, reviewing what have been learned systematically and understanding the ideas and methods of the finite difference method in a deeper layer, we can establish a foundation for the future learning.For the second-order ordinary differential equations with the boundary value problems, we review two kinds of numerical methods commonly used for linear boundary value problems, i.e. shooting method and finite difference method. There are mainly two ways to create these finite difference methods: i.e. Taylor series expansion method and Numerical Integration. The later one is more flexible, because at the same time it can get the estimates of the truncation errors. We give the exact calculating steps and Matlab codes. Moreover, we compare the advantages and disadvantages in detail of these two methods through a specific numerical example. In the first chapter, we will introduce some backgrounds of the ordinary differential equations and the difference method. In the second chapter, we will obtain difference schemes of the numerical solutions of the Second-Order ordinary differential equations with the boundary value problems through the Taylor expansion. In the third chapter, we using Matlab tosolve the specific examples on the basis of the second chapter, and analyzing the errors.KEY WORDS: Ordinary Differential Equations, Boundary Value Problems, Finite Difference Method, Taylor Expansion, Numerical Solution毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。

微分方程数值解实验报告

微分方程数值解实验报告

微分方程数值解法课程设计报告班级:_______姓名: ___学号:__________成绩:2017年 6月 21 日摘要自然界与工程技术中的很多现象,可以归结为微分方程定解问题。

其中,常微分方程求解是微分方程的重要基础内容。

但是,对于许多的微分方程,往往很难得到甚至不存在精确的解析表达式,这时候,数值解提供了一个很好的解决思路。

,针对于此,本文对常微分方程数值解法进行了简单研究,主要讨论了一些常用的数值解法,如欧拉法、改进的欧拉法、Runge—Kutta方法、Adams法以及椭圆型方程、抛物型方程的有限差分方法等,通过具体的算例,结合MATLAB求解画图,初步给出了一般常微分方程数值解法的求解过程。

同时,通过对各种方法的误差分析,让大家对各种方法的特点和适用范围有一个直观的感受。

关键词:微分方程数值解、MATLAB目录摘要 (2)目录 (3)第一章常微分方程数值解法的基本思想与原理 (4)1.1 常微分方程数值解法的基本思路 (4)1.2用matlab编写源程序 (4)1.3 常微分方程数值解法应用举例及结果 (5)第二章常系数扩散方程的经典差分格式的基本思想与原理 (6)2.1 常系数扩散方程的经典差分格式的基本思路 (6)2.2 用matlab编写源程序 (7)2.3 常系数扩散方程的经典差分格式的应用举例及结果 (8)第三章椭圆型方程的五点差分格式的基本思想与原理 (10)3.1 椭圆型方程的五点差分格式的基本思路 (10)3.2 用matlab编写源程序 (10)3.3 椭圆型方程的五点差分格式的应用举例及结果 (12)第四章总结 (12)参考文献 (12)第一章常微分方程数值解法的基本思想与原理1.1常微分方程数值解法的基本思路常微分方程数值解法(numerical methods forordinary differential equations)计算数学的一个分支.是解常微分方程各类定解问题的数值方法.现有的解析方法只能用于求解一些特殊类型的定解问题,实用上许多很有价值的常微分方程的解不能用初等函数来表示,常常需要求其数值解.所谓数值解,是指在求解区间内一系列离散点处给出真解的近似值.这就促成了数值方法的产生与发展.1.2用matlab编写源程序龙格库塔法:M文件:function dx=Lorenz(t,x)%r=28,sigma=10,b=8/3dx=[-10*(x(1)-x(2));-x(1)*x(3)+28*x(1)-x(2);x(1)*x(2)-8*x(3)/3];运行程序:x0=[1,1,1];[t,y]=ode45('Lorenz',[0,100],x0);subplot(2,1,1) %两行一列的图第一个plot(t,y(:,3))xlabel('time');ylabel('z');%画z-t图像subplot(2,2,3) %两行两列的图第三个plot(y(:,1),y(:,2))xlabel('x');ylabel('y'); %画x-y图像subplot(2,2,4)plot3(y(:,1),y(:,2),y(:,3))xlabel('x');ylabel('y');zlabel('z');%画xyz图像欧拉法:h=0.010;a=16;b=4;c=49.52;x=5;y=10;z=10;Y=[];for i=1:800x1=x+h*a*(y-x);y1=y+h*(c*x-x*z-y);z1=z+h*(x*y-b*z);x=x1;y=y1;z=z1;Y(i,:)=[x y z];endplot3(Y(:,1),Y(:,2),Y(:,3));1.3常微分方程数值解法的应用举例及结果应用举例:⎪⎪⎪⎩⎪⎪⎪⎨⎧-=--=--=)()()()()()()()()())()(()(t bz t y t x dt t dz t z t x t y t rx dt t dy t y t x a dt t dx a=10,b=8/3,0<r<+∞,当1<r<24.74时,Lorenz 方程有两个稳定的不动点c()1(-r b ,)1(-r b ,r-1)和c '(-)1(-r b ,-)1(-r b ,r-1),一个稳定的不动点0=(0,0,0),当r>24.74时,c 和c '都变成不稳定的,此时存在混沌和奇怪吸引子。

第十一章 常微分方程边值问题的数值解法

第十一章 常微分方程边值问题的数值解法

第十一章 常微分方程边值问题的数值解法工程技术与科学实验中提出的大量问题是常微分方程边值问题.本章将研究常微分方程边值问题的数值求解方法.主要介绍三种边界条件下的定解问题和两大类求解边值问题的数值方法,打靶法算法和有限差分方法.11.1 引言在很多实际问题中都会遇到求解常微分方程边值问题. 考虑如下形式的二阶常微分方程),,(y y x f y '='', b x a <<, (11.1.1)在如下三种边界条件下的定解问题: 第一种边界条件:α=)(a y , β=)(b y (11.1.2)第二种边界条件:α=')(a y , β=')(b y (11.1.2)第三种边界条件:⎩⎨⎧=-'=-'1010)()()()(b b y b y a a y a y βα, (11.1.13) 其中0 0, ,00000>+≥≥b a b a .常微分方程边值问题有很多不同解法, 本书仅介绍打靶方法和有限差分方法.11.2 打靶法对于二阶非线性边值问题()()().,,βα==≤≤'=''b y a y b x a y y x f y ,,, (11.2.1)打靶法近似于使用初值求解的情况. 我们需要利用一个如下形式问题初值解的序列:()()v a w a w b x a w w x f w ='=≤≤'='')(,,,,,α, (11.2.2)引进参数v 以近似原边界值问题的解.选择参数k v v =,以使:()()β==∞→b y v b w k k ,lim , (11.2.3)其中),(k v x w 定义为初值问题(11.2.2)在k v v =时的解,同时()x y 定义为边值问题(11.2.1)的解.首先定义参数0v ,沿着如下初值问题解的曲线,可以求出点),(αa 对应的初始正视图()()v a w a w b x a w w x f w ='=≤≤'='')(,,,,,α. (11.2.4)如果),(0v b w 不严格收敛于β,那么我们选择1v 等值以修正近似值,直到),(0v b w 严格逼近β.为了取得合适的参数k v ,现在假定边值问题(11.2.1)有唯一解,如果),(v x w 定义为初始问题(11.2.2)的解,那么v 可由下式确定:0),(=-βv b w . (11.2.5)由于这是一个非线性方程,我们可以利用Newton 法求解.首先选择初始值0v ,然后由下式生成序列),)(()),((111-----=k k k k v b dvdw v b w v v β,此处),(),)((11--=k k v b dv dwv b dv dw , (11.2.6)同时要求求得),)((1-k v b dvdw,因为),(v b w 的表达式未知,所以求解这个有一点难度;我们只能得到这么一系列的值。

偏微分方程数值实验报告及算法实现(1)

偏微分方程数值实验报告及算法实现(1)

偏微分方程数值实验报告一实验题目:利用有限差分法求解.0)1(,0)1(),()()(==-=+''-u u x f x u x u 真解为)1()(22x ex u x -=-实现算法:对于两点边值问题 ,)(,)(,,d 22βα==∈=-b u a u l x f dxu (1) 其中),(b a l =f b a ),(<为],[b a l =上的连续函数,βα,为给定常数.其相应的有限差分法的算法如下:1.对求解区域做网格剖分,得到计算网格.在这里我们对区间l 均匀剖分n 段,每个剖分单元的剖分步长记为na b h -=. 2.对微分方程中的各阶导数进行差分离散,得到差分方程.运用的离散方法有:方法一:用待定系数和泰勒展开进行离散)()()()(d )(d 111122++--++≈i i i i i i i i x u x u x u x x u ααα 方法二:利用差商逼近导数21122)()(2)()(d )(d h x u x u x u x x u i i i i i -++-≈ (2) 将(2)带入(1)可以得到)()()()(2)(211u R x f hx u x u x u i i i i i +=+---+, 其中)(u R i 为无穷小量,这时我们丢弃)(u R i ,则有在i x 处满足的计算公式:1,...,1)()()(2)(211-==+---+n i x f hx u x u x u i i i i , (3) 3.根据边界条件,进行边界处理.由(1)可得βα==n u u ,0 (4)称(3)(4)为逼近(1)的差分方程,并称相应的数值解向量1-n U 为差分解,i u 为)(i x u 的近似值.4.最后求解线性代数方程组,得到数值解向量1-n U .程序代码:第一步:编写有限差分格式相关函数function [ x,U ]=FDld_bvp(N,f,a,b,u)%******************************************************************** %% FD1d_bvp利用中心差分格式求解两点边值问题%参数:% 输入参数:% 整数N,网格节点数,% 函数f(x),计算右端函数f(x);% a,计算区间左端点% b,计算区间右端点% u,真解函数% 输出参数:% 差分解向量U% 均匀剖分区间[a,b],得到网格x(i)=a+(i-1)*(b-a)/(N-1)h=(b-a)/(N-1);x=(a:h:b)';% 创建线性差分方程组系数矩阵c1=-1/h/h;c2=2/h/h+1;g=[c1*ones(1,N-2),0];c=[0,c1*ones(1,N-2)];d=[1,c2*ones(1,N-2),1];A=diag(g,-1)+diag(d)+diag(c,1);% 创建线性差分方程组右端项rhs=f(x);rhs(1)=u(x(1));rhs(N)=u(x(N));% 求解上述代数系统U=A\rhs;endfunction[e0,e1,emax]=FD1d_error(x,U,u_exact)%% FD1d_ERROR 计算有限差分误差% 参数:% 输入参数:% x,网格节点坐标向量% U,网格节点坐标向量上的有限差分数值解向量Ux% u_exact,真解函数% 输出参数:% e0% e1% emaxN=length(x);h=(x(end)-x(1))/(N-1);ue=u_exact(x);%真解在网格点处的值xee=ue-U;e0=h*sum(ee.^2);e1=sum((ee(2:end)-ee(1:end-1)).^2)/h;e1=e1+e0;e0=sqrt(e0);e1=sqrt(e1);emax=max(abs(ue-U));endfunction FD1d_bvp_test%%测试脚本% 初始化相关数据N=[6,11,21,41,81];L=-1;R=1;emax=zeros(5,1);e0=zeros(5,1);e1=zeros(5,1);%%求解并计算误差for i = 1:5[x,U] =FD1d_bvp(N(i),@f ,L,R,@u);[e0(i),e1(i),emax(i)]=FD1d_error(x,U,@u);X{i}=x;UN{i}=U;endue=u(X{5});%% 显示真阶及不同网格剖分下的数值解plot(X{5},ue,'-k*',X{1},UN{1},'-ro',X{2},...UN{2},'-gs',X{3},UN {3},'-bd ',...X{4},UN{4},'-ch ',X{5} , UN {5},'-mx');title('The solution plot');xlabel('x');ylabel ('u');legend('exact','N=6','N =11','N=21','N =41','N =81'); %% 显示误差format shortedisp ('emax e0 e1 ');disp ([ emax , e0 , e1 ]);end第二步:编写方程的右端函数和真解分别保存为m f .和m u . function f=f(x)f=exp(-x.^2).*(4.*x.^4-15.*x.^2+5);endfunction u=u(x)u=exp(-x.^2).*(1-x.^2);end实验结果:在命令窗口输入>> FD1d_bvp_test回车可得运算结果和图像emax e0 e15.8219e-02 5.3470e-02 1.1724e-011.5919e-02 1.2802e-022.9349e-023.9305e-03 3.1663e-03 7.3357e-039.7959e-04 7.8946e-04 1.8338e-032.4471e-04 1.9723e-04 4.5844e-04。

微分方程的边值问题【最新】

微分方程的边值问题【最新】

微分方程边值问题的数值方法本部分内容只介绍二阶常微分方程两点边值问题的的打靶法和差分法。

二阶常微分方程为(,,),y f x y y a x b '''=≤≤(1.1)当(,,)f x y y '关于,y y '为线性时,即(,,)()()()f x y y p x y q x y r x ''=++,此时(1.1)变成线性微分方程()()(),y p x y q x y r x a x b '''--=≤≤(1.2)对于方程(1.1)或(1.2),其边界条件有以下3类: 第一类边界条件为(),()y a y b αβ==(1.3)当0α=或者0β=时称为齐次的,否则称为非齐次的。

第二类边界条件为(),()y a y b αβ''==(1.4)当0α=或者0β=时称为齐次的,否则称为非齐次的。

第三类边界条件为0101()(),()()y a y a y b y b ααββ''-=+=(1.5)其中00000,0,0αβαβ≥≥+>,当10α=或者10β=称为齐次的,否则称为非齐次的。

微分方程(1.1)或者(1.2)附加上第一类,第二类,第三类边界条件,分别称为第一,第二,第三边值问题。

1 打靶法介绍下面以非线性方程的第一类边值问题(1.1)、(1.3)为例讨论打靶法,其基本原理是将边值问题转化为相应的初值问题求解。

【原理】假定()y a t '=,这里t 为解()y x 在x a =处的斜率,于是初值问题为(,,)()()y f x y y y a y a t α'''=⎧⎪=⎨⎪'=⎩(1.6)令z y '=,上述二阶方程转化为一阶方程组(,,)()()y zz f x y z y a z a tα'=⎧⎪'=⎪⎨=⎪⎪=⎩ (1.7)原问题转化为求合适的t ,使上述初值问题的解(,)y x t 在x b =的值满足右端边界条件(,)y b t β=(1.8)这样初值问题(1.7)的解(,)y x t 就是边值问题(1.1)、(1.3)的解。

微分方程数值解法实验报告

微分方程数值解法实验报告

微分方程数值解法实验报告实验题目:数值解微分方程的实验研究引言:微分方程是描述自然现象、科学问题和工程问题中变量之间的关系的重要数学工具。

然而,大部分微分方程很难找到解析解,因此需要使用数值方法来近似求解。

本实验旨在研究数值解微分方程的方法和工具,并通过实验验证其有效性和准确性。

实验步骤:1.了解微分方程的基本概念和求解方法,包括欧拉法、改进的欧拉法和龙格-库塔法。

2. 配置实验环境,准备实验所需的工具和软件,如Python编程语言和相关数值计算库。

3.选择一种微分方程进行研究和求解,可以是一阶、二阶或更高阶的微分方程。

4.使用欧拉法、改进的欧拉法和龙格-库塔法分别求解选定的微分方程,并比较其结果的准确性和稳定性。

5.计算数值解与解析解之间的误差,并进行误差分析和讨论。

6.对比不同数值解法的性能,包括计算时间和计算精度。

7.结果展示和总结,根据实验结果对数值解方法进行评价和选取。

实验结果:以一阶线性常微分方程为例,我们选择经典的“衰减振荡”问题进行实验研究。

该问题的微分方程形式为:dy/dt = -λy其中,λ为正实数。

我们首先使用Python编程语言实现了欧拉法、改进的欧拉法和龙格-库塔法。

进一步,我们选择了λ=0.5和初始条件y(0)=1,使用这三种数值解法求解该微分方程,并比较结果的准确性。

通过对比数值解和解析解可以发现,在短时间内,欧拉法、改进的欧拉法和龙格-库塔法的结果与解析解非常接近。

但随着时间的增加,欧拉法的结果开始偏离解析解,而改进的欧拉法和龙格-库塔法仍然能够提供准确的近似解。

这是因为欧拉法采用线性逼近的方式,误差随着步长的增加而累积,而改进的欧拉法和龙格-库塔法采用更高阶的逼近方式,可以减小误差。

为了更直观地比较不同方法的性能,我们还计算了它们的计算时间。

实验结果显示,欧拉法计算时间最短,而龙格-库塔法计算时间最长。

这表明在计算时间要求较高的情况下,可以选择欧拉法作为数值解方法。

打靶法求边值问题..

打靶法求边值问题..

本科毕业论文(设计)论文(设计)题目:打靶法求边值问题学院:理学院专业:数学应用数学班级:091学号:**********学生姓名:***指导教师:***2013年4月21日打靶法求边值问题目录摘要: (1)引言: (2)第一章常微分方程初值问题的解法 (3)1.1 常微分方程的离散化_________________________________________ 31.2 欧拉(Euler)方法___________________________________________ 41.3 改进的Euler方法____________________________________________ 61.4 龙格—库塔(Runge—Kutta)方法 _____________________________ 71.5 4阶龙格—库塔公式 __________________________________________ 91.6 线性多步法_________________________________________________ 9第二章边值问题的数值解法 (11)2.1 打靶法____________________________________________________ 112.2 差分法____________________________________________________ 15 第三章Matlab数值解 (166)3.1 常微分方程的解法_________________________________________ 1663.2 打靶法的matlab实现_______________________________________ 23致谢: (27)主要参考文献 (27)摘要常微分方程在很多领域都有非常重要的应用,然而很多常微分方程的解是无法用解析解写出的,因而要借助于数值方法。

微分方程数值方法实验报告

微分方程数值方法实验报告

一、实验题目(1)用Ritz-Galerkin 方法求解边值问题)10(0)1()0(''<<⎩⎨⎧==-=+x u u x u u精确解x xu -=1sin sin * (2)用有限元方法求解⎩⎨⎧==+=+-0)1()0()sin()1(2''u u x u u ππ)sin(*x u π= 二、实验目的运用MATLAB 数学软件编写Ritz-Galerkin 方法和有限元方法程序,进一步熟悉MATLAB的应用及掌握偏微分方程数值方法中Ritz-Galerkin 方法和有限元方法,对各个方法求解精度进一步明确。

三、实验原理(1)Ritz-Galerkin 方法Ritz 方法设给出二次泛函),(,21)(v F v v A v J -=)( (1)其中)(v v A ,是Hilbert 空间V 上的双线性泛函,而且满足对称性、有界性、正定性;)(v F 是V 上的有界线性泛函。

考虑一下变分问题:V v ∈求满足).(min )(v J u J Vv ∈= (2)设Hilbert 空间V 是可分的,即V 中有可数多个元素构成一个稠密集。

在V 中取N 个线性无关的元素N ϕϕϕ,...,,21,他们张成一个N 维子空间N S ,即},...,;|{11为实数N Ni i i N c c c v v S ∑===ϕ,或记成},...,,{21N N span S ϕϕϕ=。

(3)上述元素N ϕϕϕ,...,,21称为空间N S 的基.用N S 代替V ,在NS 上求泛函)(u J 的极小,即求NN S u ∈满足).(min )(v J u J NS v N ∈= (4)显然,原先的变分问题(2)与后面的变分问题(4)是不同的,他们的解Nu u 与也是不同的。

如果V 的子空间NS 充分接近V ,那么,用NS 代替V 而得到的解Nu 也就充分接近u ,从而把Nu 作为原变分问题的近似解,亦即把无穷维空间V 中的极值问题近似为有限维空间NS 中的极值问题,这就是Ritz 方法得基本思想。

(完整版)常微分方程组(边值)

(完整版)常微分方程组(边值)

常微分方程组边值问题解法打靶法Shooting Method (shooting.m )%打靶法求常微分方程的边值问题function [x,a,b,n]=shooting(fun,x0,xn,eps)if nargin<3eps=1e-3;endx1=x0+rand;[a,b]=ode45(fun,[0,10],[0,x0]');c0=b(length(b),1);[a,b]=ode45(fun,[0,10],[0,x1]');c1=b(length(b),1);x2=x1-(c1-xn)*(x1-x0)/(c1-c0);n=1;while (norm(c1-xn)>=eps & norm(x2-x1)>=eps)x0=x1;x1=x2;[a,b]=ode45(fun,[0,10],[0,x0]');c0=b(length(b),1);[a,b]=ode45(fun,[0,10],[0,x1]');c1=b(length(b),1)x2=x1-(c1-xn)*(x1-x0)/(c1-c0);n=n+1;endx=x2;应用打靶法求解下列边值问题:()()⎪⎪⎩⎪⎪⎨⎧==-=010004822y y y dxy d解:将其转化为常微分方程组的初值问题()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧==-==t dx dy y y y dx dy y dx dy x 0011221048命令:x0=[0:0.1:10];y0=32*((cos(5)-1)/sin(5)*sin(x0/2)-cos(x0/2)+1); 真实解plot(x0,y0,'r')hold on[x,y]=ode45('odebvp',[0,10],[0,2]');plot(x,y(:,1))[x,y]=ode45('odebvp',[0,10],[0,5]');plot(x,y(:,1))[x,y]=ode45('odebvp',[0,10],[0,8]');plot(x,y(:,1))[x,y]=ode45('odebvp',[0,10],[0,10]');plot(x,y(:,1))函数:(odebvp.m)%边值常微分方程(组)函数function f=odebvp(x,y)f(1)=y(2);f(2)=8-y(1)/4;f=[f(1);f(2)];命令:[t,x,y,n]=shooting('odebvp',10,0,1e-3)计算结果:(eps=0.001)t=11.9524plot(x,y(:,1))x0=[0:1:10];y0=32*((cos(5)-1)/sin(5)*sin(x0/2)-cos(x0/2)+1); hold onplot(x0,y0,’o’)有限差分法Finite Difference Methods FDM (difference.m )同上例:4822y dx y d -=⇒482211i i i i y h y y y -=+--+ 2121842h y y h y i i i =+⎪⎪⎭⎫ ⎝⎛--+- 若划分为10个区间,则: ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎪⎪⎭⎫ ⎝⎛--⎪⎪⎭⎫ ⎝⎛--⎪⎪⎭⎫ ⎝⎛--⎪⎪⎭⎫ ⎝⎛----08880842114211421142222212212222h h h h y y y y h h h h n n M M O O O函数:(difference.m )%有限差分法求常微分方程的边值问题function [x,y]=difference(x0,xn,y0,yn,n)h=(xn-x0)/n;a=eye(n-1)*(-(2-h^2/4));for i=1:n-2a(i,i+1)=1;a(i+1,i)=1;endb=ones(n-1,1)*8*h^2;b(1)=b(1)-0;b(n-1)=b(n-1)-0;yy=a\b;x(1)=x0;y(1)=y0;for i=2:nx(i)=x0+(i-1)*h;y(i)=yy(i-1);endx(n)=xn;y(n)=yn;命令:[x,y]=difference(0,10,0,0,100);计算结果:x0=[0:0.1:10];y0=32*((cos(5)-1)/sin(5)*sin(x0/2)-cos(x0/2)+1); 真实解plot(x0,y0,'r')hold on[x,y]=difference(0,10,0,0,5);plot(x,y,’.’)[x,y]=difference(0,10,0,0,10);plot(x,y,’--’)[x,y]=difference(0,10,0,0,50);plot(x,y,’-.’)正交配置法Orthogonal Collocatioin Methods CM构造正交矩阵函数(collmatrix.m)%正交配置矩阵(均用矩阵法求对称性与非对称性正交配置矩阵)function [am,bm,wm,an,bn,wn]=collmatrix(a,m,fm,n,fn)x0=symm(a,m,fm); %a为形状因子;m为零点数;fm为对称的权函数(0为权函数1,非0为权函数1-x^2)for i=1:mxm(i)=x0(m+1-i);endxm(m+1)=1;for j=1:m+1for i=1:m+1qm(j,i)=xm(j)^(2*i-2);cm(j,i)=(2*i-2)*xm(j)^(2*i-3);dm(j,i)=(2*i-2)*(2*i-3+(a-1))*xm(j)^(2*i-3+(a-1)-1-(a-1));endfmm(j)=1/(2*j-2+a);endam=cm*inv(qm);bm=dm*inv(qm);wm=fmm*inv(qm);x1=unsymm(n,fn); %n为零点数;fn为非对称的权函数(0为权函数1,非0为权函数1-x) xn(1)=0;for i=2:n+1xn(i)=x1(n+2-i);endxn(n+2)=1;for j=1:n+2for i=1:n+2qn(j,i)=xn(j)^(i-1);if j==0 | i==1cn(j,i)=0;elsecn(j,i)=(i-1)*xn(j)^(i-2);endif j==0 | i==1 | i==2dn(j,i)=0;elsedn(j,i)=(i-2)*(i-1)*xn(j)^(i-3);endendfnn(j)=1/j;endan=cn*inv(qn);bn=dn*inv(qn);wn=fnn*inv(qn);%正交多项式求根(适用于对称问题)function p=symm(a,m,fm) %a为形状因子,m为配置点数,fm为权函数for i=1:mc1=1;c2=1;c3=1;c4=1;for j=0:i-1c1=c1*(-m+j);if fm==0c2=c2*(m+a/2+j);%权函数为1elsec2=c2*(m+a/2+j+1);%权函数为1-x^2endc3=c3*(a/2+j);c4=c4*(1+j);endp(m+1-i)=c1*c2/c4/c3;endp(m+1)=1;%为多项式系数向量,求出根后对对称问题还应开方才是零点p=sqrt(roots(p));%正交多项式求根(适用于非对称性问题)function p=unsymm(n,fn)if fn==0r(1)=(-1)^n*n*(n+1);%权函数为1elser(1)=(-1)^n*n*(n+2);%权函数为1-xendfor i=1:n-1if fn==0r(i+1)=(n-i)*(i+n+1)*r(i)/(i+1)/(i+1);%权函数为1elser(i+1)=(n-i)*(i+n+2)*r(i)/(i+1)/(i+1);%权函数为1-xendendfor j=1:np(n+1-j)=(-1)^(j+1)*r(j);endp(n+1)=(-1)^(n+1);p=roots(p);应用正交配置法求解以下等温球形催化剂颗粒内反应物浓度分布,其浓度分布的数学模型为:⎪⎪⎪⎩⎪⎪⎪⎨⎧=====⎪⎭⎫ ⎝⎛S C C r dr dC r R C dr dC r dr d r ,10,0361222 解:(1)标准化令R r x /=,S C C y /=代入微分方程及边界条件得:⎪⎪⎪⎩⎪⎪⎪⎨⎧=====⎪⎭⎫ ⎝⎛1,10,036122y x dx dy x y dx dy x dx d x(2)离散化03611=-∑+=j N i i ji y y B1,2,1+=N j Λ(3)转化为代数方程组(以3=N 为例)⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----000036363636432144434241343332312423222114131211y y y y B B B B B B B B B B B B B B B B 因为141==+y y N ,所以整理上式得:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡+----=⎥⎥⎦⎤⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---3636363644342414321434241333231232221131211B B B B y y y B B B B B B B B B B B B 本例中的代数方程组为线性方程组,可采用线性方程组的求解方法;若为非线性方程组则采用相应的方法求解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西京学数学软件实验任务书
实验二十七实验报告
一、实验名称:微分方程组边值问题数值算法(打靶法,有限差分法)。

二、实验目的:进一步熟悉微分方程组边值问题数值算法(打靶法,有限差分法)。

三、实验要求:运用Matlab/C/C++/Java/Maple/Mathematica 等其中一种语言完成程序设计。

四、实验原理:
1.打靶法:
对于线性边值问题
⎩⎨⎧==∈=+'+''βα)(,)(],[)()()(b y a y b a x x f y x q y x p y (1)
假设L 是一个微分算子使:()()Ly y p x y q x y '''=++
则可得到两个微分方程:
)(1x f Ly =,α=)(1a y ,0)(1='a y
⇔)()()(111
x f y x q y x p y =+'+'',α=)(1a y ,0)(1='a y (2) 02=Ly ,0)(2=a y ,1)(2
='a y ⇔0)()(222
=+'+''y x q y x p y ,0)(2=a y ,1)(2='a y (3) 方程(2),(3)是两个二阶初值问题.假设1y 是问题(2)
的解,2y 是问题(3)的解,且2()0y b ≠,则线性边值问题(1)的解为:1122()
()()()()y b y x y x y x y b β-=+ 。

2.有限差分法:
基本思想是把连续的定解区域用有限个离散点构成的网格来代替,这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似, 积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组 , 解此方程组就可以得到原问题在离散点上的近似解。

然后再利用插值方法便可以从离散解得到定解问题在整个区域上的近似解。

五、实验内容:
%线性打靶法
function
[k,X,Y,wucha,P]=xxdb(dydx1,dydx2,a,b,alpha,beta,h) n=fix((b-a)/h); X=zeros(n+1,1); CT1=[alpha,0];
Y=zeros(n+1,length(CT1)); Y1=zeros(n+1,length(CT1)); Y2=zeros(n+1,length(CT1));
X=a:h:b;
Y1(1,:)= CT1;
CT2=[0,1];Y2(1,:)= CT2;
for k=1:n
k1=feval(dydx1,X(k),Y1(k,:))
x2=X(k)+h/2;y2=Y1(k,:)'+k1*h/2;
k2=feval(dydx1,x2,y2);
k3=feval(dydx1,x2,Y1(k,:)'+k2*h/2);
k4=feval(dydx1, X(k)+h,Y1(k,:)'+k3*h);
Y1(k+1,:)=Y1(k,:)+h*(k1'+2*k2'+2*k3'+k4')/6,k=k+1;
end
u=Y1(:,1)
for k=1:n
k1=feval(dydx2,X(k),Y2(k,:))
x2=X(k)+h/2;y2=Y2(k,:)'+k1*h/2;
k2=feval(dydx2,x2,y2);
k3=feval(dydx2,x2,Y2(k,:)'+k2*h/2);
k4=feval(dydx2, X(k)+h,Y2(k,:)'+k3*h);
Y2(k+1,:)=Y2(k,:)+h*(k1'+2*k2'+2*k3'+k4')/6,k=k+1;
end
v=Y2(:,1)
Y=u+(beta-u(n+1))*v/v(n+1)
for k=2:n+1
wucha(k)=norm(Y(k)-Y(k-1)); k=k+1;
end
X=X(1:n+1);Y=Y(1:n+1,:);k=1:n+1;wucha=wucha(1:k,:);
P=[k',X',Y,wucha'];
plot(X,Y(:,1),'ro',X,Y1(:,1),'g*',X,Y2(:,1),'mp')
xlabel('轴\it x'); ylabel('轴\it y')
legend('是边值问题的数值解y(x)的曲线','是初值问题1的数值解u(x)的曲线', '是初值问题2的数值解v(x)的曲线')
title('用线性打靶法求线性边值问题的数值解的图形')
%有限差分法
function
[k,A,B1,X,Y,y,wucha,p]=yxcf(q1,q2,q3,a,b,alpha,beta,h) n=fix((b-a)/h); X=zeros(n+1,1);
Y=zeros(n+1,1); A1=zeros(n,n);
A2=zeros(n,n); A3=zeros(n,n); A=zeros(n,n);B= zeros(n,1);
for k=1:n
X=a:h:b;
k1(k)=feval(q1,X(k)); A1(k+1,k)=1+h*k1(k)/2;
k2(k)=feval(q2,X(k));
A2(k,k)=-2-(h.^2)*k2(k);
A3(k,k+1)= 1-h*k1(k)/2; k3(k)=feval(q3,X(k));
end
for k=2:n
B(k,1)=(h.^2)*k3(k);
end
B(1,1)=(h.^2)*k3(1)-(1+h*k1(1)/2)*alpha;
B(n-1,1)=(h.^2)*k3(n-1)-(1+h*k1(n-1)/2)*beta;
A=A1(1:n-1,1:n-1)+A2(1:n-1,1:n-1)+A3(1:n-1,1:n-1);
B1=B(1:n-1,1);
Y=A\B1;Y1=Y'; y=[alpha;Y;beta];
for k=2:n+1
wucha(k)=norm(y(k)-y(k-1)); k=k+1;
end
X=X(1:n+1); y=y(1:n+1,1); k=1:n+1;
wucha=wucha(1:k,:); plot(X,y(:,1),'mp')
xlabel('轴\it x'); ylabel('轴\it y'),legend('是边值问题的数值解y(x)的曲线')
title('用有限差分法求线性边值问题的数值解的图形'),
p=[k',X',y,wucha'];。

相关文档
最新文档