《计算方法》上机指导书实验1 MATLAB 基本命令1.掌握MATLAB 的程序设计实验内容:对以下问题,编写M 文件。
(1) 生成一个5×5矩阵,编程求其最大值及其所处的位置。
(2) 编程求∑=201!n n 。
(3) 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。
求它在第10次落地时,共经过多少米?第10次反弹有多高?2.掌握MATLAB 的绘图命令实验内容:对于自变量x 的取值属于[0,3π],在同一图形窗口画出如下图形。
(1)1sin()cos()y x x =⋅;(2)212sin()cos()3y x x =-;实验2 插值方法与数值积分1. 研究人口数据的插值与预测实验内容:下表给出了从1940年到1990年的美国人口,用插值方法推测1930年、1965年、2010年人口的近似值。
美国人口数据1930年美国的人口大约是123,203千人,你认为你得到的1965年和2010年的人口数字精确度如何?2.最小二乘法拟合经验公式实验内容:某类疾病发病率为y ‰和年龄段x (每五年为一段,例如0~5岁为第一段,6~10岁为第二段……)之间有形如bx ae y =的经验关系,观测得到的数据表如下(1)用最小二乘法确定模型bx ae y =中的参数a 和b 。
(2)利用MATLAB 画出离散数据及拟合函数bx ae y =图形。
3. 复化求积公式实验内容:对于定积分⎰+=1024dx x xI 。
(1)分别取利用复化梯形公式计算,并与真值比较。
再画出计算误差与n 之间的曲线。
(2)取[0,1]上的9个点,分别用复化梯形公式和复化辛普森公式计算,并比较精度。
实验3 非线性方程与线性方程组1.矩阵的范数与条件数 实验内容:已知矩阵⎪⎪⎪⎪⎪⎭⎫⎝⎛------=1111111111111111A 求1A ,2A ,∞A 和)(2A cond 。
2.研究高斯消去法的数值稳定性 实验内容:设方程组b Ax =,其中(1)⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡--⨯=-11212592.1121130.6291.51314.59103.0151A ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=2178.4617.591b (2)⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----=201015152699990999999999.23107102A ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=1500019000000000.582b 分别对以上两个方程组(1)计算矩阵的条件数,判断系数矩阵是良态的还是病态的? (2)用列主元消去法求得L 和U 及解向量421,R x x ∈;(3)用不选主元的高斯消去法求得L 和U 及解向量421~,~R x x ∈; (4)观察小主元并分析对计算结果的影响。
3. 求解非线性方程,比较不同方法的计算量实验内容:比较求0210=-+x e x 的根到三位小数所需的计算量: (1)在区间[0,1]内用二分法;(2)用迭代法10/)2(1k x k e x -=+,初值00=x ; (3)用牛顿迭代法,取初值00=x 。
《计算方法》上机实验报告姓名: 陶成川 学号: U201410820 班级: 机械09一、 问题1. 研究人口数据的插值与预测实验内容:下表给出了从1940年到1990年的美国人口,用插值方法推测1930年、1965年、2010年人口的近似值。
美国人口数据1930年美国的人口大约是123,203千人,你认为你得到的1965年和2010年的人口数字精确度如何?2.最小二乘法拟合经验公式实验内容:某类疾病发病率为y ‰和年龄段x (每五年为一段,例如0~5岁为第一段,6~10岁为第二段……)之间有形如bx ae y =的经验关系,观测得到的数据表如下(1)用最小二乘法确定模型bx ae y =中的参数a 和b 。
(2)利用MATLAB 画出离散数据及拟合函数bx ae y =图形。
3. 复化求积公式实验内容:对于定积分⎰+=1024dx x xI 。
(1)分别取利用复化梯形公式计算,并与真值比较。
再画出计算误差与n 之间的曲线。
(2)取[0,1]上的9个点,分别用复化梯形公式和复化辛普森公式计算,并比较精度。
二、Matlab程序1.%构造lagrange插值函数function y1=lagrange(x,y,x1)m=length(x);n=length(y);p=length(x1);if m~=n error;ends=0;for k=1:nt=ones(1,p);for j=1:nif j~=k,t=t.*(x1-x(j))/(x(k)-x(j));endends=s+t*y(k);endy1=s;%在界面中运行x=[1940 1950 1960 1970 1980 1990];y=[132.165 151.326 179.323 203.302 226.542 249.633];y1930=lagrange(x,y,1930);y1965=lagrange(x,y,1965);y2010=lagrange(x,y,2010);fprintf('the population in 1930 is %f\n',y1930)fprintf('the population in 1965 is %f\n',y1965)fprintf('the population in 2010 is %f\n',y2010)2.x=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19];y=[0.898 2.38 3.07 1.84 2.02 1.94 2.22 2.77 4.02 4.76 5.46 6.53 10.9 16.5 22.5 35.7 50.6 61.6 81.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('a is %f\n',ai) fprintf('b is %f\n',a(1)) 3.(1)%构造复合梯形积分公式function I=tquad(x,y)n=length(x)m=length(y)if n~=merrorendh=(x(n)-x(1))/(n-1)a=[1 2*ones(1,n-2) 1]I=h/2*sum(a.*y)End%用梯形公式计算积分format longx=0:0.1:1;y=x./(4+x.^2);I1=tquad(x,y)%计算积分format longf=inline('x./(4+x.^2)');I=quadl(f,0,1)%作误差与n的关系曲线%构造函数function I=tq(k)x=0:0.9/k:1;y=x./(4+x.^2);n=length(x);m=length(y);if n~=merror;endh=(x(n)-x(1))/(n-1);a=[1 2*ones(1,n-2) 1];I=h/2*sum(a.*y);end%计算并作图n=1:100;t1=ones(1,100);for k=1:100t1(k)=t1(k)*tq(k);endf=inline('x./(4+x.^2)'); I=quadl(f,0,1);t2=I-t1;plot(n,t2,'*k',n,t2,'-y') (2)%构造复合辛普森积分公式function I=simpsion(x,y) m=length(x);n=length(y);if m~=nerror;endif rem(n-1,2)~=0I=tquad(x,y);return;end;N=(n-1)/2;h=(x(n)-x(1))/N;a=zeros(1,n);for k=1:Na(2*k-1)=a(2*k-1)+1;a(2*k)=a(2*k)+4;a(2*k+1)=a(2*k+1)+1;endI=h/6*sum(a.*y);End%分别计算积分format longx=0:0.1:1;y=x./(4+x.^2);isimosion=simpsion(x,y)itquad=tquad(x,y)三、结果通过Matlab程序运行结果如下:1.the population in 1930 is 169.649000the population in 1965 is 191.767359the population in 2010 is 171.351000由于lagrange插值不能准确估计范围外的数值,因此1930年和2010年的误差较大。
2.a is 0.681361b is 0.2306203.(1)I1 =0.111463*********I =0.111571775612031(2)isimosion =0.111572023176794itquad =0.111463*********积分值为 0.111571775612031 显然simpsion公式精度更高。