实验5 常微分方程初值问题和矩阵特征值的计算
常微分方程的初值问题及其解法

常微分方程的初值问题及其解法常微分方程是自然界中各种变化的基础模型,广泛应用于物理、工程、生物、经济学等领域。
初值问题是其中最基本的问题之一。
本文将从初值问题的意义入手,介绍几种不同的数值解法,并评价其优缺点。
1. 初值问题的意义首先,我们来看一个简单的例子。
假设有一个人从一楼的窗户往下跳,忽略空气阻力,我们可以列出他下落的物理规律:$$\frac{d^2h}{dt^2}=g$$其中$h$是跳下来后距离地面的高度,$t$是时间,$g$是常数,表示重力加速度。
上面这条式子就是一个二阶常微分方程。
我们的问题是,如果知道了他的初速度$v_0$和起始高度$h_0$,能否求得他下落到地面时的时间和高度。
这个例子中,$h$和$t$都是连续的量,但是我们并不能解析地求出$h(t)$的解析式,因此需要用数值方法去近似求解。
这就是初值问题的意义。
通常,初值问题是指某一初始时刻$t_0$的初值:$$y'(t_0)=f(y(t_0),t_0),\ y(t_0)=y_0$$其中$y$是未知函数,而$f$则是已知函数。
对于一阶常微分方程,这个条件是充分的,可以唯一地决定一个解。
但是对于更高阶的常微分方程,则需要多个初始条件才能确定一个解。
然而,这已经超出了本文的范畴,这里只讨论一阶常微分方程的初值问题。
2. 数值解法下面将介绍几种常见的数值解法。
2.1. 欧拉法欧拉法是最简单的数值解法之一,其思路是将初值问题离散化。
具体来说,我们可以将时间$t$分成若干个小段,每段的长度为$\Delta t$。
于是,我们可以将初始时刻$t_0$的初始值$y(t_0)=y_0$,并通过欧拉法近似计算下一个时间点$t_0+\Delta t$的值$y_1$:$$y_1=y_0+f(y_0,t_0)\Delta t$$同理,我们可以通过已知的$y_1$和$t_1=t_0+\Delta t$,计算下一个时间点$t_2=t_0+2\Delta t$的值$y_2$:$$y_2=y_1+f(y_1,t_1)\Delta t$$依此类推,直到我们得到一个目标时间$t_m$的值$y_m$。
常微分方程初值问题的解法及应用

常微分方程初值问题的解法及应用常微分方程是数学中非常重要的一部分,它涉及了许多领域的模型建立和问题求解。
本文将介绍常微分方程初值问题的解法及其应用。
一、常微分方程初值问题的定义常微分方程初值问题是指给定一个常微分方程,以及它在某一点上的初始条件,求解该方程的解曲线。
通常,一个常微分方程初值问题可以表示为:y'(x) = f(x,y), y(x0) = y0,其中,y(x)是未知函数,f(x,y)是已知函数,y(x0) = y0是初始条件。
二、常微分方程初值问题的解法常微分方程初值问题的解法有多种,下面我们将介绍几种常用的方法。
1.欧拉法欧拉法是最简单的一种求解常微分方程初值问题的方法。
该方法基于初始条件,通过不断迭代计算得到近似解曲线。
具体步骤如下:步骤1:设定步长h,确定求解区间[x0, xn],计算步数n。
步骤2:初始化,即确定初始点(x0, y0)。
步骤3:根据方程dy/dx = f(x,y)和初始点(x0, y0),计算斜率k = f(x0, y0)。
步骤4:根据已知的斜率和步长h,计算下一个点的坐标(xi+1,yi+1)。
步骤5:重复步骤3和步骤4,直到达到步数n。
步骤6:得到近似解曲线。
2.改进的欧拉法(改进欧拉法)改进的欧拉法是对欧拉法的改进,其求解精度比欧拉法更高。
具体步骤如下:步骤1:设定步长h,确定求解区间[x0, xn],计算步数n。
步骤2:初始化,即确定初始点(x0, y0)。
步骤3:根据方程dy/dx = f(x,y)和初始点(x0, y0),计算斜率k1 =f(x0, y0)。
步骤4:根据已知的斜率k1和步长h/2,计算中间点的坐标(x0+h/2, y0+k1*h/2)。
步骤5:根据方程dy/dx = f(x,y)和中间点的坐标(x0+h/2, y0+k1*h/2),计算斜率k2= f(x0+h/2, y0+k1*h/2)。
步骤6:根据已知的斜率k2和步长h,计算下一个点的坐标(xi+1,yi+1)。
常微分方程的初值问题

