实验4_数值积分与数值微分

实验4_数值积分与数值微分
实验4_数值积分与数值微分

数值分析实验报告四

数值积分与数值微分实验(2学时)

一 实验目的

1.掌握复化的梯形公式、Simpson 公式等牛顿-柯特斯公式计算积分。

2. 掌握数值微分的计算方法。

二 实验内容

1. 用复化梯形公式计算积分。

?9

0dx x M=8

2. 用复化Simpson 公式计算积分。

?

90dx x M=8 3. 给定下列表格值

利用四点式(n=3)求)50()50('''f f 和的值。

三 实验步骤(算法)与结果

1复化梯形公式

用C 语言编程如下:

#include

#include

/*被积函数的定义*/

float f(float x)

{

float y;

y=sqrt(x);

return y;

}

void main()

{

int i,m;

float a,b,h,r;

printf("输入等分数m:" );

scanf("%d",&m);

printf("输入区间左端点a的值:"); scanf("%f",&a);

printf("输入区间右端点b的值:"); scanf("%f",&b);

float x[m+1];

h=(b-a)/m;

for(i=0;i<=m;i++)

x[i]=a+i*h;

r=0;

for(i=0;i<=m;i++)

{if(i==0) r=r+h*0.5*f(x[i]);

if(i>0&&i

if(i==m) r=r+0.5*h*f(x[i]);

}

printf("输出区间[%3.1f %3.1f]的积分值:%f\n",a,b,r); }

求解结果如下:

输入等分数m:8

输入区间左端点a的值:0

输入区间右端点b的值:9

输出区间[0.0 9.0]的积分值:17.769514

2复化Simpson公式

用C语言编程如下:

#include

#include

/*被积函数的定义*/

float f(float x)

{

float y;

y=sqrt(x);

return y;

}

void main()

{

int i,m;

float a,b,h,r;

printf("输入等分数m:" );

scanf("%d",&m);

printf("输入区间左端点a的值:"); scanf("%f",&a);

printf("输入区间右端点b的值:"); scanf("%f",&b);

float x[m+1];

h=(b-a)/m;

for(i=0;i<=m;i++)

x[i]=a+i*h;

r=0;

for(i=0;i<=m;i++)

{if(i==0) r=r+h*f(x[i])/3;

if(i>0&&i

{ if(i%2==0)r=r+h*2*f(x[i])/3; else r=r+h*4*f(x[i])/3;

}

if(i==m) r=r+h*f(x[i])/3;

}

printf("输出区间[%3.1f %3.1f]的积分值:%f\n",a,b,r); }

求解结果如下:

输入等分数m:8

输入区间左端点a的值:0

输入区间右端点b的值:9

输出区间[0.0 9.0]的积分值:17.903139

3求导数值

用C语言编程如下:

#include

int n;

/*拉格朗日多项式函数的一阶导函数的定义*/

float g1(float *x,float *y,float z)

{

int i,j,k;

float r,m,s;

s=0;

for(i=0;i

{ m=0;

for(j=0;j

{if(j!=i)

{ r=1;

for(k=0;k

if(k!=i&&k!=j) r=r*(z-x[k]); m=m+r*y[i];

}

}

r=1;

for(j=0;j

if(j!=i)r=r*(x[i]-x[j]);

s=s+m/r;

}

return s;

}

/*拉格朗日多项式函数的二阶导函数的定义*/ float g2(float *x,float *y,float z)

{

int i,j,k,p;

float r,m,s,w;

s=0;

for(i=0;i

{

w=0;

for(j=0;j

{if(j!=i)

{

m=0;

for(k=0;k

{if(k!=i&&k!=j)

{ r=1;

for(p=0;p

if(p!=k&&p!=j&&p!=i)r=r*(z-x[p]); m=m+r*y[i];

}

}

w=w+m;

}

}

r=1;

for(j=0;j

if(j!=i)r=r*(x[i]-x[j]);

s=s+w/r;

}

return s;

}

void main()

{

int i,j;

float f1,x0,f2;

printf("输入节点数n:");

scanf("%d",&n);

float x[n],y[n];

printf("输入向量x:");

for(i=0;i

scanf("%f",&x[i]);

printf("输入向量y:");

for(i=0;i

scanf("%f",&y[i]);

printf("********************\n"); printf("输入1****求一阶导数\n"); printf("输入2****求二阶导数\n"); printf("********************\n"); printf("选择操作1-2:");

scanf("%d",&j);

switch(j)

{case 1:

printf("输入求导处的x:");

scanf("%f",&x0);

f1=g1(x,y,x0);

printf("x=%3.1f处的一阶导数值%f\n",x0,f1); break;

case 2:

printf("输入求导处的x:");

scanf("%f",&x0);

f2=g2(x,y,x0);

printf("x=%3.1f处的二阶导数值%f\n",x0,f2); break;

}

}

求解结果如下:

输入节点数n:4

输入向量x:50 55 60 65

输入向量y:1.6690 1.7404 1.7782 1.8129

********************

输入1****求一阶导数

输入2****求二阶导数

********************

选择操作1-2:1

输入求导处的x:50

x=50.0处的一阶导数值0.019673

输入节点数n:4

输入向量x:50 55 60 65

输入向量y:1.6990 1.7404 1.7782 1.8129 ********************

输入1****求一阶导数

输入2****求二阶导数

********************

选择操作1-2:2

输入求导处的x:50

x=50.0处的二阶导数值-0.000164

微分方程数值解实验报告

微分方程数值解法 课程设计报告 班级:_______ 姓名:___ 学号:__________ 成绩: 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、用有限元方法求下列边值问题的数值解:''()112x -y +y =2s i n ,0∈∈??∈(0,)?, 其中取1ν= 要求画出解曲面。迭代格式如下: 1221212111111111122142212n n n n n n j j j j j j n n n n n n j j j j j j V V V V V V h h V V V V V V h h τ++++++++++-+-??-()-()()-()??++?????? ??-+-+??=+??????

1、 %Ritz Galerkin方法求解方程 function u1=Ritz(x) %定义步长 h=1/100; x=0:h:1; n=1/h; a=zeros(n-1,1); b=zeros(n,1); c=zeros(n-1,1); d=zeros(n,1); %求解Ritz方法中内点系数矩阵 for i=1:1:n-1 b(i)=(1/h+h*pi*pi/12)*2; d(i)=h*pi*pi/2*sin(pi/2*(x(i)+h))/2+h*pi*pi/2*sin(pi/2*x(i+1))/2; end %右侧导数条件边界点的计算 b(n)=(1/h+h*pi*pi/12); d(n)=h*pi*pi/2*sin(pi/2*(x(i)+h))/2; for i=1:1:n-1 a(i)=-1/h+h*pi*pi/24; c(i)=-1/h+h*pi*pi/24; end %调用追赶法 u=yy(a,b,c,d) %得到数值解向量 u1=[0,u] %对分段区间做图 plot(x,u1) %得到解析解 y1=sin(pi/2*x); hold on plot(x,y1,'o') legend('数值解','解析解') function x=yy(a,b,c,d) n=length(b); q=zeros(n,1); p=zeros(n,1); q(1)=b(1); p(1)=d(1); for i=2:1:n

数值分析第四章数值积分与数值微分习题答案

第四章 数值积分与数值微分 1.确定下列求积公式中的特定参数,使其代数精度尽量高,并指明所构造出的求积公式所具有的代数精度: 101210121 12120 (1)()()(0)(); (2)()()(0)(); (3)()[(1)2()3()]/3; (4)()[(0)()]/2[(0)()]; h h h h h f x dx A f h A f A f h f x dx A f h A f A f h f x dx f f x f x f x dx h f f h ah f f h -----≈-++≈-++≈-++''≈++-?? ?? 解: 求解求积公式的代数精度时,应根据代数精度的定义,即求积公式对于次数不超过m 的多项式均能准确地成立,但对于m+1次多项式就不准确成立,进行验证性求解。 (1)若101(1) ()()(0)()h h f x dx A f h A f A f h --≈-++? 令()1f x =,则 1012h A A A -=++ 令()f x x =,则 110A h Ah -=-+ 令2 ()f x x =,则 3 221123 h h A h A -=+ 从而解得 011431313A h A h A h -?=?? ? =?? ?=?? 令3 ()f x x =,则 3()0h h h h f x dx x dx --==? ? 101()(0)()0A f h A f A f h --++=

令4()f x x =,则 455 1012()5 2 ()(0)()3 h h h h f x dx x dx h A f h A f A f h h ---== -++=? ? 故此时, 101()()(0)()h h f x dx A f h A f A f h --≠-++? 故 101()()(0)()h h f x dx A f h A f A f h --≈-++? 具有3次代数精度。 (2)若 21012()()(0)()h h f x dx A f h A f A f h --≈-++? 令()1f x =,则 1014h A A A -=++ 令()f x x =,则 110A h Ah -=-+ 令2 ()f x x =,则 3 2211163 h h A h A -=+ 从而解得 1143 8383A h A h A h -?=-?? ? =?? ?=?? 令3 ()f x x =,则 22322()0h h h h f x dx x dx --==? ? 101()(0)()0A f h A f A f h --++=

数值积分与数值微分实验报告

实验三 数值积分程序设计算法 1)实验目的 通过本次实验熟悉并掌握各种数值积分算法及如何在matlab 中通过设计程序实现这些算法,从而更好地解决实际中的问题。 2)实验题目 给出积分 dx x I ? -= 3 2 2 1 1 1.用Simpson 公式和N=8的复合Simpson 公式求积分的近似值. 2.用复合梯形公式、复合抛物线公式、龙贝格公式求定积分,要求绝对误差为 7 10*2 1-= ε,将计算结果与精确解做比较,并对计算结果进行分析。 3)实验原理与理论基础 Simpson 公式 )]()2 ( 4)([6 b f b a f a f a b S +++-= 复化梯形公式 将定积分? = b a dx x f I )(的积分区间],[b a 分隔为n 等分,各节点为 n j jh a x j ,,1,0, =+= n a b h -= 复合梯形(Trapz)公式为 ])()(2)([21 1 ∑-=++-= n j j n b f x f a f n a b T 如果将],[b a 分隔为2n 等分,而n a b h /)(-=不变, 则 )]()(2)(2)([41 2 111 2b f x f x f a f n a b T n j j n j j n +++-= ∑∑-=+-= 其中 h j a h x x j j )2 1(2 12 1+ +=+ =+ ,)]()(2)(2)([41 2 11 1 2b f x f x f a f n a b T n j j n j j n +++-= ∑∑-=+ -= ∑ -=-++-+ =1 )2) 12((22 1n j n n a b j a f n a b T n=1时,a b h -=,则)]()([2 1b f a f a b T +-= )0(0T = )2 1(2 2 112h a f a b T T + -+ =)1(0T = 若12-=k n ,记)1(0-=k T T n , ,2,1=k 1 2 --= k a b h jh a x j +=1 2 --+=k a b j a h x x j j 2 12 1+ =+ k a b j a 2 ) 12(-++=,则可得如下递推公式

Matlab数值积分与数值微分

M a t l a b数值积分与数值微分 Matlab数值积分 1.一重数值积分的实现方法 变步长辛普森法、高斯-克朗罗德法、梯形积分法 1.1变步长辛普森法 Matlab提供了quad函数和quadl函数用于实现变步长 辛普森法求数值积分.调用格式为: [I,n]=Quad(@fname,a,b,tol,trace) [I,n]=Quadl(@fname,a,b,tol,trace) Fname是函数文件名,a,b分别为积分下限、积分上限; tol为精度控制,默认为1.0×10-6,trace控制是否展 开积分过程,若为0则不展开,非0则展开,默认不展开. 返回值I为积分数值;n为调用函数的次数. --------------------------------------------------------------------- 例如:求 ∫e0.5x sin(x+π )dx 3π 的值. 先建立函数文件 fesin.m function f=fesin(x) f=exp(-0.5*x).*sin(x+(pi/6));再调用quad函数

[I,n]=quad(@fesin,0,3*pi,1e-10) I= 0.9008 n= 365 --------------------------------------------------------------------- 例如:分别用quad函数和quadl函数求积分 ∫e0.5x sin(x+π 6 )dx 3π 的近似值,比较函数调用的次数. 先建立函数文件 fesin.m function f=fesin(x) f=exp(-0.5*x).*sin(x+(pi/6)); formatlong [I,n]=quadl(@fesin,0,3*pi,1e-10) I= n= 198 [I,n]=quad(@fesin,0,3*pi,1e-10) I= n= 365 --------------------------------------------------------------------- 可以发现quadl函数调用原函数的次数比quad少,并 且比quad函数求得的数值解更精确. 1.2高斯-克朗罗德法

数值积分与数值微分知识题课

数值积分与 数值微分 习题课

一、已知012113,,424x x x ===,给出以这 3个点为求积节 点在[]0.1上的插值型求积公式 解:过这3个点的插值多项式基函数为 ()()()()()()()()()()()()()()()()1202010202121012012220211 20,0,1,2 k k x x x x l x x x x x x x x x l x x x x x x x x x l x x x x x A l x dx k --= ----= ----= --==?

()()()()()()()()()()()()111200001021102100101210120202113224111334244131441113324241142x x x x x x A dx dx x x x x x x x x x x A dx dx x x x x x x x x x x A dx x x x x ????-- ???--????=== --????-- ??? ???? ????-- ???--????===- --????-- ??? ???? ????-- ??--???==--?????102313134442dx ??= ????-- ??? ???? ? 故所求的插值型求积公式为 ()1 211 123343234f x dx f f f ??????≈- + ? ? ??????? ?

二、确定求积公式 ( )( )(1 1158059f x dx f f f -? ?≈++?? ? 的代数精度,它是Gauss 公式吗? 证明:求积公式中系数与节点全部给定,直接检验 依次取()23451,,,,,f x x x x x x =,有 [ ](1 1111 215181519 1058059dx xdx --==?+?+???==?+?+?? ???

微分方程数值解法

《微分方程数值解法》 【摘要】自然界与工程技术中的很多现象,可以归结为微分方程定解问题。其中,常微分方程求解是微分方程的重要基础内容。但是,对于许多的微分方程,往往很难得到甚至不存在精确的解析表达式,这时候,数值解提供了一个很好的解决思路。,针对于此,本文对常微分方程数值解法进行了简单研究,主要讨论了一些常用的数值解法,如欧拉法、改进的欧拉法、Runge —Kutta 方法、Adams 预估校正法以及勒让德谱方法等,通过具体的算例,结合MA TLAB 求解画图,初步给出了一般常微分方程数值解法的求解过程。同时,通过对各种方法的误差分析,让大家对各种方法的特点和适用范围有一个直观的感受。 【关键词】 常微分方程 数值解法 MA TLAB 误差分析 引言 在我国高校,《微分方程数值解法》作为对数学基础知识要求较高且应用非常广泛的一门课程,不仅 在数学专业,其他的理工科专业的本科及研究生教育中开设这门课程.近四十年来,《微分方程数值解法》不论在理论上还是在方法上都获得了很大的发展.同时,由于微分方程是描述物理、化学和生物现象的数学模型基础,且它的一些最新应用已经扩展到经济、金融预测、图像处理及其他领域 在实际应用中,通过相应的微分方程模型解决具体问题,采用数值方法求得方程的近似解,使具体问题迎刃而解。 2 欧拉法和改进的欧拉法 2.1 欧拉法 2.1.1 欧拉法介绍 首先,我们考虑如下的一阶常微分方程初值问题 ???==0 0)() ,('y x y y x f y (2--1) 事实上,对于更复杂的常微分方程组或者高阶常微分方程,只需要将x 看做向量,(2--1)就成了一个一阶常微分方程组,而高阶常微分方程也可以通过降阶化成一个一阶常微分方程组。 欧拉方法是解常微分方程初值问题最简单最古老的一种数值方法,其基本思路就是把(2--1)中的导数项'y 用差商逼近,从而将一个微分方程转化为一个代数方程,以便求解。 设在[]b a ,中取等距节点h ,因为在节点n x 点上,由(2--1)可得:

实验4常微分方程数值解

实验4 常微分方程数值解 化工系毕啸天2010011811 【实验目的】 1. 练习数值微分的计算; 2. 掌握用MATLAB 软件求微分方程初值问题数值解的方法; 3. 通过实例学习用微分方程模型解决简化的实际问题; 4. 了解欧拉方法和龙格-库塔方法的基本思想和计算公式,及稳定性等概念。 【实验内容】 题目3 小型火箭初始重量为1400kg,其中包括1080kg 燃料。火箭竖直向上发射时燃料燃烧率为18kg/s,由此产生32000N 的推力,火箭引擎在燃料用尽时关闭。设火箭上升时空气阻力正比于速度的平方,比例系数为0.4kg/m,求引擎关闭瞬间火箭的高度、速度、加速度,及火箭到达最高点时的高度和加速度,并画出高度、速度、加速度随时间变化的图形。 3.1 燃料燃烧过程物理模型分析 设火箭质量为m,高度为h,速度为v,加速度为a,火箭推力为F,重力加速度为g,阻力为f。 1.由火箭上总共携带燃料1080kg,燃料燃烧率为18kg/s,可知火箭上升时间t=60s时,燃料全部烧尽。 2.由阻力正比于速度的平方,比例系数0.4kg/m,可知阻力表达式为f=0.4v2。 3.由于燃料燃烧,火箭的质量是时间的函数,易知m(t)=m0-18t 4. 5.根据牛顿第二运动定律,有。代入数据有 解出 由以上5条分析,我们得到了一个常微分方程组: 初值条件为:v0=0,h(0)=0,t60s. 3.2 程序代码 根据常微分方程组的初值问题,在MATLAB中计算数值解。 记x(1) = h,x(2)= v,x =(x(1), x(2))T 首先编写M文件 function dx = Rocket(t,x) dx=[x(2);(32000-0.4*x(2)^2)/(1400-18*t)-9.8];%以向量形式表示微分方程 end ts=0:60 %终点时间为60s,步长定义为1即可

偏微分方程数值解法答案

1. 课本2p 有证明 2. 课本812,p p 有说明 3. 课本1520,p p 有说明 4. Rit2法,设n u 是u 的n 维子空间,12,...n ???是n u 的一组基底,n u 中的任一元素n u 可 表为1n n i i i u c ?==∑ ,则,11 11()(,)(,)(,)(,)22j n n n n n n i j i j j i j j J u a u u f u a c c c f ???=== -=-∑∑是12,...n c c c 的二次函数,(,)(,)i j j i a a ????=,令 () 0n j J u c ?=?,从而得到12,...n c c c 满足1 (,)(,),1,2...n i j i j i a c f j n ???===∑,通过解线性方程组,求的i c ,代入1 n n i i i u c ?==∑, 从而得到近似解n u 的过程称为Rit2法 简而言之,Rit2法:为得到偏微分方程的有穷维解,构造了一个近似解,1 n n i i i u c ?== ∑, 利用,11 11()(,)(,)(,)(,)22j n n n n n n i j i j j i j j J u a u u f u a c c c f ???===-=-∑∑确定i c ,求得近似解n u 的过程 Galerkin 法:为求得1 n n i i i u c ? == ∑形式的近似解,在系数i c 使n u 关于n V u ∈,满足(,)(,) n a u V f V =,对任 意 n V u ∈或(取 ,1j V j n ?=≤≤) 1 (,)(,),1,2...n i j i j i a c f j n ???===∑的情况下确定i c ,从而得到近似解1 n n i i i u c ?==∑的过程称 Galerkin 法为 Rit2-Galerkin 法方程: 1 (,)(,)n i j i j i a c f ???==∑ 5. 有限元法:将偏微分方程转化为变分形式,选定单元的形状,对求解域作剖分,进而构 造基函数或单元形状函数,形成有限元空间,将偏微分方程转化成了有限元方程,利用 有效的有限元方程的解法,给出偏微分方程近似解的过程称为有限元法。 6. 解:对求解区间进行网格剖分,节点01......i n a x x x x b =<<<<=得到相邻节点1,i i x x -

数值微分与数值积分练习题

第五章 数值微分与数值积分 一.分别用向前差商,向后差商和中心差商公式计算()f x =2x =的导数的近似值。其中,步长0.1h =。 【详解】 00()()(20.1)(2)=0.349 2410.10.1 f x h f x f f h +?+?===向前差商 00()()(2)(20.1)=0.358 0870.10.1 f x f x h f f h ????===向后差商 00()()(20.1)(20.1)= 0.353 664220.10.2f x h f x h f f h +??+??===×中心差商 二.已知数据 x 2.5 2.55 2.60 2.65 2.70 ()f x 1.58114 1.59687 2 1.62788 1.64317 求( 2.50),(2.60),(2.70)f f f ′′′的近似值。 【详解】 0.05h =,按照三点公式 3(2.50)4(2.55)(2.60)3 1.581144 1.59687 1.61245(2.50)0.316 10020.050.1 f f f f ?+??×+×?′≈==×(2.65)(2.55)1.627881.59687(2.60)0.310 10020.050.1 f f f ??′≈==× (2.60)4(2.65)3(2.70)241.6278831.64317(2.70) 4.179 90020.050.1 f f f f ?+?×+×′≈==× 三.已知如下数据 x 3 4 5 6 7 8 ()f x 2.937 6 6.963 213.600 0 23.500 8 37.318 4 55.705 6

微分方程的分类及其数值解法

微分方程的分类及其数值解法 微分方程的分类: 含有未知函数的导数,如dy/dx=2x 、ds/dt=0.4都是微分方程。 一般的凡是表示未知函数、未知函数的导数与自变量之间的关系的方程,叫做微分方程。未知函数是一元函数的,叫常微分方程;未知函数是多元函数的叫做偏微分方程。微分方程有时也简称方程。 一、常微分方程的数值解法: 1、Euler 法: 00d (,), (1.1)d (), (1.2) y f x y x y x y ?=???=? 001 (),(,),0,1,,1n n n n y y x y y hf x y n N +=??=+=-? (1.4) 其中0,n b a x x nh h N -=+=. 用(1.4)求解(1.1)的方法称为Euler 方法。 后退Euler 公式???+==+++),,(),(111 00n n n n y x hf y y x y y 梯形方法公式 )].,(),([2 111+++++=n n n n n n y x f y x f h y y 改进的Euler 方法11(,),(,),1().2p n n n c n n p n p c y y hf x y y y hf x y y y y ++?=+??=+???=+??? 2、Runge-Kutta 方法: p 阶方法 : 1()O h -=?总体截断误差局部截断误差 二阶Runge-Kutta 方法 ??? ????++==++=+),,(),,(,2212 1211hk y h x f k y x f k k h k h y y n n n n n n

实验4_数值积分与数值微分

数值分析实验报告四 数值积分与数值微分实验(2学时) 一 实验目的 1.掌握复化的梯形公式、Simpson 公式等牛顿-柯特斯公式计算积分。 2. 掌握数值微分的计算方法。 二 实验内容 1. 用复化梯形公式计算积分。 ?9 0dx x M=8 2. 用复化Simpson 公式计算积分。 ? 90dx x M=8 3. 给定下列表格值 利用四点式(n=3)求)50()50('''f f 和的值。 三 实验步骤(算法)与结果 1复化梯形公式 用C 语言编程如下: #include #include /*被积函数的定义*/ float f(float x) {

float y; y=sqrt(x); return y; } void main() { int i,m; float a,b,h,r; printf("输入等分数m:" ); scanf("%d",&m); printf("输入区间左端点a的值:"); scanf("%f",&a); printf("输入区间右端点b的值:"); scanf("%f",&b); float x[m+1]; h=(b-a)/m; for(i=0;i<=m;i++) x[i]=a+i*h; r=0; for(i=0;i<=m;i++) {if(i==0) r=r+h*0.5*f(x[i]); if(i>0&&i

if(i==m) r=r+0.5*h*f(x[i]); } printf("输出区间[%3.1f %3.1f]的积分值:%f\n",a,b,r); } 求解结果如下: 输入等分数m:8 输入区间左端点a的值:0 输入区间右端点b的值:9 输出区间[0.0 9.0]的积分值:17.769514 2复化Simpson公式 用C语言编程如下: #include #include /*被积函数的定义*/ float f(float x) { float y; y=sqrt(x); return y; } void main()

常微分方程数值解法

i.常微分方程初值问题数值解法 常微分方程初值问题的真解可以看成是从给定初始点出发的一条连续曲线。差分法是常微分方程初值问题的主要数值解法,其目的是得到若干个离散点来逼近这条解曲线。有两个基本途径。一个是用离散点上的差商近似替代微商。另一个是先对微分方程积分得到积分方程,再利用离散点作数值积分。 i.1 常微分方程差分法 考虑常微分方程初值问题:求函数()u t 满足 (,), 0du f t u t T dt =<≤ (i.1a ) 0(0)u u = (i.1b) 其中(,)f t u 是定义在区域G : 0t T ≤≤, u <∞上的连续函数,0u 和T 是给定的常数。我们假设(,)f t u 对u 满足Lipschitz 条件,即存在常数L 使得 121212(,)(,), [0,]; ,(,)f t u f t u L u u t T u u -≤-?∈∈-∞∞ (i.2) 这一条件保证了(i.1)的解是适定的,即存在,唯一,而且连续依赖于初值0u 。 通常情况下,(i.1)的精确解不可能用简单的解析表达式给出,只能求近似解。本章讨论常微分方程最常用的近似数值解法-差分方法。先来讨论最简单的Euler 法。为此,首先将求解区域[0,]T 离散化为若干个离散点: 0110N N t t t t T -=<< <<= (i.3) 其中n t hn =,0h >称为步长。 在微积分课程中我们熟知,微商(即导数)是差商的极限。反过来,差商就是微商的近似。在0t t =处,在(i.1a )中用向前差商 10()()u t u t h -代替微商du dt ,便得 10000()()(,())u t u t hf t u t ε=++ 如果忽略误差项0ε,再换个记号,用i u 代替()i u t 便得到 1000(,)u u hf t u -= 一般地,我们有 1Euler (,), 0,1, ,1n n n n u u hf t u n N +=+=-方法: (i.4) 从(i.1b) 给出的初始值0u 出发,由上式可以依次算出1,,N t t 上的差分解1,,N u u 。

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

实验四 常微分方程的数值解法 指令: [t,y]=ode23(‘fun ’,tspan,yo) 2/3阶龙格库塔方法 [t,y]=ode45(‘fun ’,tspan,yo) 4/5阶龙格库塔方法 [t,y]=ode113(‘fun ’,tspan,yo) 高阶微分方程数值方法 其中fun 是定义函数的文件名。该函数fun 必须以为dx 输出量,以t,y 为输入量。tspan=[t0 tfina]表示积分的起始值和终止值。yo 是初始状态列向量。 考虑到初始条件有 00 d , (0)0,d d , (0)0. d S SI S S t I SI I I I t ββμ?=-=>??? ?=-=≥?? (5.24) 这就是Kermack 与McKendrick 的SIR 仓室模型. 方程(5.24)无法求出()S t 和()I t 的解析解.我们先做数值计算。Matlab 代码为: function dy=rigid(t,y) dy=zeros(2,1); a=1; b=0.3; dy(1)=a*y(1).*y(2)-b*y(1); dy(2)=-a*y(1).*y(2); ts=0:.5:50; x0=[0.02,0.98]; [T,Y]=ode45('rigid',ts,x0); %plot(T,Y(:,1),'-',T,Y(:,2),'*') plot(Y(:,2),Y(:,1),'b--') xlabel('s') ylabel('i') 任务: 1 画出i (t ), 2分析各参数的影响 例57:求解两点边值问题:0)5(,0)1(,32 ==='-''y y x y y x 。(注意:相应的数值解法比较复杂)。 y=dsolve('x*D2y-3*Dy=x^2','y(1)=0,y(5)=0','x') ↙ y = -1/3*x^3+125/468+31/468*x^4

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

微分方程数值解法实验报告 姓名: 班级: 学号:

一:问题描述 求解边值问题: ()2(sin cos cos sin (0,1)(0,1)0,(,)x y u e x y x y G u x y G ππππππ+???=+??∈=?????=∈??? (x,y) 其精确解为)sin()sin(),()(y x e y x u y x πππ+= 问题一:取步长h=k=1/64,1/128,作五点差分格式,用Jacobi 迭代法,Gauss_Seidel 迭代法,SOR 迭代法(w=1.45)。求解差分方程,以前后两次重合到小数点后四位的迭代值作为解的近似值,比较三种解法的迭代次数以及差分解)128/1,64/1)(,(=h y x u h 与精确解的精度。 问题二:取步长h=k=1/64,1/128,作五点差分格式,用单参数和双参数PR 法解差分方程,近似到小数点后四位。与SOR 法比较精度和迭代步数。 问题三:取步长h=k=1/64,1/128,作五点差分格式,用共轭梯度法和预处理共轭梯度法解差分方程,近似到小数点后四位。与SOR 法与PR 法比较精度和迭代步数。 二.实验目的: 分别使用五点差分法(Jacobi 迭代,Gauss_Seidel 迭代,SOR 迭代),PR 交替隐式差分法(单参数,双参数),共轭梯度法,预共轭梯度法分别求椭圆方程的数值解。 三.实验原理: (1)Jacobi 迭代法 设线性方程组 (1) 的系数矩阵A 可逆且主对角元素均不为零,令 b Ax =nn a ,...,a ,a 2211

并将A 分解成 (2) 从而(1)可写成 令 其中. (3) 以为迭代矩阵的迭代法(公式) (4) 称为雅可比(Jacobi)迭代法(公式),用向量的分量来表示,(4)为 (5) 其中 为初始向量. (2) Guass-Seidel 迭代法 由雅可比迭代公式可知,在迭代的每一步计算过程中是用的 全部分量来计算的所有分量,显然在计算第i 个分量时,已 经计算出的最新分量没有被利用,从直观上看,最新计算出的分量可能比旧的分量要好些.因此,对这些最新计算出来的第 次近似的分量加以利用,就得到所谓解方程组的高斯 —塞德(Gauss-Seidel )迭代法. 把矩阵A 分解成 (6) 其中,分别为的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成 即 其中 (7) 以为迭代矩阵构成的迭代法(公式) (8) ()nn a ,...,a ,a diag D 2211=()D D A A +-=() b x A D Dx +-=11f x B x +=b D f ,A D I B 1111 --=-=1B ()()111f x B x k k +=+? ??[],...,,k ,n ,...,i x a b a x n i j j )k (j j i i ii )k (i 21021111==∑-=≠=+()()()()()T n x ,...x ,x x 002010=()k x ()1+k x ()1+k i x ()() 1111+-+k i k x ,...,x 1+k ()1+k x ()1+k j x U L D A --=()nn a ,...,a ,a diag D 2211=U ,L --A ()b Ux x L D +=-22f x B x +=()()b L D f ,U L D B 1212---=-=2B ()()221f x B x k k +=+

数值积分与微分方法

数值积分与微分 摘要 本文首先列举了一些常用的数值求积方法,一是插值型求积公式,以N e w t o n C o t e s -公式为代表,并分析了复合型的Newton Cotes -公式;另一个是Gauss Ledendre -求积公式,并给出几个常用的Gauss Ledendre -求积公式。其次,本文对数值微分方法进行分析,主要是差分型数值微分和插值型数值微分,都给出了几种常用的微分方法。然后,本文比较了数值积分与微分的关系,发现数值积分与微分都与插值或拟合密不可分。 本文在每个方法时都分析了误差余项,并且在最后都给出了MATLAB 的调用程序。 关键词:插值型积分Gauss Ledendre -差分数值微分插值型数值微分 MATLAB

一、常用的积分方法 计算积分时,根据Newton Leibniz -公式, ()()()b a f x dx F b F a =-? 但如果碰到以下几种情况: 1)被积函数以一组数据形式表示; 2)被积函数过于特殊或者原函数无法用初等函数表示 3)原函数十分复杂难以计算 这些现象中,Newton Leibniz -公式很难发挥作用,只能建立积分的近似计算方法,数值积分是常用的近似计算的方法。 1.1 插值型积分公式 积分中的一个常用方法是利用插值多项式来构造数值求积公式,具体的步骤如下: 在积分区间上[,]a b 上取一组节点:01201,,,,()n n x x x x a x x x b ≤<<≤ 。已知()k x f 的函数值,作()x f 的n 次插值多项式,则 (1) ()10()()()()() (1)!n n x n n k k n k f f L x R x f x l x w x n ++==+=++∑ 其中,()k l x 为n 次插值基函数,则得 (1)+10()(()())1 =[()]()[()](1)!b b n n a a n b b n k k n a a k f x dx L x R x dx l x dx f x f x w x dx n ξ+==+++? ?∑??() 公式写成一般形式: ()()[]n b k k n a k f x dx A f x R f ==+∑? 其中, 01100110 ()()()() ()()()()()b b k k k k a a k k k k k k x x x x x x x x A l x dx dx x x x x x x x x -+-+----==----?? (1)+11 [][()](1)!b n n n a R f f x w x dx n ξ+=+?() 显然,当被积函数f 为次数小于等于n 的多项式时,其相应的插值型求积公式为准确公式,即: ()() n b k k a k f x dx A f x ==∑? 1.1.1 求积公式的代数精度 定义:求积公式对于任何次数不大于m 的代数多项式()f x 均精确成立,而对于 1()m f x x +=不精确成立,则称求积公式具有m 次代数精度。 定理:含有1n +个节点(0,1,,)k x k n = 的插值型求积公式的代数精度至少为n 。

