计算方法上机题doc

第八题:

一,题目

从函数表 x 0.0 0.1 0.195 0.3 0.401 0.5 f(x) 0.39894 0.39695 0.39142 0.38138 0.36812 0.35206 出发,用下列方法计算f(0.15),f(0.31),f(0.47)的近似值: (1)分段线性插值;(2)分段二次插值;(3)全区间上拉格朗日插值

(要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的结点)。

二,基本方法

(1)先选取两个结点x i 1-与x i 使∈x [x i 1-,x i ],然后在区间[x i 1-,x i ]上作线

性插值,即得f(x)≈x

x x x y x x x x y

L i i

i i

i

i i

i x 1

1

1

1

1

)(------+--=。

(2)选取距点x 最近的三个结点

x

i 1

-,

x

i

x

i 1

+进行二次插值,即取

f(x)≈)]([)(1

1

1

,12

∑∏+-=+≠-=--=i i k i k

j i j j

k

j

k

x

x x x y L x 。 (3)n=5,

)

)...()()...()

)...()()...(()()(11

1100

(x x x x x

x x x x x x x x x x x y

l

y L n k k k k k

k

n k k n

k k

k

n

k k

n

x x --------==+-+-==∑∑

三,计算结果 (1) x 0.15 0.31 0.47 f(x)

0.394039 0.380067 0.356927 (2)

x 0.15 0.31 0.47 f(x)

0.394482

0.380225

0.361399

(3)

x 0.15 0.31 0.47

f(x) 0.394473 0.380219 0.357222 四,结果分析

编程基本按照课本套公式,方法从(1)至(3),计算结果越来越精确。五,源程序

(1)

#include

int main(void)

{

int i,j;

double a[6],b[6],x,y;

printf("Enter x:");

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

scanf("%lf",&a[i]);

printf("Enter f(x):");

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

scanf("%lf",&b[i]);

for(j=0;j<3;j++){

printf("Enter x:");

scanf("%lf",&x);

for(i=0;x>a[i];i++);

y=b[i-1]*(x-a[i])/(a[i-1]-a[i])+b[i]*(x-a[i-1])/(a[i]-a[i-1]); printf("x=%lf , ",x);

printf("y=%lf\n",y);

}

return 0;

}

(2)

#include

int main(void)

{

int i,j;

double a[6],b[6],x,y;

printf("Enter x:");

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

scanf("%lf",&a[i]);

printf("Enter f(x):");

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

scanf("%lf",&b[i]);

for(j=0;j<3;j++){

printf("Enter x:");

scanf("%lf",&x);

for(i=0;x>a[i];i++);

if((a[i+1]-x)<(x-a[i-2]))

{

y=b[i-1]*(x-a[i])/(a[i-1]-a[i])*(x-a[i+1])/(a[i-1]-a[i+1]);

y=y+b[i]*(x-a[i-1])/(a[i]-a[i-1])*(x-a[i+1])/(a[i]-a[i+1]);

y=y+b[i+1]*(x-a[i-1])/(a[i+1]-a[i-1])*(x-a[i])/(a[i+1]-a[i]); printf("x=%lf , ",x); printf("y=%lf\n",y);

}

else{

y=b[i-2]*(x-a[i-1])/(a[i-2]-a[i-1])*(x-a[i])/(a[i-2]-a[i]);

y=y+b[i-1]*(x-a[i-2])/(a[i-1]-a[i-2])*(x-a[i])/(a[i-1]-a[i]);

y=y+b[i]*(x-a[i-2])/(a[i]-a[i-2])*(x-a[i-1])/(a[i]-a[i-1]); printf("x=%lf , ",x); printf("y=%lf\n",y);

}

}

return 0;

}

(3)

#include

int main(void)

{

int i,j,k;

double a[6],b[6],x,y,p;

printf("Enter x:");

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

scanf("%lf",&a[i]);

printf("Enter f(x):");

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

scanf("%lf",&b[i]);

for(j=0;j<3;j++)

{

y=0;

printf("Enter x:");

scanf("%lf",&x);

for(i=0;i<6;i++){

p=1;

for(k=0;k<6;k++){

if(k!=i)

p=p*(x-a[k])/(a[i]-a[k]);}

y=y+p*b[i];

}

printf("x=%lf , ",x); printf("y=%lf\n",y);

}

return 0;

}

六,附图

(1)

(2)

(3)

第九题:

一,题目

已知直升机旋转机翼外形曲线轮廓线上的某些型值点及端点处的一阶导数值

y`(x0)=1.86548,y`(x18)=-0.046115,

试计算该曲线上横坐标为2,4,6,12,16,30,60,110,180,280,400,515处点的纵坐标(要求该曲线具有二阶光滑度)。

k 0 1 2 3 4 5 6

二,基本方法

根据课本图4-9流程图及追赶法解方程。 三,计算结果 x 2

4

6

12

16

30

y

7.834331 10.476880 12.358485 16.579653 19.093173 25.386597

x 60

110

180

280 400 515

y 32.804369 36.647886 35.917141 29.368427 16.799141 0.524459

四,结果分析

利用追赶法求M[i],比高斯消去法步骤更简单,虽然结果有微小偏差,尤其在s[515]处与课本结果偏差较大。但在精度要求不高的情况下,追赶法可以减少工作量,提高工作效率。 五,源程序

#include

x k 0.52 3.1 8.0 17.95 28.65 39.62 50.65 y k

5.28794 9.4 13.84 20.2 24.9 28.44 31.1

k

13 14 15 16 17 18 x k 364.4 416.3 468 494 507 520 y k

20.9

14.8

7.8

3.7

1.5

0.2

k

7 8 9 10 11 12 x k 78 104.6 156.6 208.6 260.7 312.5 y k

35 36.5 36.6 34.6 31.0 26.34

int main(void)

{

int i,j;

double

a[19],b[19],h[19],s[18],t[18],g[19],x,y,p,q,f[19],m[20],n[20];

printf("输入左端点一阶导:");

scanf("%lf",&p);

printf("输入右端点一阶导:");

scanf("%lf",&q);

printf("Enter x:");

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

scanf("%lf",&a[i]);

printf("Enter f(x):");

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

scanf("%lf",&b[i]);

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

h[i]=a[i]-a[i-1];

for(i=1;i<18;i++)

s[i]=h[i]/(h[i]+h[i+1]);

for(i=1;i<18;i++)

t[i]=1-s[i];

for(i=1;i<18;i++)

g[i]=6/(h[i]+h[i+1])*((b[i+1]-b[i])/h[i+1]-(b[i]-b[i-1])/h[i]);

g[0]=6/h[1]*((b[1]-b[0])/h[1]-p);g[18]=6/h[18]*(q-(b[18]-b[17])/h [18]);

f[1]=0.5;

for(i=2;i<19;i++)

f[i]=t[i-1]/(2-s[i-1]*f[i-1]);

n[1]=g[0]/2;

for(i=2;i<20;i++)

n[i]=(g[i-1]-s[i-1]*n[i-1])/(2-s[i-1]*f[i-1]);

m[19]=n[19];

for(i=18;i>0;i--)

m[i]=n[i]-f[i]*m[i+1];

printf("输出M:\n");

for(i=1;i<20;i++)

printf("%lf ",m[i]);

for(j=0;j<12;j++){

printf("\n");

printf("Enter x:");

scanf("%lf",&x);

for(i=0;x>a[i];i++);

y=m[i]*(a[i]-x)*(a[i]-x)*(a[i]-x)/h[i]/6;

y=y+m[i+1]*(x-a[i-1])*(x-a[i-1])*(x-a[i-1])/h[i]/6;

y=y+(b[i-1]-m[i]*h[i]*h[i]/6)*(a[i]-x)/h[i];

y=y+(b[i]-m[i+1]*h[i]*h[i]/6)*(x-a[i-1])/h[i];

printf("f(x):%lf",y);

}

return 0;

}

六,附图

第十二题

一,题目

某类疾病发生率y‰和年龄段x(每五年为一段,例如0-5岁为第一段,6-10岁为第二段)之间有形如e bx

=的关系。试根据观测得到的如下

a

y∙

数据表,用最小二乘法确定式中的参数a和b,并计算相应的均方误差与最大偏差。

x 1 2 3 4 5 6 7 8 9

y 0.898 2.38 3.07 1.84 2.02 1.94 2.22 2.77 4.02

x 10 11 12 13 14 15 16 17 18 19

y 4.76 5.46 6.53 10.9 16.5 22.5 35.7 50.6 61.6 81.8

二,基本方法

(1)将非线性方程化为线性方程,对e bx

=等号两边取对数得到

y∙

a

=ln

ln。

y+

a

bx

(2)按照最小二乘法的原始定义,不对方程进行变换,而均方误差的方程式,通过求解非线性方程组来解决问题,此时要用到牛顿迭代法。

三,计算结果

(1)a=0.681361,b=0.230620,e=77.307455,m=18.328522

(2)第一次:a=0.721560,b=0.249856,e=17.925350,m=8.1115274 第二次:a=0.239368,b=0.310747,e=5.430872,m=3.467987.

四,结果分析

由以上结果对比,第二种方法结果更加精确,但是采用迭代法计算时,又必须多次选择初值才有可能取得较好的结果。

五,源程序

(1)

#include

#include

int main(void)

{

int i;

double a,b,e,m,a0,a1,b0,b1,y1,y2,x[19],y[19];

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

x[i]=i+1;

printf("x: ");

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

printf("%lf ",x[i]);

printf("\n y: ");

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

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

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

y[i]=log(y[i]);

a0=a1=b0=b1=y1=y2=0;

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

{

a1=a1+x[i];

y1=y1+y[i];

b0=b0+x[i];

b1=b1+pow(x[i],2);

y2=y2+x[i]*y[i];

}

a0=19;

b=(y2-y1*(b0/a0))/(b1-a1*(b0/a0));

a=(y1-b*a1)/a0;

a=exp(a);

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

y[i]=exp(y[i]);

e=m=0;

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

e=e+pow((a*exp((i+1)*b)-y[i]),2);

for(i=0;i<18;i++){

if(pow((a*exp((i+1)*b)-y[i]),2)>m)

m=pow((a*exp((i+1)*b)-y[i]),2);

else;

}

printf("a=%lf b=%lf e=%lf m=%lf\n",a,b,e/19,sqrt(m)); return 0;

}

(2)

#include

#include

int main(void)

{

int i,j;

double a,b,e,m,f,f1,f2,g,g1,g2,c,d,x[19],y[19];

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

x[i]=i+1;

printf("x: ");

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

printf("%lf ",x[i]);

printf("\n y: ");

for(i=0;i<19;i++){

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

}

printf("Enter a0:");

scanf("%lf",&a);

printf("Enter b0:");

scanf("%lf",&b);

f=f1=f2=g=g1=g2=0;

for(j=0;j<20;j++){

for(i=0;i<19;i++){

f=f+2*(a*exp((i+1)*b)-y[i])*exp((i+1)*b);

f1=f1+2*exp(2*(i+1)*b);

f2=f2+4*(i+1)*a*exp(2*(i+1)*b)-2*(i+1)*y[i]*exp((i+1)*b);

g=g+2*(a*exp((i+1)*b)-y[i])*(i+1)*a*exp((i+1)*b);

g1=g1+4*(i+1)*a*exp(2*(i+1)*b)-2*(i+1)*y[i]*exp((i+1)*b);

g2=g2+4*pow((i+1)*a,2)*exp(2*(i+1)*b)-2*pow((i+1),2)*a*y[i]*exp((i+1 )*b);

}

c=f1*a+f2*b-f;

d=g1*a+g2*b-g;

b=(d-c*(g1/f1))/(g2-f2*(g1/f1));

a=(c-f2*b)/f1;

e=0;

m=0;

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

e=e+pow((a*exp((i+1)*b)-y[i]),2);

for(i=0;i<18;i++){

if(pow((a*exp((i+1)*b)-y[i]),2)>m)

m=pow((a*exp((i+1)*b)-y[i]),2);

}

printf("a=%lf b=%lf 均方误差e=%lf 最大偏差m=%lf\n",a,b,e/19,sqrt(m));

}

return 0; }

六,附图

西安电子科技大学出版社计算方法上机答案

西安电子科技大学出版社《计算方法》任传祥等编著第九章计算方法上机参考答案 实验一,算法一 #include #include double I0=log(6)/log(5),I1; int n=1; main () { while(1) { I1=1.0/(n)-I0*5.0; printf("%d %lf\n", n,I1); if(n>=20) break; else I0=I1; n++; } } 实验一,算法二 #include #include double I0=(1/105.0+1/126.0)/2,I1; int n=20; main () { printf("%d %lf\n", n,I0); while(1) { I1=1.0/(5.0*n)-I0/5.0; printf("%d %lf\n", n-1,I1); if(n<2) break; else I0=I1; n--; } } 实验二,二分法

#include #include #define esp 1e-3 double f(double x); main () { double a=1,b=2,x; while(fabs(b-a)>esp) { x=(a+b)/2; printf("x=%lf\n",x); if(f(x)==0) break; else if(f(x)*f(a)<0)b=x; else a=x; } } double f(double x) { return pow(x,3)-x-1; } 实验二,牛顿迭代法 #include #include double f(double x); double f1(double x); #define esp 1e-3 void main() {double x0 = 1.5, x1; x1 = x0 - f(x0) / f1(x0); printf("x=%lf\n", x1); x0 = x1; x1 = x0 - f(x0) / f1(x0); printf("x=%lf\n", x1); while (fabs(x1 - x0)>esp){ x0 = x1; x1 = x0 - f(x0) / f1(x0); printf("x=%lf\n", x1);} } double f(double x) {return pow(x, 3) - x - 1;} double f1(double x) {return 3 * x*x - 1;}

数值计算方法上机实验题

数值计算方法上机实验 实验内容: 1 . 要求:分别用复化梯形法,复化Simpson 法和 Romberg 公式计算. 2.给定积分 dx e x ⎰3 1 和 dx x ⎰3 1 1 ,分别用下列方法计算积分值要求准确到510- ,并比较分析计算时间. 1)变步长梯形法; 2)变步长 Simpson 法; 3) Romberg 方法. 算法描述: 1、复合梯形法:⎰=t dt t a t V 0)()( ))()(2)((21 1 ∑-=++=n k k n b f x f a f h T 输入 被积函数数据点t,a. 输出 积分值.n T 复合Simpson 法:⎰ =t dt t a t V 0)()( ))()(2)(4)((6101 12 1∑∑---=++++=n k n k k k n b f x f x f a f h S 输入 被积函数f(x),积分区间[a,b]和n 输出 复合Simpson 积分值n S 步1 .);()(;a x b f a f S n a b h n ⇐-⇐-⇐ 步2 对n k ,,2,1 =执行).(2;2 );(4;2x f S S h x x x f S S h x x n n n n +⇐+⇐+⇐+⇐ 步3 n n S h S ⨯⇐6 步4 输出n S Romberg 积分法: 根据已知数据对其进行多项式拟合得出p(x);f(x)⇐p(x); 输入 被积函数f(x),积分区间端点a,b,允许误差ε 输出 Romberg 积分值n R 2 步1 .0;0;0;0));()((2;1111⇐===+⇐ -⇐k R C S b f a f h T a b h 步2 反复执行步3→步9. 步3 .2 ;0h a x S + ⇐⇐ 步4 反复执行步5→步6. 步5 ;);(h x x x f S S +⇐+⇐

数值计算方法上机题徐涛

第二章插值法计算公式 (1) 1.1 Lagrange插值多项式 (1) 1.2 Newton向前插值计算公式: (1) 1.3 Newton向后插值公式: (2) 第六章解线性代数方程组的迭代法 (3) 6.1 雅各比迭代格式通用程序: (3) 6.2 高斯-赛德尔迭代格式通用程序 (4) 6.3 SOR方法迭代格式通用程序: (5) 6.4 雅各比方法计算实例: (6) 6.5 高斯-赛德尔方法计算实例: (10) 6.6 SOR方法迭代格式计算实例: (12) 第二章插值法计算公式 1.1 Lagrange插值多项式 流程图: 源程序: const N=40; #include void main() { double x[N]={0}; double y[N]={0}; double xr; double l[N]={0},L; int n=0; int i=0,j=0; cin>>n; cout<<"输入各点的坐标值:"<>x[i]; cin>>y[i]; } cout<<"输入要计算的点的横坐标:"<>xr; for(i=0;i

计算方法上机题目

2021年《计算方法B》 上机题目 一.计算机语言要求 上机题目使用的计算机语言可以使用C、C++、FORTRAN、VC/VB,C#、Matlab、PHP、JavaScript、Python等语言。 如果使用其它特殊的语言环境,请说明并提供相关的软件环境。 二.上机报告内容 上机报告内容包括: (1)题目内容简介; (2)详细说明实现题目的思想、算法依据、算法实现的结构; (3)详细完整的源程序,并附相关的注释说明; (4)给出必要的计算结果,以及主要的输入数据及输出数据,(若数据量大,则只需列出主要的数据部分或对数据进行合理的描述)并对得到的结果进行分析; (5)对上机中出现的问题进行分析总结; 三.上机报告要求 1.完成上机报告后,须提供一份完整的上机报告的电子版文档和纸质的上机报告。电子版文档中包括所有的源程序、输入数据、输出数据;纸质版报告中,只需包含必要的项目内容即可; 2.上机报告严禁相互抄袭,如发现有抄袭的报告,则所有涉及抄袭的上机报告将按零分处理,不再另行通知; 3.《计算方法》四、五、十三班同学请将上机报告电子版发送至邮箱: ***************,邮件标题:《计算方法》上机报告__<学号>姓名;纸质版上机报告请送到:兴庆校区理科楼410或创新港泓理楼4-2016。 4.上机报告上交截止时间为2022年1月16日。

上机题目 1.景观设计 某城市在进行智慧城市建设中,需要对该市一条穿城而过的河流进行部分河段的夜景灯光带改造,该河道南北两侧已沿河道建设有人工步道和护堤,现欲沿河道护堤两边架设户外LED显示屏带,显示屏高度60cm,每米的综合成本造价约4500元。 为了给智慧城市建设提供一个比较准确的成本预算,试根据附件1中的河道南北两侧的测量点数据,尽量准确地估算建立该显示屏带的费用,结果精确至元。 2.《长津湖》电影票房分析 在国产影片中,2017年上映的《战狼2》,讲述了脱下军装的冷锋被卷入了一场非洲国家的叛乱,本来能够安全撤离的他无法忘记军人的职责,重回战场展开救援的故事,片中体现出了浓浓的爱国之情。该片以56.8亿元的最终票房收入稳居中国票房第一位。 2021年上映的《长津湖》是一部制作精良的军事大片,以抗美援朝战争第二次战役中的长津湖战役为背景,讲述了一段波澜壮阔的历史,在极寒严酷环境下,中国人民志愿军东线作战部队凭着钢铁意志和英勇无畏的战斗精神,扭转战场态势,为长津湖战役胜利作出重要贡献的故事。 截止2021年11月底,经过增加排片,共约60天的《长津源》以57.3亿元的票房,超过了《战狼2》夺得了中国电影票房榜的新冠军。现在又将该片延期到12月30日。 试用数值近似的方法和数值积分的方法,根据附件2中的数据,进行以下的探讨:(1)按数据所给的票房变化趋势继续计算,到12月底时,《长津湖》的最终票房将会达到多少? (2)根据两部电影的日票房数据,试比较一下,这两部片子哪一部更加能够吸引观众一些?更能成为中国电影的票房冠军?

计算方法上机作业

计算方法上机作业

说明: 本次上机实验使用的编程语言是Matlab 语言,编译环境为MATLAB 7.11.0,运行平台为Windows 7。 1. 对以下和式计算: ∑ ∞ ? ?? ??+-+-+-+=0681581482184161n n n n S n ,要求: ① 若只需保留11个有效数字,该如何进行计算; ② 若要保留30个有效数字,则又将如何进行计算; (1) 算法思想 1、根据精度要求估计所加的项数,可以使用后验误差估计,通项为: 1421114 1681848586 1681 n n n a n n n n n ε?? = ---<< ?+++++??; 2、为了保证计算结果的准确性,写程序时,从后向前计算; 3、使用Matlab 时,可以使用以下函数控制位数: digits(位数)或vpa(变量,精度为数) (2)算法结构 1. ;0=s ?? ? ??+-+-+-+= 681581482184161n n n n t n ; 2. for 0,1,2,,n i =??? if 10m t -≤ end; 3. for ,1,2,,0n i i i =--??? ;s s t =+

(3)Matlab源程序 clear; %清除工作空间变量 clc; %清除命令窗口命令 m=input('请输入有效数字的位数 m='); %输入有效数字的位数 s=0; for n=0:50 t=(1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5) -1/(8*n+6)); if t<=10^(-m)

%判断通项与精度的关系 break; end end; fprintf('需要将n值加到 n=%d\n',n-1); %需要将n 值加到的数值 for i=n-1:-1:0 t=(1/16^i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/ (8*i+6)); s=s+t; %求和运算 end

数值计算方法上机实习题NEW

数值计算方法上机实习题 1. 设?+=1 05dx x x I n n , (1) 由递推公式n I I n n 151+ -=-,从0=0.1822I , 0=0.1823I 出发,计算20I ; (2) 20=0I ,20=10000I , 用n I I n n 515111+-=--,计算0I ; (3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。 2. 求方程0210=-+x e x 的近似根,要求41105-+?<-k k x x ,并比较计算量。 (1) 在[0,1]上用二分法; (2) 取初值00=x ,并用迭代1021 x k e x -=+; (3) 加速迭代的结果; (4) 取初值00=x ,并用牛顿迭代法; (5) 分析绝对误差。 3.钢水包使用次数多以后,钢包的容积增大,数据如下: 试从中找出使用次数和容积之间的关系,计算均方差。(用ax b y c x +=+拟合) 4.设?????????? ??----------------=410100141010014101101410010141001014A ,????????? ? ??--=625250b ,b x =A

分析下列迭代法的收敛性,并求42110-+≤-k k x x 的近似解及相应的迭代次数。 (1) JACOBI 迭代; (2) GAUSS-SEIDEL 迭代; (3) SOR 迭代(取0.1:0.1:1.9ω=,找到迭代步数最少的*ω)。 5.用逆幂迭代法求???? ? ??=111123136A 最接近于11的特征值和特征向量,准确到310-。 6.用经典R-K 方法求解初值问题 (1)???-+-='++-='x x y y y x y y y sin 2cos 22sin 22212 211,]10,0[∈x , ???==3)0(2)0(21y y ; (2)???-+-='++-='x x y y y x y y y sin 999cos 999999998sin 22212211,]10,0[∈x , ???==3)0(2)0(21y y 。 和精确解???+=+=--x e x y x e x y x x cos 2)(sin 2)(21比较,进行误差分析得到结论,图形显示精确解和数值解。 7.用有限差分法求解边值问题(h=0.1),并图形显示。 ???==-=+-''1 )1()1(0)1(2y y y x y .

计算方法上机题目

目录 1.计算方法A 上机作业 (1) 上机练习目的 (1) 上机练习任务 (1) 计算方法A 上机题目 (1) 程序设计要求 (1) 上机报告要求 (1) 2.QR 分解法求解线性方程组 (2) 计算原理 (2) 程序框图 (7) 计算实习 (8) Matlab代码 (8) 3.共轭梯度法求解线性方程组 (10) 计算原理 (10) 程序框图 (11) 计算实习 (12) Matlab代码 (12) 4.三次样条插值 (14) 计算原理 (14) 程序框图 (16) 计算实习 (17) Matlab代码 (17) 5.四阶龙格-库塔法求解常微分方程的初值问题 (21) 计算原理 (21) 程序框图 (22) 计算实习 (23) Matlab代码 (23)

1.计算方法A 上机作业 上机练习目的 ❑ 复习和巩固数值计算方法的基本数学模型,全面掌握运用计算机进行数值计算的具体过程及相关问题。 ❑ 利用计算机语言独立编写、调试数值计算方法程序,培养学生利用计算机和所学理论知识分析解决实际问题的能力。 上机练习任务 •利用计算机语言编写并调试一系列数值方法计算通用程序,并能正确计算给定题目,掌握调试技能。 •掌握文件使用编程技能,如文件的各类操作,数据格式设计、通用程序运行过程中文件输入输出运行方式设计等。 •写出上机练习报告。 计算方法A 上机题目 1. QR 分解方法求解线性方程组。(第二章) 2. 共轭梯度法求解线性方程组。(第三章) 3. 三次样条插值(第四章) 4. 四阶龙格-库塔法求解常微分方程的初值问题 程序设计要求 1. 程序要求是通用的,在程序设计时要充分考虑哪些变量应该可变的。 2. 程序要求调试通过。 上机报告要求 报告内容包括: ● 每种方法的算法原理及程序框图。 ● 程序使用说明。 ● 算例计算结果。

数值计算方法上机实习题答案.doc

1.设I n 1 x n dx , 0 5 x ( 1)由递推公式 I n 5I n 11 ,从 I 0的几个近似值出发,计算I 20;n 解:易得: I 0 ln6-ln5=0.1823, 程序为: I=0.182; for n=1:20 I=(-5)*I+1/n; end I 输出结果为: I 20= -3.0666e+010 ( 2)粗糙估计 I 20,用 I n 1 1 I n 1 1 ,计算 I 0; 5 5n 0.0079 1 x 20 1 x 20 0.0095 因为 dx I 20 dx 6 5 所以取 I 20 1 (0.0079 0.0095) 0.0087 2 程序为: I=0.0087; for n=1:20 I=(-1/5)*I+1/(5*n); end I I 0= 0.0083 ( 3)分析结果的可靠性及产生此现象的原因(重点分析原因 )。 首先分析两种递推式的误差;设第一递推式中开始时的误差为E0 I 0 I 0,递推过程的舍入误差不计。并记 E n I n I n,则有 E n 5E n 1 ( 5) n E0。因为 E20 ( 5) 20 E0 I 20,所此递推式不可靠。而在第二种递推式中E0 1 E1 ( 1 )n E n,误差在缩小,5 5 所以此递推式是可靠的。出现以上运行结果的主要原因是在构造递推式过程中,考虑误差是否得到控制,即算法是否数值稳定。 2.求方程e x10x 2 0 的近似根,要求x k 1x k 5 10 4,并比较计算量。 (1)在 [0, 1]上用二分法; 程序: a=0;b=1.0; while abs(b-a)>5*1e-4 c=(b+a)/2;

计算方法与实习上机题答案

实习题1 1用两种不容的顺序计算 644834.11000 1 2 ≈∑=-n n ,分析误差的变化 〔1〕顺序计算 源代码: #include #include void main() { double sum=0; int n=1; while(1) { sum=sum+(1/pow(n,2)); if(n%1000==0)printf("sun[%d]=%-30f",n,sum); if(n>=10000)break; n++; } printf("sum[%d]=%f\n",n,sum); } 结果: 〔2〕逆序计算 源代码: #include #include void main() { double sum=0; int n=10000; while(1) { sum=sum+(1/pow(n,2));

if(n%1000==0) printf("sum[%d]=%-30f",n,sum); if(n<=1)break; n--; } printf("sum[%d]=%f\n",n,sum); } 结果: 2连分数 ))//(.../(322101 n n b a a b a b a b f ++++ = 利用下面的方法计算f: 1 1 )0,...,2,1(,d f n n i d a b d b d i i i i n n =--=+==++ 写一个程序,读入n,n n b a ,,计算并打印f 源代码: #include #include void main() { int i=0,n; float a[1024],b[1024],d[1024]; printf("please input n,n="); scanf("%d",&n); printf("\nplease input a[1] to a[n]:\n"); for(i=1;i<=n;i++) { printf("a[%d]=",i); scanf("%f",&a[i]);