常微分方程的初值问题常微分方程是研究自变量(通常是时间)及其导数之间关系的数学分支。
它在物理、化学、生物学等学科中都有广泛应用,因此被视为数学的基础学科之一。
其中的求解方法之一便是初值问题。
初值问题是指对于一个已知的微分方程,给定初始条件的问题。
初始条件通常包括一个或多个自变量和导数值,根据这些条件可以求解出微分方程的解析解或近似解。
此外,初始条件还可以帮助我们理解微分方程的性质和行为。
举个例子,我们考虑一个简单的问题:假设一个物体在空气中运动,其速度随时间的变化可以用常微分方程来描述。
则其方程可以写作:m * dv/dt = mg - kv^2其中m为物体质量,g为重力加速度,k是空气阻力系数,v表示速度。
将初始条件加入其中,例如初始速度v0为0,则此时可以解出运动中物体的速度v(t)对时间的表达式。
对于初值问题的求解方法,数值和解析方法皆有。
解析方法主要是利用微积分和代数技巧,将微分方程推导为一般的解析表达式。
然而,这种方法需要一定的条件和技巧,因而在实际问题中应用范围较为有限。
数值方法则是更为通用和普遍的求解方法。
在此方法中,将微分方程转化为差分方程,即将导数近似为差分式,再结合初始条件用数值计算方法进行求解,得到问题的数值解。
这种方法的优点在于求解过程简单明了,且由于近似误差可以任意小,因此可得出足够精确的解。
常用的数值方法有欧拉法、龙格-库塔法等。
其中欧拉法是最简单的一种数值方法,其核心思想是用线性近似代替导数,即将微分方程中的导数写成差商形式,于是可以得到如下迭代公式:y(i+1)=y(i)+hf(y(i), t(i))其中y(i)表示函数解在i时刻的估计值,t(i)表示时间,h为时间步长,f(y,t)为微分方程右端函数。
通过这种迭代方法即可用简单的计算机程序得到一个数值解。
在使用数值方法求解初值问题时,需注意初始条件的选取。
例如,在上述物体的运动例子中,我们可以选取物体在某一位置的速度为初始速度,而这个位置则可以是重心位置、发射点等。
常微分方程中的初值问题及解析解的求解

常微分方程中的初值问题及解析解的求解常微分方程是数学中重要的一个分支,它研究的是一类关于未知函数及其派生函数的方程。
其中,初值问题是求解常微分方程的一种基本方法,通过给定初始条件,计算出函数在这个初始点上的值,并逐步推算出函数在逐渐逼近所求解点上的值。
解析解是指能够通过代数或函数的方式得到的函数表达式或公式,它在常微分方程中起着重要的作用。
本文将通过详细的论述,探讨常微分方程中的初值问题及解析解的求解方法。
一、初值问题1.什么是初值问题初值问题是指,给定一个常微分方程及其初始条件,求该方程在初始点上的解,即求解函数在一个点的值。
通常,初值问题可以表示为:y' = f(x, y), y(x0) = y0其中,y'表示关于x的导数,f(x,y)表示一般的函数表达式,y(x0)表示在x0这一点上,函数y的值为y0。
2.求解初值问题的方法为了求解常微分方程的初值问题,我们需要利用数值方法和解析方法两种基本的求解方法。
数值方法是通过数值计算得出函数的数值近似解,它可以在一定程度上解决一些复杂的常微分方程。
具体来看,数值方法通常采用数值迭代等一系列计算方法,将x值串联起来,以近似解代替函数的实际值。
解析方法是指利用已知的数学方法求解常微分方程的解析解。
解析方法适合于求解简单的常微分方程。
解析解的求解通常渐近地得到表达式,这些表达式能够明确地刻画出注重解析的科学问题。
二、解析解的求解1. 一阶微分方程的求解对于一阶线性微分方程,可以采用分离变量的方法求解。
常见的分离变量方法表示为:dy/dx = f(x)g(y),其中f(x),g(y)都是与x 和y有关的函数,两边同时积分,就得到:∫1/g(y)dy = ∫f(x)dx有时,可以将一阶微分方程变形为某种特定的方程,从而得到解析解。
2. 二阶微分方程的求解二阶微分方程最常见的形式为y'' + p(x)y' + q(x)y = 0。
常微分方程初值问题的解法