第7章 数值积分与数值微分

第七章数值积分与数值微分 积分问题最早来自于几何形体的面积、体积计算,也是经典力学中的重要问题(例如计算物体的重心位置). 在现实应用中,很多积分的结果并不能写成解析表达式,因此需要通过数值方法来计算. 数值微分是利用一些离散点上的函数值近似计算某一点处的函数导数,它针对表达式未知的函数. 本章介绍一元函数积分(一重积分)和微分的各种数值算法,它们也是数值求解积分方程、微分方程的基础. 7.1数值积分概论 7.1.1基本思想 考虑如下定积分的计算: I(f)≡∫f(x)dx b a ,(7.1) 其中函数f: ?→?,首先应想到的是微积分中学习过的牛顿-莱布尼兹(Newton-Leibniz)公式: ∫f(x)dx b a =F(b)?F(a) , 其中F′(x)=f(x),即F(x)为f(x)的原函数. 但是,诸如e x2,sinx x ,sinx2等表达式很简单的函数却找不到用初等函数表示的原函数,因此必须研究数值方法来近似计算积分. 另一方面,某些函数的原函数虽然可以解析表示,但其推导、计算非常复杂,此时也需要使用数值积分方法. 一般考虑连续的、或在区间[a,b]上可积①的函数f(x),则根据积分的定义有: lim n→∞,?→0∑(x i+1?x i)f(ξi) n i=0 =I(f) , (7.2) 其中a=x0

