文档视界 最新最全的文档下载
当前位置:文档视界 › 变步长,辛普森,梯形公式

变步长,辛普森,梯形公式

变步长,辛普森,梯形公式
变步长,辛普森,梯形公式

#include

#include

#include

#include

#include

#define ESC 27

#define EPS 0.5e-7

#define f(x1) (-2.0/(x1*x1-1))

#define g(x2) (-2.0/(x2*x2-1))

#define s(x0) (-2.0/(x0*x0-1))

char t;

void tixing()

{

double a1=2,b1=3;

double T,h1,x1;

int n,i;

printf("please input n:");

scanf("%d",&n);

h1=(b1-a1)/n;

x1=a1;T=0;

for(i=1;i

{

x1+=h1;T+=f(x1);

}

T=(f(a1)+2*T+f(b1))*h1/2;

printf("T(%d)=%g\n",n,T);

printf("The exact value is %g\n",log(2)-log(3)); }

void Simpson()

{

double a2=2,b2=3;

double S,h2,x2;

int m,j;

printf("please input Even m:");

scanf("%d",&m);

h2=(b2-a2)/m;

x2=a2;S=0;

for(j=1;j

{

x2+=h2;

if(j%2==0) S+=2*g(x2);

else S+=4*f(x2);

}

S=(g(a2)+S+g(b2))*h2/3;

printf("S(%d)=%g\n",m,S);

printf("The exact value is %g\n",log(2)-log(3));

}

void Bianbuc()

{

double c=2,d=3;

double T1,T2,h3,x0,sum;

int q=1,k=1;

h3=d-c;

T2=(s(c)+s(d))/2;

do

{

T1=T2;

x0=c;

h3/=2;

q*=2;

sum=0;

for(k=1;k

{

x0=c+k*h3;

sum+=s(x0);

}

T2=T1/2+sum*h3;

printf("T(%d)\t=%12.8g\n",q,T2);

}

while(fabs(T2-T1)>=EPS);

printf("The exact value is %12.8g\n",log(2)-log(3)); }

void main()

{

do

{

system("color 1b");

system("cls");

printf("\n\t\t\t***************\t\t\t");

printf("\n\t\t\t****实验四*****\t\t\t");

printf("\n\t\t\t**1.梯形积分***\t\t\t");

printf("\n\t\t\t**2.辛普森*****\t\t\t");

printf("\n\t\t\t**3.变步长*****\t\t\t");

printf("\n\t\t\t请选择1或2或ESC退出\n");

printf("\t\t\t****************\t\t\t\n");

t=getch();

}

while(t!='1'&&t!='2'&&t!='3'&&t!=ESC);

while(t=='1'||t=='2'||t=='3'||t==ESC)

{

if(t=='1')

{

system("cls");

printf("please waiting....\n");

Sleep(1000);

tixing();

break;

}

if(t=='2')

{

system("cls");

printf("please waiting....\n");

Sleep(1000);

Simpson();

break;

}

if(t=='3')

{

system("cls");

printf("please waiting....\n");

Sleep(1000);

Bianbuc();

break;

}

if(t==ESC)

{

printf("已经退出!\n");

break;

}

}

}

复化积分法(复化梯形求积-复化Simpson公式-变步长求积法)MATLAB编程实验报告 (1)

复化积分法(复化梯形求积,复化Simpson 公式,变步长求积法) MATLAB 编程实验报告 一、 问题描述: 编写函数实现复化积分法。 二、 实验步骤(过程): (一)复化求积法 (1)复化梯形求积:用复化梯形求积公式求解 dx x x ?10sin function [f]=Tn(a,b,n,y) syms t; h=(b-a)/n; f=0; for k=1:n+1 x(k)=a+(k-1)*h z(k)=subs(y,t,x(k)); end for i=2:n f=f+z(i); end q=subs(y,t,a); if y=='sin(t)/t'&&a==0 q=1; end p=subs(y,t,b); T=h/2*(q+p+2*f); T=vpa(T,7) clc,clear; syms t; a=0;b=1; y=sin(t)/t; n=8; Tn(a,b,n,y); (2)复化Simpson 公式:用复化Simpson 公式求解?211dx e x function [f]=simpson(a,b,n,y)

syms t; h=(b-a)/n; f=0;l=0; for k=1:n+1 x(k)=a+(k-1)*h w(k)=0.5*h+x(k) z(k)=subs(y,t,x(k)); end for i=2:n f=f+z(i); end for i=1:n l=l+w(i); end q=subs(y,t,a); if y=='sin(t)/t'&&a==0 q=1; end p=subs(y,t,b); T=h/2*(q+p+2*f); T=vpa(T,7) clc,clear; syms t; a=1;b=2; y=exp(1/t); n=5; simpson(a,b,n,y); (3)变步长求积法:以书本例4.5为例function [f]=TN(a,b,y,R0) syms t; T=[]; f=0; q=subs(y,t,a); if y=='sin(t)/t'&&a==0 q=1; end p=subs(y,t,b); T(1)=(b-a)/2*(q+p); i=2; n=i-1; h=(b-a)/n; z1=a+h/2; z2=subs(y,t,z1);

用梯形法或者辛普森法数值积分,分别用Matlab和c语言实现。

Matlab作业(一) 作业要求:用梯形法或者辛普森法数值积分,分别用Matlab和c语言实现。 C语言 1.程序代码: #include #include double fun(double x) { return x*x; } double definfresult1(double (*pfun)(double),double a,double b,double eps) { int n=1; double h,k,tn,tn1,fh,fh1=0; double fa=pfun(a); double fb=pfun(b); tn=(b-a)*(fa+fb)/2; do { for(k=0,fh1=0;k= eps); return tn; } int main() { double a,b,eps,definfresult; printf("积分下限a="); scanf("%lf",&a);

printf("积分上限b="); scanf("%lf",&b); printf("精度eps="); scanf("%lf",&eps); definfresult=definfresult1(fun,a,b,eps); printf("\n计算结果=%.7lf\n", definfresult); } 2.运行结果: MatLab 1.程序代码: function y=fun1(x) y=x*x;

复化梯形法 复化矩形法 变步长梯形 变步长辛普森

陕西科技大学 机械教改班 用C++的积分 其实积分的思想就是,微分—>求和—>取极限,如果是用纯手工法那就是先对一个函数微分,再求出它的面积,在取极限,因为我们的计算速度和计算量有限,现在有了计算机这个速度很快的机器,我们可以把微分后的每个小的面积加起来,为了满足精度,我们可以加大分区,即使实现不了微分出无限小的极限情况,我们也至少可以用有限次去接近他,下面我分析了四种不同的积分方法,和一个综合通用程序。 一.积分的基本思想 1、思路:微分—>求和—>取极限。 2、Newton —Leibniz 公式 ?-=b a a F b F dx x f ) ()()( 其中,)(x F 被积函数)(x f 的原函数。 3、用计算机积分的思路 在积分区间内“微分—>求和—>控制精度”。因为计算机求和不可以取极限,也就是不可以无限次的加下去,所以要控制精度。 二.现有的理论 1、一阶求积公式---梯形公式 ?=+-=b a T b f a f a b dx x f )]()([2 )( 他只能精确计算被积函数为0、1次多项式时的积分。 2、二阶求积分公式——牛顿、科特斯公式 ?=+++-=b a S b f a b f a f a b dx x f )]()2(4)([6)( 他只能精确计算被积函数为0、1、2、3次多项式时的积分。 三.四种实现方法 1.复化矩形法 将积分区间[a,b]等分成n 个子区间: ],[],[],[],[],[112322110n n n n x x x x x x x x x x ---、、、 则h=(b-a)/n,区间端点值k x =a+kh

龙格库塔积分算法

龙格库塔法 龙格库塔法是常用于模拟常微分方程的解的重要的一类隐式或显式迭代法。这些技术由数学家C. Runge和M.W. Kutta于1900年左右发明。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。 龙格库塔法是一种在工程上应用广泛的高精度单步算法,可以应用在物理、工程、控制、动力学中,如模糊控制、弹道分析以及分析光纤特性等,在系统仿真中得到广泛应用。 龙格库塔法源自于相应的泰勒级数方法,在每一插值节点用泰勒级数展开,其截断误差阶数也是,根据可省略更高阶的导数计算, 这种方法可构造任意阶数的龙格库塔法。其中4 阶龙格库塔法是最常用的一种方法。因为它相当精确、稳定、容易编程。在计算中一般不必使用高阶方法, 因为附加的计算误差可由增加精度来弥补。如果需要较高的精度, 可采取减小步长的方法即可。4 阶龙格库塔法的精度类似4 阶泰勒级数法的精度。 1、初值问题 对于一阶常微分方程的初值问题 根据常微分方程的理论可知,此初值问题的解在区间[a,b]上存在,且唯一。 2、离散化

取步长h=(b-a)/n,将区间[a , b]分成n个子区间: a=<=b 在其中任意两点的曲线段上,根据积分中值定理,一段光滑曲 线上至少有一点,它的斜率与整段曲线的平均斜率相同, 得=y’() (0<<1) 其中,= 可以将上式改写成y()=y()+h*K (2.1) 其中K为平均斜率,K=f() 公式(2.1)表明,如果能够确定平均斜率K,就可以根据(2.1)式得到y()的值。 欧拉法和龙格库塔法就是用不同方法确定不同精度的平均斜率K,从而求得y()的近似值。 3、Euler法 欧拉法虽然精度低,但它是最简单的一种显式单步法,也是龙 格库塔法的基础。 首先,令、为y() 及y()的近似值,并且令平均斜 率K=f(),即以点的斜率作为平均斜率K,便得到欧拉公式=+h* f() (3.1) 4、改进的欧拉法 此种方法是取、两点的斜率的平均值作为平均斜率K, 即K= ,其中、均为y()以及y()的近似值,就得到 改进后的欧拉公式(4.1)

辛普森求积公式

摘要 在工程实验及研究中,实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;毒物剂量与致死率的关系等常呈曲线关系。曲线拟合是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系.可以说,曲线拟合模型与我们的生活生产密切相关. 本课题着重介绍曲线拟合模型及其应用,其中包括它的基本思想、模型的建立、以及具体应用.为了更好的了解曲线拟合模型,可以将它分为线性与非线性模型,在模型建立的基础上我们可以用最小二乘法来解决一些我们日常所应用的问题. 关键词曲线拟合;线性与非线性模型;最小二乘发

目录 引言 (1) 第一章曲线拟合 (2) §1.1 基本思想及基本概念 (2) §1.1.1 方法思想 (2) §1.1.2几个基本概念 (2) §1.2辛普森算法基本定义及其应用 (4) §1.2.1辛普森求积公式的定义 (4) §1.2.2辛普森求积公式的几何意义 (5) §1.2.3辛普森求积公式的代数精度及其余项 (5) §1.2.4辛普森公式的应用 (6) 第二章辛普森求积公式的拓展及其应用 (7) §2.1 复化辛普森求积公式 (7) §2.1.1问题的提出 (7) §2.1.2复化辛普森公式及其分析 (7) §2.1.3复化辛普森公式计算流程图 (8) §2.1.4复化辛普森公式的应用 (9) §2.2 变步长辛普森求积公式 (10) §2.2.1变步长辛普森求积公式的导出过程 (10) §2.2.2变步长辛普森求积公式的加速过程 (12) §2.2.3变步长辛普森求积公式的算法流程图 (13) §2.2.4变步长辛普森公式算法程序代码 (14) §2.2.5变步长辛普森求积公式的应用 (14) §2.2.6小结 (14) §2.2.7数值求积公式在实际工程中的应用 (14) 参考文献 (16) 附录A (17)

变步长的梯形积分方法的应用

CENTRAL SOUTH UNIVERSITY 数值分析实验报告

变步长的梯形积分方法的应用 一、问题背景 实际问题当中常常需要计算积分,有些数值方法,如微分方程和积分方程的求解,也都和积分计算相关联。 依据人们所熟知的微积分基本定理,对于积分 ()dx x f I a ?=b , 只要找到被积分函数()x f 的原函数()x F ,便有下列牛顿-莱布尼茨(Newton-Leibniz )公式: ()()()a F b F dx x f b -=?a . 但实际使用这种求积分方法往往有困难,因为大量的被积函数,诸如 ()0sin ≠x x x ,2x e -等,其原函数不能用初等函数表达,故不能用上述公式计算。即使能求得原函数的积分,有时计算也十分困难。例如对于被积函数 ()6 11x x f +=,其原函数 ()C x x x x x x x x F ++-+++??? ??-+=1 313ln 3411arctan 61arctan 3122, 计算()a F ,()b F 仍然很困难,另外,当()x f 是由测量或数值计算给出的一张数据表时,牛顿-莱布尼茨公式也不能直接运用。因此有必要研究积分的数值计算问题。 二、数学模型 由于牛顿-科特斯积分公式在8≥n 时不具有稳定性,故不能通过提高阶数的方法来提高求积精度。为了提高精度通常可以把积分区间划分成若干的子区间(通常是等分),再在每个子区间上用低阶求积公式。这种方法称为复合求积法。 复合梯形法虽然方法简单,但是却不能估计积分精度,这有时候是很不方便的。要想控制积分精度,可以采用如下的方法,设积分区间已经划分为n 个子区间,这时再把区间划分更细,给出新的积分结果,如果前后两次积分的差比给定的误差容限小的话,则停止细华否则继续增加积分区间。这种方法原理很简单也 容易实现,但是实际计算中一般采用的比较少,因为这种方法比较机械效率不是太高,实际上采用比较多的通常是Romberg 方法。 三、算法及流程 给定义误差容限小量TOL ,对于()dx x f b a ?,有复合梯形公式

关于辛普森(simpson)公式在线路坐标计算中的应用

关于复化辛普森(simpson)公式在线路坐标计算中的应用 天津西站项目部刘思传 摘要:本文里利用辛普森公式导证了线路坐标计算的公式,并在卡西欧FX-4800P计算器中编写了中边线坐标计算的源程序。 关键词:复化辛普森公式,线路坐标计算,曲率。 一.引言 随着我国道路建设等级和质量水平的飞速发展,公路、铁路建设的机械化和日产量日益提高,促使施工中在满足设计精度的前提下,尽可能快速、准确地进行测量放样和检查工作,本文线路曲率变化的特点,利用复化辛普森公式导证了线路坐标计算的通用公式,并利用卡西欧FX-4800P计算器编写了计算线路中边线坐标的源程序。 二.复化辛普森公式数学模型 把积分区间分成偶数等分,记,其中是节点总数,是积分子区间的总数。 记,,在每个区间上用辛普森数值积分公式计算,则得到复化辛普森公式,记为。 复化辛普森积分计算公式 而,称

(1) 式(1)即为辛普森复化公式。 三.线路坐标计算 2. 回旋曲线上点位坐标方位角的计算 如图1,设回旋曲线起点A 的曲率为A ρ,其里程为DK A ;回旋曲线终点B 的曲率为B ρ,其里程为DK B ,Ax ’'y 为以A 为坐标原点,以A 点切线为'x 轴的局部坐标系;Axy 为线路坐标系。 由此回旋曲线上各点曲率半径为R i 和该点离曲线起点的距离?i 成反比,故此任意点的曲率为 c l R i i i /1==ρ(=为常数). (2) y ' Y B 图1 由式(2)可知,回旋曲线任意点的曲率按线性变化,由此回旋曲线上里程为DK i 点的曲率为

)(A i A B A B A i DK DK DK DK ---+=ρρρρ (3) 当曲线右偏时,取正;当曲线左偏时取负。在图1中有 ???????=== ?I A DK DK i i i dl dl dl R d ρβρβ1 (4) 将式(3)代入式(4)得 πρρβ180 *)(2A i A i i DK DK -+= (5) 若已知回旋曲线起点A 在线路坐标系下切线坐标方位角αA ,则里程为Dk i 点切线坐标方位角为 i A i βαα+= π180 (6) 将式(5)代入式(6)得 *)(2A i A i A i DK DK -++=ρραα π180 (7) 对于式(7) ,当,时,,则a i =a A ,式(7)变成计算直线段上任意点切线坐标方位角计算公式;当,时,, ,则式(7)代表圆曲线上任意点切线坐标方位角 计算公式。 可见,若已知曲线段起点和终点的曲率及起点的切线坐标方位角,式(7)便能计算任意线型点位切线坐标方位角。 3、回旋曲线点位坐标计算 由图1可得回旋曲线上点位在坐标系下坐标计算公式:

辛普森为什么被宣判无罪

辛普森为什么被宣判无罪——了解美国司法体制的一面镜子 发信站: 两全其美网(Wed Jun 10 20:29:41 2009), 本站(https://www.docsj.com/doc/f05043313.html,) 有网友说杀人嫌疑犯辛普森最后被宣判无罪释放,清楚证明了标榜自由平等民主公平的美国其实只是打着法律的幌子搞双重标准、愚弄世人,这是对美国宪法修正案以及美国司法制度的曲解。也许很多网友或多或少读过一些辛普森杀妻案的报道,但其实在生活中我们也许会遇到这么一种情况——得到的信息越简单,推论也就会显得格外清楚。就像世界上发生的很多事情一样,当事实被简单化以后,看似清晰的结论,有时反而会模糊事件的真实面貌,甚至也会曲解事件所折射的意义和教训。我当然不能说我知道的是完整真相而其他人都一知半解,但我还是想在此再详细解释一下在美国的司法制度和宪法修正案的条款保护下为什么辛普森嫌疑如此之大却还是被宣判无罪释放。 首先我们简单回顾一下这个“世纪大审判”的起因——1994年6月,洛杉矶高级住宅区发生了一桩重大谋杀案,死者均为白人,一个是辛普森的前妻妮可•辛普森,另一位是20岁左右的餐馆雇员高德曼,他当晚前往妮可住所给其送遗失在餐厅中的眼镜而被害。二人都是被刀割喉致死,妮可的头颅几乎被割下来。邻居偶然发现了尸体,现场在妮可自家花园甬道上。 辛普森的住所离前妻的非常近,案发后警察试图找到他通知案情,发现辛普森已经按原计划前往芝加哥。因为怀疑其谋杀,而且辛普森在警方通知其赶紧回来接受问讯后一直不投案,于是警方只得把他宣布为重大通缉犯。当他在警察眼皮底下回到住所,喝完一杯桔子汁后束手就擒。 辛普森在从芝加哥回来的一个小时里,当时警察局还没有宣布其嫌犯身份,他就已经聘请了美国最著名的律师之一夏皮罗作为其首席律师,并马上组建了名满全美的几十名高级律师构成的“梦幻律师团”。美国有一个专门的机构“美国公民自由联盟”,如果你是穷人请不起律师,该机构为你聘请律师,费用全免,美国政府也有一个联邦法律服务公司,义务为请不起律师的人提供免费律师。而且法庭也规定,律师都必须有一定小时数的义务服务。 另一方面,由地方女检察官克拉克、黑人检察官达顿为首的检方律师团也组建起来。 在美国,审判刑事犯罪案件时,不论检方手中的证据看上去多么有力,在宣判有罪之前,都必须遵循“无罪假定”,因为一个普通美国人在处于嫌疑犯这个不利地位时必须确保其拥有的自由和基本权利。美国人认为,在案件受理期间被告面临检察官与警察,往往是代表着集中了美国最有势力、财力搜罗证据、维持诉讼的强势团体,而一个普通人处于这样一个悬殊的地位上,如果还不从制度上加以保护的话,被冤枉、甚至被政府执法人员陷害的可能性都是非常大的。因此在宪法的十条修正案中,有五条涉及保护嫌犯的公民权利,同时保证检方和辩方从道义上的平等地位。而且在被告不认罪的情况下,检方的责任是陈列证据证明控告的合理性。而辩方的工作只是对检方提出的证据提出疑点,甚至推翻检方的证据。检方在整个审理过程中绝对不可以有任何抬高自己、宣扬替天行道伸张正义的举动,哪怕是暗示辩护律师是为罪犯开脱都是严重的犯规行为。 美国的司法独立,决定了美国政府无权干涉任何审理过程,而法官所起的全部作用只是维持秩序,以及判定哪些证据可以呈堂,提问是否恰当,在法庭上什么话可以说,什么不可以说,

数值分析与算法变步长梯形求积法计算定积分

变步长梯形求积法计算定积分 1.原理: 变步长求积法的主要思想是利用若干小梯形的面积代替原方程的积分,当精度达不到要求时,可以通过增加点数对已有的区间再次划分,达到所需精度时即可;其中由于新的式子中有原来n点中的部分项,故可以省略一些计算,符合了计算机计算存储的思想。 主要公式:T2n=T n/2+(h/2)*Σf(x k+; 2.C++语言实现方式: 通过每次的T n值和新增的函数值点计算T2n,再通过判断|T n-T2n|的大小来判断是否达到精度要求。 3.源程序如下: #include"" #include"" double f(double x)//预先输入的待积分函数 { double s; s=log(x*x); return(s); } double ffts(double a,double b,double eps) { int n,k; double fa,fb,h,t1,p,s,x,t; fa=f(a);

fb=f(b); n=1; h=b-a; t1=h*(fa+fb)/2; p=eps+1; while(p>=eps) { s=0; for(k=0;k<=n-1;k++) { x=a+(k+*h; s=s+f(x); } t=t1/2+h*s/2; p=fabs(t1-t); cout<<"步长n为:"<

运用证据学规则分析辛普森杀人案

龙源期刊网 https://www.docsj.com/doc/f05043313.html, 运用证据学规则分析辛普森杀人案 作者:路小普石霖熙葛二磊 来源:《今日财富》2017年第01期 辛普森杀妻案大多数公众认为被告人一定难逃法律的制裁,最终却以辛普森无罪释放告终。本文通过“非法证据排除规则”排除辛普森杀妻案中的血迹证据和手套证据,然后提出中国证据规则的改善;运用“品格证据规则”分析辛普森杀妻案中证人“福尔曼”的证词,一步步排除,最后辛普森无罪释放,并且根据美国品格证据规则启示了我国的品格证据规则。 一、引言 1994年6月12日深夜的一阵犬吠迎来了美国历史上极为轰动的一起事件——辛普森杀妻案。这起被誉为“世纪大审判”的刑事案件,耗时474天,最终以辛普森无罪释放告结。裁决作出后,辛普森在此案中是否有罪已经不是人们热议的唯一焦点。从法律角度分析,证据是衡量罪与非罪的重要标准,以此引出证据规则体现出的公平和人权观念。 我认为,在此案中运用了非法证据排除规则和品格证据原则,排除证据,下面将围绕非法证据排除规则和品格证据原则对辛普森杀妻案进行分析。 二、从非法证据排除规则看辛普森杀妻案 (一)非法证据排除则 非法证据排除规则通常指执法机关及其工作人员使用非法行为取得的证据不得在刑事审判中采纳的规则。“非法”者,本为非法取得之意;“排除”者,初指非法证据不得在刑事审判中采纳为不利于被告的证据,后扩大到包括在审前程序中不得以非法取得的证据为根据签发逮捕证和搜查证等司法行为,以及被告方可以法院未排除非法证据为由进行上诉和请求最高法院审查案件。 (二)辛普森杀妻案重证据排除 1.血迹证据。凶杀现场两处发现辛普森的血迹;现场提取的毛发与辛普森的头发相同;警方两只都有被害人和被告人的血迹的手套即在现场和辛普森住宅发现的血手套是同一副;在辛普森住宅门前小道、二楼卧室的袜子和白色野马车中都发现了辛普森和被害人的血迹。 但是,这些血迹证据中破绽百出。首先,袜子上的血迹非常奇怪。因为袜子上的血迹左右两边一模一样,如果袜子当时穿着在人的脚上,则血迹绝对不可能从右边渗透到左边,或者从左边渗透到右边,因为中间隔着脚踝,也就是说,袜子上的血迹有很大的可能是后来被人涂抹上去的。另外,辩方专家在检验袜子上的血迹时发现其中含有浓度很高的螯合剂(EDTA),案发之日,警方在抽取辛普森的血样之后在血样中添加了这种螯合剂。

5.2龙格库塔法

第五章 常微分方程的数值解法 5.2 龙格-库塔法 一、教学目标及基本要求 通过对本节课的学习,使学生掌握常微分方程、常微分方程方程组的数值解法。 二、教学内容及学时分配 本节课主要介绍常微分方程的数值解法。具体内容如下: 讲授内容:龙格库塔方法、收敛性与稳定性 三、教学重点难点 1.教学重点:龙格库塔方法、收敛性与稳定性。 2. 教学难点:收敛性与稳定性。 四、教学中应注意的问题 多媒体课堂教学为主。适当提问,加深学生对概念的理解。 五、正文 龙格-库塔方法 引言 龙格-库塔方法的基本思想 '11()() ()()()(,())n n n n y x y x y y x y x hf y h ξξξ++-=?=+ 令*(,())K f y ξξ=称为区间1[,]n n x x +上的平均斜率,只要对*K 提供一种算法,即可推导出一种计算公式。 欧拉公式只是取点n x 的斜率作为区间1[,]n n x x +的平均斜率*K ,精度自然很低。 考察改进的欧拉公式 11211 ()22 n n y y h k k +=++1(,)n n k f x y =21(,)n n k f x h y hk =++ 它利用n x ,1n x +两点的斜率取算术平均,1n x +处斜率通过已知信息n y 用欧拉公式预报得到。

可以考虑设法在1[,]n n x x +多取几个点的斜率值,将它们加权平均作为区间 1[,]n n x x +的平均斜率*K 。这就是龙格-库塔方法的基本思想。 1、二阶龙格-库塔方法 考察1[,]n n x x +内一点,01n p n x x hp p +=+<≤,希望通过,n n p x x +两个点的斜率 12,K K 加权平均得到*K ,即令112((1))n n y y h K K λλ+=+-+ 取1(,)n n K f x y =,如何预报n p x +处斜率2K ? 仿照改进的欧拉公式,先用欧拉公式预测()n p y x +的值n p y +: 1n p n y y phK +=+ 然后用n p y +计算2(,)n p n p K f x y ++=,从而得 112121[(1)](,)(,) n n n n n p n y y h K K K f x y K f x y phK λλ++=+-+==+ 适当选取,p λ,使上述公式具有较高得精度。假定()n n y y x =,分别将12 ,K K 泰勒展开: '1(,)()n n n K f x y y x == 212 ' '' 2 (,) (,)[(,)(,)(,)]()()()() n p n n n x n n n n y n n n n K f x y pkK f x y ph f x y f x y f x y O h y x phy x O h +=+=+++=++ 代入得 '2''31()()()()n n n n y y x hy x ph y x O h λ+=+++ 按泰勒展开2' '' 31()()()()2 n n n n h y y x hy x y x O h +=+++ 比较得,只要1 2 p λ= ,公式截断误差为3()O h 特别,当1,1/2p λ==,就是改进的欧拉公式, 改取1,1/2p λ==, 12n n y y hk +=+,1(,)n n k f x y =,21(,)22 n n h h k f x y k =++

辛普森插值法

第五章:利用复化Simpson公式和Romberg法计算积分 R= 1 2 04 x x + ?dx , 并分析结果. 1 Simpson公式 function R1=Simpson(a,b,m,f) h=1/(2*m); x=ones(1,2*m); for k=1:2*m; x(k)=a+k*h; end s1=0; s2=0; for i=0:m-1 s1=s1+feval(f,x(2*i+1)); end for i=1:m-1 s2=s2+feval(f,x(2*i)); end R1=(feval(f,a)+4*s1+2*s2+feval(f,b))*h/3; end 输入命令结果如下 a=0;b=1; format long; >> f=inline('x/(4+x^2)'); m=40; >> R1=Simpson(a,b,m,f) R1 = 0.111571775717089 >> m=60; >> R1=Simpson(a,b,m,f) R1 = 0.111571775668953 >> m=100; >> R1=Simpson(a,b,m,f) R1 =

0.111571775658640 2.Romberg法 function z=romberg(f,n,a,b) z=zeros(n,n); h=b-a; z(1,1)=(h/2)*(feval(f,a)+feval(f,b)); f1=0; for i=2:n for k=1:2^(i-2) f1=f1+f(a+(k-0.5)*h); end z(i,1)=0.5*z(i-1,1)+0.5*h*f1; h=h/2; f1=0; for j=2:i z(i,j)=z(i,j-1)+(z(i,j-1)-z(i-1,j-1))/(4^(j-1)-1); end end 在主程序中输入 a=0;b=1; format long; >> f=inline('x/(4+x^2)'); n=15; z=romberg(f,n,a,b) z = Columns 1 through 3 0.100000000000000 0 0 0.108823529411765 0.111764705882353 0 0.110892********* 0.111581850864687 0.111569********* 0.111402354529548 0.111572382538912 0.111571751317193 0.111529448571860 0.111571813252631 0.111571775300212 0.111561195644221 0.111571778001675 0.111571775651611 0.111569130763726 0.111571775803560 0.111571775657019 0.111571114440624 0.111571775666257 0.111571775657104 0.111571610353414 0.111571775657677 0.111571775657105 0.111571734331209 0.111571775657141 0.111571775657105 0.111571765325633 0.111571775657107 0.111571775657105 0.111571773074237 0.111571775657105 0.111571775657105 0.111571775011388 0.111571775657105 0.111571775657105 0.111571775495676 0.111571775657105 0.111571775657105

变步长梯形法

#include #include float f(float x) { float s; s=1/(x*x); return(s); } main() { float a,b,c,h,x,T1,T2,S; float T0; printf("变步长梯形法求积分:\n"); printf("需要求解的积分式为f(x)=1/(x*x)\n"); printf("请输入a: "); scanf("%f",&a); printf("请输入b: "); scanf("%f",&b); printf("请输入c: "); scanf("%f",&c); h=b-a; T1=h*(f(a)+f(b))/2; S=0; x=a+h/2; do { S=S+f(x); x=x+h; }while(x=c) { T1=T0; S=0; x=a+h/2; do { S=S+f(x); x=x+h; }while(x

T2=T1/2+h/2*S; printf("步长为%f时\t Tn=%f \t T2n=%f \t 误差变化:%f\n",h,T1,T2,fabs(T1-T2)); h=h/2;T0=T2; } printf("************************************************************** **************\n"); printf("所求的结果为=%f\n",T2); }

变步长梯形公式(C语言)

变步长梯形公式(C语言) 程序: // cehngxu.cpp : 定义控制台应用程序的入口点。 // #include"stdafx.h" #include"stdio.h" #include"math.h" double f(double x) //这里自定义了函数,因为出现sin(0)/0的情况,系统无法计算;{ double y; if (x == 0) y = 1; //把x=0作为一种情况,单独拿出来; else y = sin(x) / x; //正常情况下的函数; return(y); } //编写这个自定义函数便于你在作业中的计算,对于不用的题目只需改动一下函数即可计算; void main() //主函数; { double a , b ,h,k,s,t[4998]; //数组的定义中不能出现变量,故对其任意取值,一般取一个很大的数; int n = 1, m = 0; printf("please input a="); scanf_s("%lf", &a); //在VC环境下用scanf输入没有问题,但是在我这编译环境visual studio 2013下需要用scanf_s()输入; printf("please input b="); scanf_s("%lf", &b); t[1] = (b - a)*(f(a) + f(b)) / 2; do { h = (b - a) / n; s = 0; for (k = 0; k < n; k++) { s += f(a + (k + 0.5)*h); } t[2 * n] = t[n] / 2 + h / 2 * s; //梯形的递推公式 n = 2*n; m = m + 1;

龙格库塔法例题

四阶龙格一库塔法 通常所说的龙格一库塔法是指四阶而言的.我们可以仿二阶、三阶的情形推导出常用的标准四阶龙格一库塔公式 (9.22) 公式(9.22)的局部截断误差的阶为. 龙格一库塔法具有精度高,收敛,稳定(在一定的条件下),计算过程中可以改变步长,不需要计算高阶导数值等优点.但仍需计算在一些点上的值,如四阶龙格-库塔法每计算一步需要算四次 的值,这给实际计算带来一定的复杂性,因此,多用来计算“表头”.(即开始几点的近似值).例3.用标准龙格一库塔法求初值问题 在处的解. 解因与.若应用标准龙格一库塔方法公式(9.22)计算,对于n=0时,则有

于是得 这个值与准确解在处的值已十分接近.再对n=1,2,3,4应用式(9.22)计算,具体计算结果如表3所示:

例3写出用四阶龙格――库塔法求解初值问题 的计算公式,取步长h=0.2计算y(0.4)的近似值。至少保留四位小数。 解此处f(x,y)=8-3y,四阶龙格――库塔法公式为 其中κ1=f(x k,y k);κ2=f(x k+0.5h,y k+0.5hκ1); κ3=f(x k+0.5h,y k+0.5hκ2);κ4=f(x k+h,y k+hκ3) 本例计算公式为: 其中κ1=8-3y k;κ2=5.6-2.1y k; κ3=6.32-2.37y k;κ4=4.208-1.578y k =1.2016+0.5494y k (k=0,1,2,…) 当x0=0,y0=2, y(0.2)≈y1=1.2016+0.5494y0=1.2016+0.5494×2=2.3004 y(0.4)≈y2=1.2016+0.5494y1=1.2016+0.5494×2.3004=2.4654

数值分析变步长求解积分

#include #include # define N 100 double function(double s) { double result; result=sin(s)/s; return result; } int explode2(int k) { int i,s=1; for(i=1;i

} for(i=0;i<2*2*2*N-1;i++) { sum3+=function(a+(i+i/2)*h/8); } d[0]=sum;d[1]=sum1;d[2]=sum2;d[3]=sum3; for(j=1;j<4;j++) T[i][j]=1/2*T[i][j-1]+h/explode2(j)*d[j]; for(i=1;i<4;i++) { for(j=0;j<4-i;j++) T[i][j]=explode4(i)/(explode4(i)-1)*T[i-1][j+1]-1/explode4(i)*T[i-1][j]; } printf("Romberg=%lf",T[3][0]); }

常微分方程组的四阶RungeKutta龙格库塔法matlab实现

常微分方程组的四阶Runge-Kutta方法1.问题: 1.1若用普通方法-----仅适用于两个方程组成的方程组 编程实现: 创建M 文件: function R = rk4(f,g,a,b,xa,ya,N) %UNTITLED2 Summary of this function goes here % Detailed explanation goes here %x'=f(t,x,y) y'=g(t,x,y) %N为迭代次数 %h为步长 %ya,xa为初值 f=@(t,x,y)(2*x-0.02*x*y);

g=@(t,x,y)(0.0002*x*y-0.8*y); h=(b-a)/N; T=zeros(1,N+1); X=zeros(1,N+1); Y=zeros(1,N+1); T=a:h:b; X(1)=xa; Y(1)=ya; for j=1:N f1=feval(f,T(j),X(j),Y(j)); g1=feval(g,T(j),X(j),Y(j)); f2=feval(f,T(j)+h/2,X(j)+h/2*f1,Y(j)+g1/2); g2=feval(g,T(j)+h/2,X(j)+h/2*f1,Y(j)+h/2*g1); f3=feval(f,T(j)+h/2,X(j)+h/2*f2,Y(j)+h*g2/2); g3=feval(g,T(j)+h/2,X(j)+h/2*f2,Y(j)+h/2*g2); f4=feval(f,T(j)+h,X(j)+h*f3,Y(j)+h*g3); g4=feval(g,T(j)+h,X(j)+h*f3,Y(j)+h*g3); X(j+1)=X(j)+h*(f1+2*f2+2*f3+f4)/6; Y(j+1)=Y(j)+h*(g1+2*g2+2*g3+g4)/6; R=[T' X' Y']; end 情况一:对于x0=3000,y0=120 控制台中输入: >> rk4('f','g',0,10,3000,120,10) 运行结果: ans = 1.0e+003 * 0 3.0000 0.1200 0.0010 2.6637 0.0926 0.0020 3.7120 0.0774 0.0030 5.5033 0.0886 0.0040 4.9866 0.1193 0.0050 3.1930 0.1195 0.0060 2.7665 0.0951 0.0070 3.6543 0.0799 0.0080 5.2582 0.0884 0.0090 4.9942 0.1157 0.0100 3.3541 0.1185 数据:

变步长,辛普森,梯形公式

#include #include #include #include #include #define ESC 27 #define EPS 0.5e-7 #define f(x1) (-2.0/(x1*x1-1)) #define g(x2) (-2.0/(x2*x2-1)) #define s(x0) (-2.0/(x0*x0-1)) char t; void tixing() { double a1=2,b1=3; double T,h1,x1; int n,i; printf("please input n:"); scanf("%d",&n); h1=(b1-a1)/n; x1=a1;T=0; for(i=1;i

辛普森公式

Simpson算法及其推广形式 摘要:本文研究了辛普森公式的数值积分的计算方法问题,并且更进一步研究了变步长复化的辛普森公式和二重积分的辛普森公式的问题。首先是对 一维辛普森公式和变步长复化辛普森公式以及二维辛普森公式的推导及 其算法,进行误差分析,并且列举了实例。然后,对辛普森公式进行改 进,这里的改进最主要是对辛普森公式的代数精度进行提高,从而使辛 普森公式对积分的计算更加精确。另外,还研究了辛普森公式的推广形 式。最后,在结论的当中列举了一个例子。 关键词:辛普森公式算法改进推广形式二重积分的辛普森公式

Abstract:This paper first studies the calculation methods of the numerical integration in simpson formula, and then study of the long-simpson formula and the double integral simpson formula problem. First, study the algorithm and derived of one-dimensional simpson formula and step-change in simpson formula, as well as two-dimensional simpson formula, and then analysis the error. Finally , list the example. In this , improve the simpson formula. This improved the most important is to incre ase the simpson formula’s accuracy of algebra. Besides, we study the simpson formula’s promotion of forms. At the last, we list a example in the conclusion. Key word:The simpson formula, Algorithm, Improve, Promotion of forms, The simpson formula of the two-dimensional integral.

相关文档
相关文档 最新文档