数学实验报告
写实验报告是整理和表达思想的一个机会。可以根据教师指定的问题一一回答,也可以围绕实验内容,自己确定一个题目,选择一系列感兴趣的问题层层深入地进行讨论。实验报告的行文力求既简洁又具有可读性,教师依据学生对问题研究的深度给出成绩。
报告的主体大致包括五个方面 (不一定非得如此):
1.实验题目
2.实验目的:简要描述所要研究的问题,它背景和意义,本实验要达到的目的。
3.实验内容和方法:说明你是怎样安排你的实验, 并解释这样做的理由。
4. 实验结果和分析: 保留那些能充分说明问题的数据,必要的地方加上表格或图示,对数据进行分析、讨论, 说明发现了怎样的规律等。
5.数学分析 如有可能,应当用分析或理论的方法支持你的实验结果。
下面实一个实例:
数学实验报告(一)
一、实验题目:圆周率π的计算
二、实验目的:学习使用各种方法来计算π,并且通过实验加深对MATLAB编程思想的了解;学会利用数学工具解决实际问题。
三、实验内容和方法:
1.数值积分法
定积分 ,计算出这个积分的数值,也就得出了π的值。计算这个积分的方法主要有以下两种:
1. 1梯形公式:
设分点x1,x2,…x(n-1)将积分区间[a,b]分成n等分,即xi=a+i
(b-a)/n,0<=I<=n。所有的曲边梯形的宽度都是h=(b-a)/n。记yi=
f(xi).则第i个曲边梯形的面积Si近似地等于梯形面积,即:
Si=(y_(i-1)+yi)h/2。
将所有这些梯形面积加起来就得到:
S≈(b-a)[y1+y2+…+y_(n-1)+(y0+yn)/2]/n
这就是梯形公式。下面用MATLAB计算当n=1000时的S:
①pi_TX=
1. 2辛普森公式:
仍用分点Xi=a+i(b-a)/n(1<=i<=n-1)将区间[a,b]分成n等分,直线x=xi(1<=i<=n-1)将曲边梯形分成n个小曲边梯形。再作每个小区间[x(i-1),xi]的中点x_(i-1/2)=a+(i-1/2)(b-a)/n。将第I个小曲边梯形的上边界y=f(x)(x_(i-1/2)<=x<=xi)近似看作经过三点(x,f(x))
(x=x_(i-1),x_(i-1/2),xi)的抛物线段,则可求得:
Si≈(b-a)/(6n)*(y_(i-1)+4y_(i-1/2)+yi)
其中,y_(i-1/2)=f(x_(i-1/2))。于是得到:
S≈(b-a)/(6n)*[(y0+yn)+2(y1+y2+…+y_(n-1))
+4(y_1/2+y_3/2+…+y_(n-1/2))]
这就是辛普森公式。下面用MATLAB计算当n=1000时的S:
②pi_SPS=
2.泰勒级数法
利用反正切函数的泰勒级数有:
Pi/4=arctan(1)=1-1/3+1/5-…
但是这个级数无穷序列收敛太慢,不实用。要使泰勒级数收敛快,|x|
应当比1小,最好是远比1小。我们有Maqin公式:
π=16arctan(1/5)-4arctan(1/239)
利用ractan(x)的泰勒展开式求出arctan(1/5),arctan(1/239)的近似值,就可以由Maqin公式求出Pi的近似值了。
泰勒级数是无穷级数,实际计算时必然只能取它的前n项,这就必然会产生截断误差
En=|arctan(x)-(x-x^3/3+…+(-1)^(n-1)*x^(2n-1)/(2n-1))|当|x|<1时,可以简单地用En<x^(2n+1)/(2n+1)来估计截断误差。下面取展开式的前1000项,用MATLAB计算π:
③pi_Maqin=
3.蒙特卡罗法
单位圆的面积等于Pi。可以用数值积分公式来计算这个面积的近似值。另一个方法是用蒙特卡罗法,即用随机投点的方法来求这个面积π的近似值:任意产生区间[0,1]内的一组随机数x,y,则(x,y)就代表一个随机点P的坐标。这个点落在单位扇形内的充分必要条件是 。取n=100000个点,计算Pi:
④pi_MonteCarlo=
求π的方法还有多种多样,如蒲丰投针法、随机整数互素法、蒙特卡罗求体积法等等,但这些方法求出的值和真实值之间的偏差很大,就不在此分析了。
四、误差分析:
①pi_TX:
E_TX=|-Pi|/Pi
=
②pi_SPS:
E_SPS=|-Pi|/Pi
=
③pi_Maqin:
E_Maqin=|-Pi|/Pi
=0.
④pi_MonteCarlo:
E_MonteCarlo=(-Pi)/Pi
=
可见,在以上n的取值条件下,Maqin公式法所求出的π误差最小,辛普森公式求出的误差次之,而蒙特卡罗法的误差使最大的。
注:MATLAB程序可以写在正文,也可列于文后。
—完—
数学实验报告(二)
——经济增长模型
实验目的:
1 了解最小二乘法的原理
2 学会用MATLAB软件所提供的函数解决实际问题
实验内容:
增加生产、发展经济所依靠的主要因素有增加投资、增加劳动力以及技术革新等,在研究国民经济产值与这些因素的数量关系时,由于技术水平不像资金、劳动力那样容易定量化,作为初步的模型,可认为技术水平不变,只讨论产值和资金、劳动力之间的关系。在科学发展不快时,如资本主义经济发展的前期,这种模型是有意义的。
用Q,K,L分别表示产值、资金、劳动力,要寻求数量关系Q(K,L)。经过简化假设与分析,在经济学中,推导出一个著名的Cobb-Douglas生产函数:
Q(K,L)=aKαLβ, 0<α,β<1 (*)
式中α,β,a要由经济统计数据确定。
现有美国马萨诸塞州1900—1926年上述三个经济指数的统计数据,如表1,试用数据拟合的方法,求出(*)式中的参数α,β,a。
表 1
第一种方法:
由于产值Q、资金K、劳动力L之间满足著名的Cobb-Douglas生产函数关系:
Q(K,L)=aKαLβ, 0<α,β<1
我们可以用MATLAB软件中的curvefit()程序来作数据拟合,即寻求函数Q(K,L)中的未知参数a,α,β,使这个函数尽量逼近表1所给出的统计数据。
现在我们就根据curvefit()函数编以下程序
程序文件a1.m 如下
a=[1.05 1.18 1.29 1.30 1.30 1.42 1.50 1.52 1.46 1.60 1.69 1.81 1.93 1.95 2.01 2.00 2.09 1.96 2.20 2.12 2.16 2.08 2.24 2.56 2.34 2.45 2.58];
y=[1.04 1.06 1.16 1.22 1.27 1.37 1.44 1.53 1.57 2.05 2.51 2.63 2.74 2.82 3.24 3.24 3.61 4.10 4.36 4.77 4.75 4.54 4.54 4.58 4.58 4.58 4.54;1.05 1.08 1.18 1.22 1.17 1.30 1.39 1.47 1.31 1.43 1.58 1.59 1.66 1.68 1.65 1.62 1.86 1.93 1.96 1.95 1.90 1.58 1.67 1.82 1.60 1.61 1.64];
x0=[0.1,0.1,0.2];
x=curvefit('curvefun',x0, y,a)
其中的函数M——文件curvefun.m如下
function a=curvefun( x, y)
a=x(1)*(y(1,:).^x(2)).*(y(2,:).^x(3));
运行a1.m可得以下结果
x=
1.2246 0.4612 -0.1277
则可以得到
a=1.2246 b=0.4612 c=-0.1277
于是公式变为
Q(K,L)= 1.2246K0.4612L-0.1277
这就是产值Q随资金K、劳动力L的变化规律。
如果想得到更直观的关系也可以画出他们之间的关系图形。
在a1.m中加如下命令
m=linspace(0,2.7,27);n=linspace(0,2.7,27);
[M,N]=meshgrid(m,n);
a=x(1)*(M.^x(2)).*(N.^x(3));
surf(M,N,a);
xlabel('K'),ylabel('L'),zlabel('Q')
则可以得到图1所示的图形,其中z轴表示产值Q。
图1
我们知道以上用的MATLAB的convefit() 函数,可以根据需要创建各自的函数去逼近已知数据。而不象函数polyfit() 是用多项式去逼近已知数据。但是用convefit()必须先确定函数的形式,然后再确定参数。所以有一个确定函数的过程,本题由于在经济学上已经知道产值Q、资金K、劳动力L之间满足著名的Cobb-Douglas生产函数关系,因此就省略了机理分析确定函数形式的这个过程。若实际问题的机理不清楚,或太复杂,就需要我们自己去假设,去大致确定。用polyfit()就没有以上麻烦的步骤(因为他有确定的形式,只需要确定未知参数)。但正因为这样简单,决定了他解决问题的粗躁性。但有一点可以知道,convefit()函数可以解决polyfit()函数所能解决的问题。
第二种方法:
由于产值Q、资金K、劳动力L之间有关系
Q(K,L)=aKαLβ
注意到该等式两边取对数后,lnQ是lnK和lnL的线性函数,即
lnQ=lna+αlnK+βlnL;
于是,可用线性函数拟合的方法确定未知参数x=[lna α β]。
建立M文件:
Q=[1.05 1.18 1.29 1.30 1.30 1.42 1.50 1.52 1.46 1.60 1.69 1.81 1.93 1.95 2.01 2.00 2.09 1.96 2.20 2.12 2.16 2.08 2.24 2.56 2.34 2.45 2.58];
O=log([1.04 1.06 1.16 1.22 1.27 1.37 1.44 1.53 1.57 2.05 2.51 2.63 2.74 2.82 3.24 3.24 3.61 4.10 4.36 4.77 4.75 4.54 4.54 4.58 4.58 4.58 4.54;...
1.05 1.08 1.18 1.22 1.17 1.30 1.39 1.47 1.31 1.43 1.58 1.59 1.66 1.68 1.65 1.62 1.86 1.93 1.96 1.95 1.90 1.58 1.67 1.82 1.60 1.61 1.64]);
x0=[0.1,0.1,0.2];
x=leastsq('funleast',x0,[],[],O,log(Q));
a=exp(x(1)),
alfa=x(2),
beda=x(3),
得出:a=1.1766, α=0.4153, β=0.0619.
两种方法的比较:
由于两种方法作出的结果不同,我们可以用拟合出来的函数与以给数据点的最小平方误差来评判两结果的优劣。在程序a1.m后面增加几条语句
f1=curvefun(x,y);
e1=sum((a-f1).*(a-f1))
x2=[1.1766,0.4153,0.0619];
f2=curvefun(x2,y)
e2=sum((a-f2).*(a-f2))
输出e1=0.4230,e2=0.4456。可见第一种方法得出的结果好一些。即我们应采用关系式
Q(K,L)=1.2246K0.4612L-0.1277
作为产值Q随资金K、劳动力L的变化规律。
第二篇:数学实验报告 (2)
数学实验报告三
实验项目名称 MATLAB基础
所属课程名称 数学实验
实 验 日 期 20##-9-21
姓名(学号)周星(2010190135)
成 绩
数学与计算科学学院数学实验室
一、 实验目的
1. 掌握建立和执行M文件方法;
2. 熟悉利用向量运算来代替循环操作的方法;
3. 掌握利用if,for等结构进行程序设计
4. 掌握定义和调用MATLAB函数的方法。
二、 实验环境(使用软件)
MATLAB V6.5
三、 实验内容
1. 请分别用for结构和while结构设计一段程序,计算40!
解:>> s=1;
>> for n=1:40
s=s*n;
end
>> s
s =
8.1592e+047
>> clear;s=1;n=1;
>> while n<=40
s=s*n;
n=n+1;
end
>> s
s =
8.1592e+047
2. 产生20个[0,100]间随机数(整数),输出其中小于平均值的偶数。;
解: >> clear;
>> r=randint(1,20,[0,100]);
>> mr=mean(r);
>> k=1;
>> for i=1:20
if(mod(r(i),2)==0)&(r(i)<mr)
outr(k)=r(i);
k=k+1;
end
end
>> outr
outr =
46 44 62 40
3. 已知,编写函数function。
解:function s=f(m)
s=0;
for n=0:m
s=s+2^n;
end
4. 当n为100时,分别求下列各式的值(要求:使用点运算、sum求和、prod累乘)
(1)
解:>> A=[1:100];
>> s=1./(4.^A);
>> t=sum(s)
t =
0.3333
(2) ,
解:>> clear;
>> A=[1:100];
>> s=((2.*A).*(2.*A))./(2.*A-1)./(2.*A+1);
>> t=prod(s);
>> t
t =
1.5669
5. 设,,x为[-2,2]内10个数值的等差数组,用点运算等计算数列y1+y2,y1y2,y3/y1,。
解:(1)>> A=linspace(-2,2,10);
>> y1=1./(1+A.^2);
>> y2=exp(-A.^2./2);
>> B=y1+y2;
>> B
B =
0.3353 0.5907 0.9869 1.4930 1.9286 1.9286 1.4930 0.9869 0.5907 0.3353
(2) >> C=y1.*y2;
>> C
C =
0.0271 0.0872 0.2414 0.5544 0.9297 0.9297 0.5544 0.2414 0.0872 0.0271
(3) >> y3=sin(2.*A);
>> D=y3./y1;
>> D
D =
3.7840 -0.1042 -1.7770 -1.4039 -0.4512 0.4512 1.4039 1.7770 0.1042 -3.7840
(4) >> y4=sqrt(4-A.^2);
>> E=(5*y4-y1)./(y2.^2);
>> E
E =
-10.9196 67.3795 27.0390 13.6245 9.4400 9.4400 13.6245 27.0390 67.3795 -10.9196
6.(选做题)设,求,要求用阶梯法,将区间分为n等分计算(例如n=1000)。(要求:使用点运算、sum求和)
解:>> clear;
>> h=3*pi/1000;
>> A=[0:999];
>> s=exp(-0.5*h.*A).*sin(h.*A+pi/6)*h;
>> t=sum(s);
>> t
t =
0.9032