matlab求微分方程的解-实验分析报告四

matlab求微分方程的解-实验报告四

————————————————————————————————作者:————————————————————————————————日期:

《matlab与数学实验》实验报告 实验序号:实验四日期:2015年 5 月25 日 班级 132132002 姓名彭婉婷学号1321320057 实验名称求微分方程的解 问题背景描述 实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程,另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们既要研究微分方程(组)的解析解法(精确解),更要研究微分方程(组)的数值解法(近似解). 实验目的本实验将主要研究微分方程(组)的数值解法(近似解),重点介绍Euler 折线法. 实验原理 与数学模 型 MATLAB7.11.0

(要点) 2. 求微分方程 x e y y y x sin 5'2''=+-的通解. 3. 求微分方程组 ?????? ?=-+=++00y x dt dy y x dt dx 在初始条件0|,1|00====t t y x 下的特解,并画出解函数()y f x = 的图形. 4. 分别用 ode23、ode45 求上述第 3 题中的微分方程初值问题的数值解(近似解),求解区间为 [0,2]t ∈.利用画图来比较两种求解器之间的差异. 5. 用 Euler 折线法求解微分方程初值问题 ?? ?? ?=-=1)0(, 12'32y y x y y 的数值解(步长h 取0.1),求解范围为区间[0,2]. 选做: 6. 用四阶 Runge-Kutta 法求解微分方程初值问题 ?? ?=-=1)0(,cos 'y x e y y x 的数值解(步长h 取0.1),求解范围为区间[0,3].迭代法

数值积分与数值微分

第5章数值积分与数值微分方法关于定积分计算,已经有较多方法,如公式法、分步积分法等,但实际问题中,经常出现不能用通常这些积分方法计算的定积分问题。怎样把这些通常方法失效的定积分在一定精度下快速计算出来,特别是通过计算机编程计算出来就是本章研究的内容。 此外,怎样根据函数在若干个点处的函数值去求该函数的导数近似值也是本章介绍的内容。 本章涉及的方法有Newton-Cotes求积公式、Gauss求积公式、复化求积公式、Romberg求积公式和数值微分。

5.1 引例

人造地球卫星轨道可视为平面上的椭圆。我国的第一颗人造地球卫星近地点距离地球表面439km ,远地点距地球表面2384km ,地球半径为6371km ,求该卫星的轨道长度。 本问题可用椭圆参数方程 cos ,,0sin x a t a b y b t π=?≤≤>?=? (0t 2) 来描述人造地球卫星的轨道,式中a, b 分别为椭圆的长短轴,该轨道的长度L 就是如下参数方程弧长积分 但这个积分是椭圆积分,不能用解析方法计算。 5.2问题的描述与基本概念

要想用计算机来计算()b a f x dx ?,应对其做离散化处 理。注意到定积分是如下和式的极限 1 ()lim ()n b i i a i f x dx f x λξ→==?∑? 要离散化,做 1) 去掉极限号lim 2) 将i ξ取为具体的i x 值 3) 为减少离散化带来的误差,将i x ?用待定系数i A 代替 于是就得到

定义 5.1 若存在实数1212,,,;,, ,,n n x x x A A A 且任 取()[,],f x C a b ∈都有 1 ()()n b i i a i f x dx A f x =≈∑? (5.1)

相关文档
最新文档