数值计算方法及算法
- 格式:ppt
- 大小:1.24 MB
- 文档页数:98


数值计算中的龙格库塔算法
龙格库塔算法,又称龙格-库塔算法,是一种数值计算方法,主要用于求解微分方程。它的好处是通过迭代得到更加精确的数值解,对于很多科学和工程问题,如天体力学、化学反应动力学、电路分析等,都有广泛的应用。
一、初识龙格库塔算法
最早提出龙格库塔算法的是瑞士数学家卡尔·龙格和德国数学家马丁·库塔,他们在20世纪初期分别提出了一种求解常微分方程组的方法,后来又被合并为一种更为完善的算法,即现在我们所说的龙格库塔算法。它的基本思想是将微分方程分解成一系列递推的步骤,通过不断迭代,逐渐逼近准确的解。
龙格库塔算法的核心是求出微分方程在某个时刻的斜率。一般而言,我们可以使用欧拉法或者梯形法来求解,但这些方法往往会出现舍入误差,导致数值解偏离实际解。相比之下,龙格库塔算法则将微分方程的初始值向前推进一个尽可能小的步长,通过不断缩小步长的大小进行迭代,在保证精度的同时大大提高了计算效率。
在实际应用中,我们通常会使用四阶龙格库塔算法(RK4)来求解微分方程。具体做法是先求出微分方程在 $t$ 时刻的斜率
$k_1$,然后将 $t$ 向前推进一半的步长,求出此时的斜率 $k_2$,再用 $k_2$ 推进一半的步长,求出此时的斜率 $k_3$,最后以
$k_3$ 推进一个步长,求出微分方程在 $t+h$ 时刻的斜率 $k_4$。最终的数值解为:
$$y_{n+1} = y_n + \frac{1}{6}(k_1+2k_2+2k_3+k_4)h$$
其中 $y_{n+1}$ 表示下一个时刻的函数值,$y_n$ 表示当前时刻的函数值,$h$ 表示步长。这个公式看起来比较复杂,但实际上只是对斜率的加权平均。通过不断迭代,我们就可以得到越来越精确的解。
二、优缺点及应用
与其他数值计算方法相比,龙格库塔算法具有以下优点:
1. 高精度:通过四阶跑格库塔公式,可达到高精度计算。
2. 稳定可靠: 在每一步均会进行收敛性检验,确保计算结果准确无误。
《数值计算方法数值计算方法》》考试试考试试题题及参考答案及参考答案
大题 一 二 三 四 总分
得分 24 18 10 48 100
注意注意::时间120分钟
一、填空题(本大题共12个空格,每空2分,共计24分,请在
每小题的空格中填上正确答案。错填、不填均无分分。)
(1)拉格朗日插值基函数在节点上的取值是(0或1 )。
(2)当112()034()xfxfx=−=−,,时,,,则
的二次插值多项
式为 ( 2527
633xx+− )。
(3)3 f(x)2x5x10=−−=用二分法求方程在区间[1,3]内的根,
进行一步后根所在区间为([1,2]),进行两步后根所在区间为
( [1.5,2])。
(4)求解线性代数方程组12
12351
1
40
5xx
xx+=
+=
的高斯-赛德尔
迭代
格式为((1)()
12
(1)(1)
21(15)/3
1
()/4
5kk
k
kxx
xx+
++
=−
=−
)。
该迭代格式的迭代
矩阵的谱半径()Gρ=( 1
12),
所以该迭代格式是(收敛的)
(5)()()
0
f
x
fx=设函数可微,则求方程的
根的牛顿迭代公式︵
︶
是(
1()
()k
kk
kfx
xx
fx+=−
′ ,k=0,1,… )。
(6)解方程f(x)=0的简单迭代法的迭代函数ϕ(x)满足在有根区间
内(ϕ′(x)≤l<1 ),则在有根区间内任意取一点作为初始值,迭代
解都收敛。
(7)用辛卜生公式1
01dx
x+∫
计算积分=( 0.6944 )(保留4位小数)
(8)已知矩阵
221
A
22A−
=
,则=( 3 )
A
∞,=( 4 )
二、单项选择题(本大题共6个小题,每小题3分,共计18分,
在每小题列出的四个备选项中只有一个是符合题目要求的,请将
其代码填写在题后的括号内。错选、多选或未选均无分。)
(9)试判断下面的函数哪一个为三次样条函数?( C )
2
3
32
3
3010
0
()B()01
sin0
(1)12
2110
()
22101x
二分法:
#include
#include
float f(float x)
{
float y;
y=sin(x)-(x*x/4);
return y;
}
void main()
{
double e,E;
float a,b;
float y1,y2;
float x0,y0;
cout<<"输入区间上下限a,b"<<'\n';
cin>>a;
cin>>b;
cout<<"输入误差限e和充分小的正数E"<<'\n';
cin>>e;
cin>>E;
y1=f(a);
y2=f(b);
x0=(a+b)/2;y0=f(x0);
while(fabs(b-a)>e){
x0=(a+b)/2;
y0=f(x0);
if(fabs(y0)
cout<
}
else if((y0*y1)<0) {b=x0;y2=y0;}
else {a=x0;y1=y0;}
}
cout<
}
牛顿迭代法:
#include
#include
float f(float x)
{
double result;
result=x-exp(-x);
return result;
}
float fd(float p)
{
float t,x,y;
float m=y-f(p);
float n=x-p;
t=m/n;
return t;
}
void main()
{
float x0,e,p,x;
int k=0;
cout<<"输入初始近似值 ";
cin>>x0;
cout<<"输入允许的误差限";
cin>>e;
k=k+1;
p=x0;
x=x0-(f(x0)/fd(x0));
x0=x;
cout<
while(fabs(x-p)>=e){
题目
利用数值计算方法求取基尼系数
姓名与学号
指导教师
年级与专业
所在学院
数值计算方法 xx xxxxxxxxxx
1 一、问题综述:
基尼系数(Gini coefficient),是20世纪初意大利学者科拉多·吉尼根据劳
伦茨曲线所定义的判断收入分配公平程度的指标。是比例数值,在0和1之
间。基尼指数(Gini index)是指基尼系数乘100倍作百分比表示。在民众收入
中,如基尼系数最大为“1”,最小等于“0”。前者表示居民之间的收入分配绝
对不平均(即所有收入都集中在一个人手里,其余的国民没有收入),而后者则
表示居民之间的收入分配绝对平均,即人与人之间收入绝对平等,但这两种情
况只出现在理论上;因此,基尼系数的实际数值只能介于0~1之间,基尼系数
越小收入分配越平均,基尼系数越大收入分配越不平均。
设右图中的
实际收入分配曲线
(红线)和收入分
配绝对平等线(绿
线)之间的面积为
A,和收入分配绝
对不平等线(蓝
线)之间的面积为
B,则表示收入与
人口之间的比例的基尼系数为𝐴
𝐴+𝐵。
如果A为零,即基尼系数为0,表示收入分配完全平等(红线和绿线重
叠);如果B为零,则系数为1,收入分配绝对不平等(红线和蓝线重叠)。该
系数可在0和1之间取任何值。实际上,一般国家的收入分配,既不是完全平
等,也不是完全不平等,而是在两者之间,劳伦茨曲线为一条凸向横轴的曲
线。收入分配越趋向平等,劳伦茨曲线的弧度越小(斜度越倾向45度),基尼
系数也越小;反之,收入分配越趋向不平等,劳伦茨曲线的弧度越大,那么基
尼系数也越大。
数值计算方法 xx xxxxxxxxxx
2 基尼系数的调节需要国家通过财政政策进行国民收入的二次分配,例如对
民众的财政公共服务支出和税收等,从而让收入均等化,令基尼系数缩小。
基尼系数由于给出了反映居民之间贫富差异程度的数量界线,可以较客
观、直观地反映和监测居民之间的贫富差距,预报、预警和防止居民之间出现
贫富两极分化。因此得到世界各国的广泛认同和普遍采用。