常微分方程初值问题的解法随着科技的不断进步和人类社会的不断发展,工程技术和科学技术的发展已经成为推动社会进步的重要力量,而数学则是工程技术和科学技术的基础和支撑,常微分方程作为数学分支的重要组成部分,对于理论研究和实际应用都有着深远的影响。
在实际工程中,解决常微分方程初值问题是数学理论在抽象式运算与工程实践之间的重要桥梁。
本文将介绍常微分方程初值问题的概念、求解方法以及实际应用。
一、常微分方程初值问题的概念常微分方程是指未知函数一阶或高阶微商与自变量和常数的关系式,常微分方程初值问题是指在初值u(x0)=u0已知的情况下,确定函数u(x)的解的问题。
在初值问题中,自变量是独立变量,取值范围可以是任意实数,因变量是函数值,是依赖自变量而实现的数值,常数是影响函数变化的一些固定参数。
常微分方程模型经常出现在工程技术模型中,一些实际应用场景可以通过建立数学模型来进行求解。
二、常微分方程初值问题的解法常微分方程初值问题的解法大致可以分为两种,一种是解析解法,即直接利用微积分学知识对方程进行求解;另一种是数值解法,即采用数值方法对方程进行数值计算求解。
下面将分别介绍这两种方法的解法原理。
1. 解析解法解析解法是指通过数学工具对函数解析表达式进行研究,以求出常微分方程的解。
该方法的先决条件是对方程具有严格的内部结构和特殊的形式,只有在特殊情况下才能找到一些特解。
这种方法的难点在于方程方程形式和初始条件可能存在巨大的数学难度,解析解的求解需要求解一些解析式的积分、微分和级数。
往往只有在一些特殊情况下,解析解法才能一般性的解决问题,因此该方法的适用场景相对较少。
2. 数值解法数值解法是指通过数值计算的方法,通过有限个代数运算和计算机模拟的方法得出方程的解。
数值解法的优点是具有广泛的适用性,可以有效地求解各种类型的常微分方程初值问题,使得无法通过解析方法求解的问题也可以得到解答。
数值解法可分为无条件稳定和条件稳定两种情况,前者是指方法不会出现不稳定结果的情况,而后者则保证了方法收敛性的同时,存在一定的条件限制。
实验五 常微分方程初值问题数值解法

