数值分析上机实验6

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析上机实验6

例1.世界人口数据拟合问题:据统计,六十年代世界人口数据如下(单位:亿)

根据表中数据,预测公元2000年时的世界人口。

问题分析与数学模型

设人口总数为N(t),根据人口理论的马尔萨斯模型,采用指数函数

N(t) = e a + b t

=+,令

对数据进行拟合。为了计算方便,将上式两边同取对数,得ln N a bt

y = ln N或N = e y

变换后的拟合函数为

y(t) = a + b t

根据表中数据及等式 k k( 1,2,……,9)可列出关于两个未知数、b的9个方程的超定方程组(方程数多于未知数个数的方程组)

a + t j b = y j(j= 1,2, (9)

可用最小二乘法求解。

算法与数学模型求解

算法如下:

第一步:输入人口数据,并计算所有人口数据的对数值;

第二步:建立超定方程组的系数矩阵,并计算对应的正规方程组的系数矩阵和右端向量;第三步:求解超定方程组并输出结果:a,b;

第四步:利用数据结果构造指数函数计算2000年人口近似值N(2000),结束。

MATLAB程序

t=1960:1968;t0=2000;

N=[29.72 30.61 31.51 32.13 32.34 32.85 33.56 34.20 34.83];

y=log(N);

A=[ ones(9,1), t' ];

d=A\ y' ;a=d(1),b=d(2)

N0=exp(a+b*t0)

x=1960:2001;yy=exp(a+b*x);

plot(x,yy,t,N,'o',2000,N0,'o')

计算结果为

a =-33.0383,

b = 0.0186

N (2000) = 63.2336

所以取五位有效数,可得人口数据的指数拟合函数

t e t N 0186.00383.33)(+-=

经计算得2000年人口预测值为:63.2336 (亿)。

例2.温度数据的三角函数拟合问题 洛杉矶郊区在11月8日的温度记录如下

在不长的时期内,气温的变化常以24小时为周期,考虑用Fourier 级数的部分和(有限项)做拟合函数。即,求最小二乘曲线:

∑=++=n

k k k x k b x k a a x 1

0)]sin()cos([)(ωωϕ

其中,ω = 2π / 24。例如,当n=2时拟合函数为

ϕ(x )= a 0 + a 1 cos(ωx ) + b 1 sin(ωx ) + a 2 cos(2ωx ) + b 2 sin(2ωx )

对不同的n ,确定拟合函数中的各系数。绘出最小二乘曲线与离散数据点,并计算出拟合函

数的残差2-范数。 算法分析:

以n=2时的拟合函数为对象作算法分析。24小时的温度记录可列为数表如下

将24个数据点代入拟合函数得超定方程组

⎥⎥

⎥⎥⎥⎥⎦

⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢

⎢⎢

⎢⎣⎡2421221102424

2424

22

2

2111

12sin 2cos sin cos 12sin 2cos sin cos 12sin 2cos sin cos 1y y y b a b a a x x x x x x x x

x x x x

ωωωωωωωωωωωω 可以证明方程组的系数矩阵列向量组是正交向量组,于是由最二乘法所推出的正规方程组

系数矩阵是对角矩阵。所以原方程组的最小二乘解为

∑==24

1

0241k k y a

∑∑===24

12

24

11cos /cos k k k k k x y x a ωω,∑∑===24

1224

122cos /2cos k k k k k x y x a ωω

∑∑===24

1

224

1

1sin /sin k k k k k x y x b ωω, ∑∑===24

1

224

1

22sin /2sin k k k k k x y x b ωω

MATLAB 程序(运行程序时需输入参数n ): n=input('input n=: '); w=2*pi/24;x=[1:24]';

y=[66;66;65;64;63;63;62;61;60;60;59;58; 58;58;58;58;57;57;57;58;60;64;67;68]; a0=sum(y)/24; for k=1:n

ck=cos(k*w*x);sk=sin(k*w*x);

a(k)=(ck'*y)/(ck'*ck); b(k)=(sk'*y)/(sk'*sk); end yy=a0; for k=1:n

yy=yy+a(k)*cos(k*w*x)+b(k)*sin(k*w*x); end

plot(x,y,'x',x,yy) r=norm(yy-y)

3.切比雪夫多项式的前两项为:T 0(x ) = 1,T 1(x ) = x ,对于n ≥2,有递推公式

T n+1(x ) = 2xT n (x ) – T n – 1(x )

当x ∈[ – 1,1 ] 时,利用递推公式,计算并绘出 T 0(x ),T 1(x ),T 2(x ),T 3(x ),T 4(x )的

函数图形

MATLAB 程序如下:

x=-1:.05:1;

T0=ones(size(x)); T1=x;

plot(x,T0,'b',x,T1,'b'); hold on for k=2:4

T=2*x.*T1-T0; plot(x,T)

T0=T1;T1=T; end axis off

4.1912年,伯恩斯坦给出了关于多项式一致逼近连续函数的构造性证明,提出了著名的伯恩斯坦多项式,设 f (x )在区间 [0,1]上连续,他的多项式为

B x f k

n C x x n n k n k k k n

()()()=--=∑10

试利用组合数的递推公式 1

11---+=k n k n k n C C C ,设计一个计算n 次伯恩斯坦多项式函数值的

算法。并对函数 f (x ) = sin x 给以验证。 MATLAB 程序如下 n=input('input n='); x=[0:n]/n; f=sin(x*pi); for i=1:n+1 y=f;t=x(i); for k=n:-1:1 for j=1:k

y(j)=t*y(j)+(1-t)*y(j+1); end end

p(i)=y(1);

相关文档
最新文档