计算方法上机实习题

数值计算方法上机实习题 1. 设⎰+=1 05dx x x I n n , (1) 由递推公式n I I n n 1 51+ -=-,从0=0.1822I , 0=0.1823I 出发,计算20I ; (2) 20=0I ,20=10000I , 用n I I n n 51 511+-=-,计算0I ; (3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。 解:(1)程序如下: clear all clc I=0.1822; %题中的已知数据 for n=1:20; I=(-5)*I+1/n; %由递推公式所得 end fprintf('I20=%f\n',I) M=0.1823; %与I 的计算结果形成对比 for i=1:20; M=(-5)*M+1/i; %由递推公式所得 end fprintf('M20=%f\n',M) 输出结果为: I20=-11592559237.912731 M20=-2055816073.851284 (2)程序如下: clear all clc I=0; %赋予I20的初始值 for n=0:19; I=(-1/5)*I+1/(5*(20-n)); %有递推公式得 end fprintf('I0=%f\n',I) M=10000; for i=0:19; M=(-1/5)*M+1/(5*(20-i));%有递推公式得 end fprintf('M0=%f\n',M) 输出结果为: I0=0.182322 M0=0.182322 (3)由输出结果可看出第一种算法为不稳定算法,第二中算法为稳定算法。 由于误差 * 000 ***21111120115(5)5()555n n n n n n n n n n e I I e I I I I I I e e e n n ------=-=-=-+ --+=-=== 第一种算法为正向迭代算法,每计算一步误差增长5倍,虽然所给的初始值很接近,随 着n 的增大,误差也越来越大。 ()n n n n n n n n n n n n n n e e e I I n I n I e I I e I I e ⎪⎭ ⎫ ⎝⎛==-=+--+-==-=-=* **---* 515151)5151(51510111 第二种算法为倒向迭代算法,每计算一步误差缩小5倍,虽然所给的初始值之间差很多,随着n 的增大,误差也越来越小。 2. 求方程0210=-+x e x 的近似根,要求4 1105-+⨯<-k k x x ,并比较计算量。

计算方法上机题答案

2.用下列方法求方程e^x+10x-2=0的近似根,要求误差不超过5*10的负4次方,并比较计算量 (1)二分法 (局部,大图不太看得清,故后面两小题都用局部截图) (2)迭代法

(3)牛顿法 顺序消元法 #include #include #include int main() { int N=4,i,j,p,q,k; double m; double a[4][5]; double x1,x2,x3,x4; for (i=0;i

for(k=p+1;kmax1 max1=abs(A(i,k));r=i; end end

数值计算方法上机实习题答案

1. 设⎰+=1 05dx x x I n n , (1) 由递推公式n I I n n 151+ -=-,从0I 的几个近似值出发,计算20I ; 解:易得:0I =ln6-ln5=0.1823, 程序为: I=0.182; for n=1:20 I=(-5)*I+1/n; end I 输出结果为:20I = -3.0666e+010 (2) 粗糙估计20I ,用n I I n n 515111+- =--,计算0I ; 因为 0095.05 6 0079.010******** ≈<<≈⎰⎰dx x I dx x 所以取0087.0)0095.00079.0(2 120=+=I 程序为:I=0.0087; for n=1:20 I=(-1/5)*I+1/(5*n); end I 0I = 0.0083 (3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。 首先分析两种递推式的误差;设第一递推式中开始时的误差为000I I E '-=,递推过程的舍入误差不计。 并记n n n I I E '-=,则有01)5(5E E E n n n -==-=- 。因为=20E 20020)5(I E >>-,所此递推式不可靠。而在第二种递推式中n n E E E )5 1(5110-==-= ,误差在缩小,所以此递推式是可靠的。出现以上运行结果的主要原因是在构造递推式过程中,考虑误差是否得到控制,即算法是否数值稳定。 2. 求方程0210=-+x e x 的近似根,要求41105-+⨯<-k k x x ,并比较计算量。 (1) 在[0,1]上用二分法; 程序:a=0;b=1.0; while abs(b-a)>5*1e-4

计算方法上机题doc.doc

第八题: 一,题目 从函数表 x 0.0 0.1 0.195 0.3 0.401 0.5 f(x) 0.39894 0.39695 0.39142 0.38138 0.36812 0.35206 出发,用下列方法计算f(0.15),f(0.31),f(0.47)的近似值: (1)分段线性插值;(2)分段二次插值;(3)全区间上拉格朗日插值 (要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的结点)。 二,基本方法 (1)先选取两个结点x i 1-与x i 使∈x [x i 1-,x i ],然后在区间[x i 1-,x i ]上作线 性插值,即得f(x)≈x x x x y x x x x y L i i i i i i i i x 1 1 1 1 1 )(------+--=。 (2)选取距点x 最近的三个结点 x i 1 -, x i , x i 1 +进行二次插值,即取 f(x)≈)]([)(1 1 1 ,12 ∑∏+-=+≠-=--=i i k i k j i j j k j k x x x x y L x 。 (3)n=5, ) )...()()...() )...()()...(()()(11 1100 (x x x x x x x x x x x x x x x x y l y L n k k k k k k n k k n k k k n k k n x x --------==+-+-==∑∑ 三,计算结果 (1) x 0.15 0.31 0.47 f(x) 0.394039 0.380067 0.356927 (2) x 0.15 0.31 0.47 f(x) 0.394482 0.380225 0.361399

西工大计算方法试题参考(完整版).doc

2002-2003 第一学期 %1.计算及推导(5*8) 1,已知渺=3.141双=勿,试确定x*近似x的有效数字位数。 2,有效数、=-3.105,》;=0.001,£=0.100,试确定x;+x;+£的相对误差限。3,已知/⑴=。.5尸+0.1"2,试计算差商/[0』,2,3] 4,给出拟合三点A = (0,1),3 = (1,°)和° =(1,1)的直线方程。 5,推导中矩形求积公式 f f (x)dx = (b-+ 土/(7)(^ -a), 6,试证明插值型求积公式“ x 的代数精确度至少是n次。 7,已知非线性方程"f⑴在区间甚可内有一实根,试写出该实根的牛顿迭代公式。 8,用三角分解法求解线性方程组 ■ 12「一 妃 ' 223=3 -1-30x32 要用二次插值多项式计算f(063891)的近似值,试选择合适的插值节点进行计算,并说明所选用节点依据。(保留5位有效数字)(12分) %1.已知方程x + lnx = 0在(°』)内有一实根仁 (1)给出求该实根的一个迭代公式,试之对任意的初始近似X°e(04)迭代法都收敛,并证明其收敛性。 (2)工。=。5试用构造的迭代公式计算a的近似值%要求氐―知^10一3。 %1.设有方程组当参数a满足什么条件时,雅可比方法对任意的初始向量都收敛。 写出与雅可比方法对应的高斯赛德尔迭代公式。(12分) %1.用欧拉预估校正法求解初值问题

y = y~^^y(0 < x < 0.2) y(0) = l 取h=0. 1,小数点后保留5位。(8分) y =f(x,y) %1.证明求解初值问题〔y(M)=y。的如下单步法 y n+l = y n + K2

(完整word版)计算方法试题库汇总

计算方法 一、填空题 1.假定x ≤1,用泰勒多项式⋯+⋯⋯+++=! !212n x x x e n x ,计算e x 的值,若要求截断误差不超过 0.005,则n=_5___ 2.解方程03432 3 =-+x -  x x 的牛顿迭代公式)463/()343(121121311+--+--=------k k k k k k k x x x x x x x 3.一阶常微分方程初值问题 ⎪⎩⎪⎨⎧=='y x y y x f y 00 )() ,(,其改进的欧拉方法格式为)],(),([21 1 1 y x y x y y i i i i i i f f h +++++= 4.解三对角线方程组的计算方法称为追赶法或回代法 5. 数值求解初值问题的四阶龙格——库塔公式的局部截断误差为o(h 5 ) 6.在ALGOL 中,简单算术表达式y x 3 +的写法为x+y ↑3 7.循环语句分为离散型循环,步长型循环,当型循环. 8.函数)(x f 在[a,b]上的一次(线性)插值函数= )(x l )()(b f a b a x a f b a b x --+-- 9.在实际进行插值时插值时,将插值范围分为若干段,然后在每个分段上使用低阶插值————如线性插值和抛物插值,这就是所谓分段插值法 10、数值计算中,误差主要来源于模型误差、观测误差、截断误差和舍入误差。 11、电子计算机的结构大体上可分为输入设备 、 存储器、运算器、控制器、 输出设备 五个主要部分。 12、算式2 cos sin 2x x x +在ALGOL 中写为))2cos()(sin(2↑+↑x x x 。

数值计算方法上机题

习题二 问题:1.编制通用子程序 对n+1个节点x i及y i=f(x i) (i=1,…n) (1)n次拉格朗日插值计算公式;(2)n次牛顿向前插值计算公式;(3)n次牛顿向后插值计算公式;(一)程序流程图 (1)拉格朗日插值程序流程图

(2)牛顿向前插值程序流程图

(3)牛顿向后插值程序流程图

。 (二)源程序 见主程序清单 问题:2.计算 (1)已知f(x)=lnx,,[a,b]=[1,2],取h=0.1,x i=1+ih,i=0,1, (10) 用通用程序(1),(3)计算ln1.54及ln1.98的近似值; (一)程序清单 /* program of question 2.1, page 61 */ #include "stdio.h" #include "math.h" main() { int i,flag=0; double z1,z2,x[11],y[11],t,s1,s2,z[10],c[11][11],log(double),ntb(),L(); for(i=0;i<=10;i++){x[i]=1+0.1*i;y[i]=log(x[i]);} printf("data x:\n"); for(i=0;i<=10;i++) {flag++;printf("%11.6f",x[i]);if(flag%4==0)printf("\n");} printf("\ndata y:\n");flag=0; for(i=0;i<=10;i++)

{flag++;printf("%11.6f",y[i]);if(flag%4==0)printf("\n");} printf("\nThe true value:\n"); printf(" ln1.54=%f ln1.98=%f\n",log(1.54),log(1.98)); z1=L(x,y,10,1.54);z2=L(x,y,10,1.98);t=(1.54-x[10])/0.1; s1=ntb(y,10,t,z,c);s2=ntb(y,10,t,z,c);t=(1.98-x[10])/0.1; printf("The approximate value:\n"); printf(" L(1.54)=%f L(1.98)=%f\n",z1,z2); printf(" NTB(1.54)=%f NTB(1.98)=%f\n",s1,s2); } double L(double x[],double y[],int n,double t) { int i,k; double z=0.0,s;if(n==1)z=y[0]; for(k=0;k<=n;k++) { s=1.0;for(i=0;i<=n;i++) if(i!=k)s=s*(t-x[i])/(x[k]-x[i]); z=z+s*y[k]; } return z; } double ntb(double y[],int n,double t,double z[],double c[][11]) { int i,j,sn=n;double s;z[0]=t; for(i=1;i<=n-1;i++) z[i]=z[i-1]*(t+i)/(i+1); for(i=0;i<=n;i++) c[i][0]=y[sn--]; for(j=1;j<=n;j++) for(i=0;i<=n-j;i++) c[i][j]=c[i][j-1]-c[i+1][j-1]; s=y[n]; for(i=0;i<=n-1;i++) s=s+z[i]*c[0][i+1]; return s; } (二)运行结果 data x: 1.000000 1.100000 1.200000 1.300000 1.400000 1.500000 1.600000 1.700000 1.800000 1.900000 2.000000 data y: 0.000000 0.095310 0.182322 0.262364 0.336472 0.405465 0.470004 0.530628 0.587787 0.641854 0.693147 The true value: ln1.54=0.431782 ln1.98=0.683097 The approximate value: L(1.54)=0.431782 L(1.98)=0.683097 NTB(1.54)=0.431782 NTB(1.98)=0.683097

(完整版)计算方法练习题与答案.doc

练习题与答案 练习题一 练习题二 练习题三 练习题四 练习题五 练习题六 练习题七 练习题八 练习题答案 练习题一 一、是非题 1. x * –12.0326 作为 x 的近似值一定具有 6 位有效数字,且其误差限 1 10 4 ( ) 2 。 2. 对两个不同数的近似数,误差越小,有效数位越多。 ( ) 3. 一个近似数的有效数位愈多,其相对误差限愈小。 ( ) x 2 4. 1 ( ) 用 2 近似表示 cos x 产生舍入误差。

5. 3.14 和 3.142 作为 的近似值有效数字位数相同。 ( ) 二、填空题 y 12 3 4 9 x 1 2 3 1. 为了使计算 x 1 x 1 的乘除法次数尽量少,应将该 表达式改写为 ; 2. x * –0.003457是 x 舍入得到的近似值,它有 位有效数字,误差限 为 ,相对误差限为 ; 3. 误差的来源是 ; 4. 截断误差为 ; 5. 设计算法应遵循的原则是 。 三、选择题 1. x * –0.026900作为 x 的近似值,它的有效数字位数为 ( ) 。 (A) 7; (B) 3; (C) 不能确定 (D) 5. 2.舍入误差是 ( )产生的误差。 (A) 只取有限位数(B) 模型准确值与用数值方法求得的准确值 (C) 观察与测量(D) 数学模型准确值与实际值 3.用 1+x 近似表示 e x 所产生的误差是 ( )误差。 (A). 模型 (B). 观测 (C). 截断 (D). 舍入 1 .用 * 2 2 表示自由落体运动距离与时间的关系式 (g 为重力加速度 ),s t 是在 4s = gt 时间 t 内的实际距离,则 s t s * 是( )误差。 (A). 舍入 (B). 观测 (C). 模型 (D). 截断 5. 1.41300作为 2 的近似值,有 ( )位有效数字。 (A) 3 ; (B) 4; (C) 5; (D) 6。 四、计算题

计算方法-习题第一、二章答案.doc

第一章 误差 1 问3.142,3.141,7 22分别作为π的近似值各具有几位有效数字? 分析 利用有效数字的概念可直接得出。 解 π=3.141 592 65… 记x 1=3.142,x 2=3.141,x 3=7 22. 由π- x 1=3.141 59…-3.142=-0.000 40…知 34111 10||1022 x π--⨯<-≤⨯ 因而x 1具有4位有效数字。 由π- x 2=3.141 59…-3.141=-0.000 59…知 223102 1||1021--⨯≤-<⨯x π 因而x 2具有3位有效数字。 由π-7 22=3.141 59 …-3.142 85…=-0.001 26…知 23102 1|722|1021--⨯≤-<⨯π 因而x 3具有3位有效数字。 2 已知近似数x*有两位有效数字,试求其相对误差限。 分析 本题显然应利用有效数字与相对误差的关系。 解 利用有效数字与相对误差的关系。这里n=2,a 1是1到9之间的数字。 %5101 211021|*|| *||)(|1211*=⨯⨯≤⨯≤-=+-+-n r a x x x x ε 3 已知近似数的相对误差限为0.3%,问x*至少有几位有效数字? 分析 本题利用有效数字与相对误差的关系。 解 a 1是1到9间的数字。 1112*10) 1(2110)19(21102110003%3.0)(--⨯+≤⨯+⨯=⨯<= a x r ε 设x*具有n 位有效数字,令-n+1=-1,则n=2,从而x*至少具有2位有效数字。 4 计算sin1.2,问要取几位有效数字才能保证相对误差限不大于0.01%。 分析 本题应利用有效数字与相对误差的关系。 解 设取n 位有效数字,由sin1.2=0.93…,故a 1=9。 411 *10%01.01021|*|| *||)(-+-=≤⨯≤-=n r a x x x x ε 解不等式411 101021-+-≤⨯n a 知取n=4即可满足要求。 5 计算760 17591-,视已知数为精确值,用4位浮点数计算。

相关文档
最新文档