佛山科学技术学院实 验 报 告课程名称 数值分析实验项目 常微分方程问题初值问题数值解法专业班级 姓 名 学 号指导教师 陈剑 成 绩 日 期一. 实验目的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 个点的值,与准确解25031)(x e x y x +=-比较,并列表写出在x=0.2,0.5,0.8处,对于不同步长h 下的误差,讨论同一节点处,误差随步长的变化规律。
(c )用Matlab 绘图函数绘制(2)的精确解和近似解的图形。
四、实验结果五、讨论分析六、改进实验建议。
第五章 常微分方程初值问题数值解法

则有
yn 1 yn hf ( xn , yn )
( 5.2 ) Euler格式
例5.1 用Euler格式解初值问题
2x y y y y (0) 1
取步长h=0.1.
(0 x 1)
Euler格式的具体形式为
y n 1 y n hf ( x n , y n ) 2 xn yn 0.1( yn ) yn 0.2 xn 1.1 yn yn
计算公式的精度 常以Taylor展开为工具来分析计算公式的精度. 为简化分析,假定yn是准确的,即在 yn y ( xn ) 的前提下估计误差 y ( xn 1 ) yn 1 Euler格式的局部截断误差 由 从而 局部截断误差
f ( xn , yn ) f ( xn , y ( xn )) y '( xn ) y ( xn 1 ) yn 1 y ( xn 1 ) ( yn hf ( xn , yn )) y ( xn 1 ) y ( xn ) hy '( xn )
y ( xn ), y ( xn 1 ), 的近似值 y1 , y2 , , yn , yn 1 ,
相邻两个节点的间距 h xi 1 xi 称为步长,步 长可以相等,也可以不等.本章总是假定h为定数, 称为定步长,这时节点可表示为
xn x0 nh , n 0,1, 2,
由f ( xn 1 , yn 1 ) f ( xn 1 , y ( xn 1 )) f y ( xn 1 , )( yn 1 y ( xn 1 )) f ( xn 1 , y ( xn 1 )) y '( xn 1 )(在xn点Taylor展开) h2 y '( xn ) hy ''( xn ) y '''( xn ) ... 2 3 2 h h 因此yn 1 y ( xn ) hy '( xn ) y ''( xn ) y '''( xn ) 2 4 h f y ( xn 1 , )( yn 1 y ( xn 1 )) 2 h2 h3 y ( xn 1 ) y ( xn ) hy '( xn ) y ''( xn ) y '''( xn ) 2 3!
初等解法 常微分方程 带初值的解公式

初等解法常微分方程带初值的解公式
我们要找出一个常微分方程的初等解法,并给出带初值的解公式。
首先,我们需要明确什么是常微分方程。
常微分方程是描述一个函数关于时间变化的数学模型,形式为 y' = f(t, y)。
其中,y 是我们要找的函数,f 是已知的函数,t 是时间。
假设我们的常微分方程是 y' = f(t, y),并且给定初始条件 y(t0) = y0。
为了找到这个方程的解,我们可以使用初等解法。
初等解法通常包括分离变量法、变量代换法、积分因子法等。
对于给定的方程和初始条件,我们可以使用以下步骤来找到解:
1. 首先,尝试使用分离变量法,将方程转化为 dy/dt = g(t) - h(y) 的形式。
2. 然后,尝试使用变量代换法,将方程转化为更容易求解的形式。
3. 最后,使用积分因子法来求解方程。
通过以上步骤,我们可以找到常微分方程的解。
解的形式通常为 y = y(t),其中 y 是我们要找的函数,t 是时间。
根据初等解法,我们可以得到常微分方程 y' = f(t, y) 的解为:
y = y(t) = ∫f(t, y) dt + C
其中,C 是积分常数,y 是我们要找的函数,t 是时间。
这个解公式包含了初始条件 y(t0) = y0,因此我们可以使用这个公式来求解给定初始条件的常微分方程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验5 常微分方程初值问题和矩阵特征值的计算
思考问题:欧拉折线法与泰勒级数法的关系是什么?如何把乘幂法变为反幂法来求解按模最小特征值?
答:欧拉折线法就是用一系列折线近似的代替曲线,欧拉折线法思想就是泰勒级数展开,其解得精度是差分步长的一阶精度。
泰勒公式展开是一种高阶显式一步法,理论上它具有任意阶精度;
把乘幂法变为反幂法来求解按模最小特征值的方法为该求方阵A 的逆矩阵
1-A ,乘幂法对应的模最大特征值λ取倒数为λ
1,变为模最小特征值,由此得到反幂法,可反复迭代:)1()(-=k k Ay y ,)1()(/-k k y y 收敛于A 的主特征值,)(k y 为对应的特征向量。
5.1 取步长2.0=h ,用显示欧拉法求⎩⎨⎧=--='1
)0(2
y xy y y 在6.0=x 处y 的近似值。
提示:循环3次,用3段折线来逼近函数y 。
运行结果为:
5.2 已知矩阵⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡=361641593642A ,用改进后的幂乘法求A 得主特征值及其对应的特征向量。
运行结果为:
程序代码
5.1
#include<stdio.h>
#include <conio.h>
#define MAXSIZE 50
double f(double x,double y);
void main(void)
{
double a,b,h,x[MAXSIZE],y[MAXSIZE];
long i,n;
printf("\nPlease input interval a,b:");
scanf("%lf,%lf",&a,&b);
printf("\nPlease input step length h:");
scanf("%lf",&h);
n=(long)((b-a)/h);
x[0]=a;
printf("\nPlease input the start point of x[0]=%lf ordinate y[0]:",x[0]); scanf("%lf",&y[0]);
for(i=0;i<n;i++)
{
x[i+1]=x[i]+h;
y[i+1]=y[i]+h * f(x[i],y[i]);
}
printf("\nThe calcuate result is:");
for(i=0;i<=n;i++)
printf("\nx[%ld]=%lf,y[%ld]=%lf",i,x[i],i,y[i]);
getch();
}
double f(double x,double y)
{
return(-y-x*y*y); /* Calcuate and return to function value f(x,y) */ }
5.2
#include<stdio.h>
#include <conio.h>
#include<math.h>
#define MAXSIZE 50
void input (double a[][MAXSIZE],double v[],long n);
void matrix_product (double a[][MAXSIZE],double u[],double v[],long n);
void normalization (double u[],double v[],long n,double * pm1);
void output (double v[],long n,double m1);
void main (void)
{
double a[MAXSIZE][MAXSIZE],u[MAXSIZE],v[MAXSIZE];
double epsilon,m0,m1;
long n,maxk,k;
printf("\nPlease input the square A's order number: ");
scanf("%ld",&n);
input(a,v,n);
printf("\nPlease input the max number of iteratings:");
scanf("%ld",&maxk);
printf("\nPlease input the main eigenvalue'sprecision:");
scanf("%lf",&epsilon);
matrix_product(a,u,v,n);
normalization(u,v,n,&m1);
for (k=1;k<=maxk;k++)
{
m0=m1;
matrix_product(a,u,v,n);
normalization(u,v,n,&m1);
if (fabs(m0-m1)<=epsilon)
break;
}
if (k<=maxk)
output (v,n,m1);
else
printf("\nThe number of iterations has the ultra limit."); }
/* A subroutine 1: Read in square A and the initial vector */
void input (double a[][MAXSIZE],double v[],long n)
{
long i,j;
printf("\nPlease input %ld order square A:\n",n);
for (i=0;i<=n-1;i++)
for (j=0;j<=n-1;j++)
scanf("%lf",&a[i][j]);
printf("\nPlease input the initial iterations vector:");
for (i=0;i<=n-1;i++)
scanf("%lf",&v[i]);
}
/* A subroutine 2: Calcuate U=AV */
void matrix_product (double a[][MAXSIZE],double u[],double v[],long n) {
long i,j;
for (i=0;i<=n-1;i++)
{
u[i]=0;
for (j=0;j<=n-1;j++)
u[i]+=a[i][j]*v[j];
}
}
/* A subroutine 3: To normalized the vector U’s length */
void normalization (double u[],double v[],long n,double * pm1)
{
long i;
*pm1=u[0];
for (i=1;i<=n-1;i++)
if(fabs(*pm1)<fabs(u[i]))
*pm1=u[i];
for (i=0;i<=n-1;i++)
v[i]=u[i]/(*pm1);
}
/* A subroutine 4: Output the result of calcuate */
void output (double v[],long n,double m1)
{
long i;
printf("\nThe square A's eigenvalue is about: %f",m1); printf("\nIts corresponding eigenvectors is about: \n"); for (i=0;i<=n-1;i++)
printf(" %lf",v[i]);
getch();
}。