计算方法作业2.docx
《计算方法作业2.docx》由会员分享,可在线阅读,更多相关《计算方法作业2.docx(13页珍藏版)》请在冰豆网上搜索。
计算方法作业2
《计算方法》上机指导书
实验1MATLAB基本命令
1.掌握MATLAB的程序设计
实验内容:
对以下问题,编写M文件。
(1)生成一个5×5矩阵,编程求其最大值及其所处的位置。
(2)编程求
。
(3)一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。
求它在第10次落地时,共经过多少米?
第10次反弹有多高?
2.掌握MATLAB的绘图命令
实验内容:
对于自变量
的取值属于[0,
],在同一图形窗口画出如下图形。
(1)
;
(2)
;
实验2插值方法与数值积分
1.研究人口数据的插值与预测
实验内容:
下表给出了从1940年到1990年的美国人口,用插值方法推测1930年、1965年、2010年人口的近似值。
美国人口数据
年
1940
1950
1960
1970
1980
1990
人口(千人)
132,165
151,326
179,323
203,302
226,542
249,633
1930年美国的人口大约是123,203千人,你认为你得到的1965年和2010年的人口数字精确度如何?
2.最小二乘法拟合经验公式
实验内容:
某类疾病发病率为
‰和年龄段
(每五年为一段,例如0~5岁为第一段,6~10岁为第二段……)之间有形如
的经验关系,观测得到的数据表如下
1
2
3
4
5
6
7
8
9
0.898
2.38
3.07
1.84
2.02
1.94
2.22
2.77
4.02
10
11
12
13
14
15
16
17
18
19
4.76
5.46
6.53
10.9
16.5
22.5
35.7
50.6
61.6
81.8
(1)用最小二乘法确定模型
中的参数
和
。
(2)利用MATLAB画出离散数据及拟合函数
图形。
3.复化求积公式
实验内容:
对于定积分
。
(1)分别取利用复化梯形公式计算,并与真值比较。
再画出计算误差与
之间的曲线。
(2)取[0,1]上的9个点,分别用复化梯形公式和复化辛普森公式计算,并比较精度。
实验3非线性方程与线性方程组
1.矩阵的范数与条件数
实验内容:
已知矩阵
求
,
,
和
。
2.研究高斯消去法的数值稳定性
实验内容:
设方程组
,其中
(1)
,
(2)
,
分别对以上两个方程组
(1)计算矩阵的条件数,判断系数矩阵是良态的还是病态的?
(2)用列主元消去法求得L和U及解向量
;
(3)用不选主元的高斯消去法求得L和U及解向量
;
(4)观察小主元并分析对计算结果的影响。
3.求解非线性方程,比较不同方法的计算量
实验内容:
比较求
的根到三位小数所需的计算量:
(1)在区间[0,1]内用二分法;
(2)用迭代法
,初值
;
(3)用牛顿迭代法,取初值
。
《计算方法》上机实验报告
姓名:
陶成川学号:
U201410820班级:
机械09
一、问题
1.研究人口数据的插值与预测
实验内容:
下表给出了从1940年到1990年的美国人口,用插值方法推测1930年、1965年、2010年人口的近似值。
美国人口数据
年
1940
1950
1960
1970
1980
1990
人口(千人)
132,165
151,326
179,323
203,302
226,542
249,633
1930年美国的人口大约是123,203千人,你认为你得到的1965年和2010年的人口数字精确度如何?
2.最小二乘法拟合经验公式
实验内容:
某类疾病发病率为
‰和年龄段
(每五年为一段,例如0~5岁为第一段,6~10岁为第二段……)之间有形如
的经验关系,观测得到的数据表如下
1
2
3
4
5
6
7
8
9
0.898
2.38
3.07
1.84
2.02
1.94
2.22
2.77
4.02
10
11
12
13
14
15
16
17
18
19
4.76
5.46
6.53
10.9
16.5
22.5
35.7
50.6
61.6
81.8
(1)用最小二乘法确定模型
中的参数
和
。
(2)利用MATLAB画出离散数据及拟合函数
图形。
3.复化求积公式
实验内容:
对于定积分
。
(1)分别取利用复化梯形公式计算,并与真值比较。
再画出计算误差与
之间的曲线。
(2)取[0,1]上的9个点,分别用复化梯形公式和复化辛普森公式计算,并比较精度。
二、Matlab程序
1.%构造lagrange插值函数
functiony1=lagrange(x,y,x1)
m=length(x);
n=length(y);
p=length(x1);
ifm~=nerror;
end
s=0;
fork=1:
n
t=ones(1,p);
forj=1:
n
ifj~=k,
t=t.*(x1-x(j))/(x(k)-x(j));
end
end
s=s+t*y(k);
end
y1=s;
%在界面中运行
x=[194019501960197019801990];
y=[132.165151.326179.323203.302226.542249.633];
y1930=lagrange(x,y,1930);
y1965=lagrange(x,y,1965);
y2010=lagrange(x,y,2010);
fprintf('thepopulationin1930is%f\n',y1930)
fprintf('thepopulationin1965is%f\n',y1965)
fprintf('thepopulationin2010is%f\n',y2010)
2.
x=[12345678910111213141516171819];
y=[0.8982.383.071.842.021.942.222.774.024.765.466.5310.916.522.535.750.661.681.8];
yi=log(y);
a=polyfit(x,yi,1);
ai=exp(a
(2));
xm=1:
0.05:
19;
ym=ai*exp(a
(1).*xm);
plot(x,y,'*k',xm,ym,'-y')
fprintf('ais%f\n',ai)
fprintf('bis%f\n',a
(1))
3.
(1)
%构造复合梯形积分公式
functionI=tquad(x,y)
n=length(x)
m=length(y)
ifn~=m
error
end
h=(x(n)-x
(1))/(n-1)
a=[12*ones(1,n-2)1]
I=h/2*sum(a.*y)
End
%用梯形公式计算积分
formatlong
x=0:
0.1:
1;
y=x./(4+x.^2);
I1=tquad(x,y)
%计算积分
formatlong
f=inline('x./(4+x.^2)');
I=quadl(f,0,1)
%作误差与n的关系曲线
%构造函数
functionI=tq(k)
x=0:
0.9/k:
1;
y=x./(4+x.^2);
n=length(x);
m=length(y);
ifn~=m
error;
end
h=(x(n)-x
(1))/(n-1);
a=[12*ones(1,n-2)1];
I=h/2*sum(a.*y);
end
%计算并作图
n=1:
100;
t1=ones(1,100);
fork=1:
100
t1(k)=t1(k)*tq(k);
end
f=inline('x./(4+x.^2)');
I=quadl(f,0,1);
t2=I-t1;
plot(n,t2,'*k',n,t2,'-y')
(2)
%构造复合辛普森积分公式
functionI=simpsion(x,y)
m=length(x);
n=length(y);
ifm~=n
error;
end
ifrem(n-1,2)~=0
I=tquad(x,y);
return;
end;
N=(n-1)/2;
h=(x(n)-x
(1))/N;
a=zeros(1,n);
fork=1:
N
a(2*k-1)=a(2*k-1)+1;
a(2*k)=a(2*k)+4;
a(2*k+1)=a(2*k+1)+1;
end
I=h/6*sum(a.*y);
End
%分别计算积分
formatlong
x=0:
0.1:
1;
y=x./(4+x.^2);
isimosion=simpsion(x,y)
itquad=tquad(x,y)
三、结果
通过Matlab程序运行结果如下:
1.
thepopulationin1930is169.649000
thepopulationin1965is191.767359
thepopulationin2010is171.351000
由于lagrange插值不能准确估计范围外的数值,因此1930年和2010年的误差较大。
2.
ais0.681361
bis0.230620
3.
(1)I1=
0.111463*********
I=
0.1131
(2)
isimosion=
0.1194
itquad=
0.111463*********
积分值为0.1131
显然simpsion公式精度更高