MATLAB数学实验报告.docx
《MATLAB数学实验报告.docx》由会员分享,可在线阅读,更多相关《MATLAB数学实验报告.docx(20页珍藏版)》请在冰点文库上搜索。
![MATLAB数学实验报告.docx](https://file1.bingdoc.com/fileroot1/2023-7/7/daee9022-fabb-4f92-a550-2b8b7e8f18ad/daee9022-fabb-4f92-a550-2b8b7e8f18ad1.gif)
MATLAB数学实验报告
MATLAB数学试验汇报
试验日期:
.5
学院:
能源与动力工程
班级:
化工11
组员:
王旭陆清华仲秋晨
一、试验目
1.学习MATLAB软件循环和选择结构,深入提升MATLAB编程能力;
2.经过对部分基础数学试验学习和实践,了解级数迫近和数值积分、用最小二乘法进行数据拟合等数学思想和数学方法,开拓数学视野,提升数学水平。
二、试验内容
1.
(1)问题:
对于数列{√n},n=1,2,···,求当其前n项和不超出1000时值以及和大小。
(2)分析:
这个问题书上已经有例题解答,不过书上程序运行结果最终一行结果并不是我们所要求解答案,而倒数第二行则是所求问题解。
以下是修改后程序已处理此问题。
(3)程序:
clear;clc;
n=1;
s=1;
whiles<=1000
fprintf('n=%.0f,s=%.4f\n',n,s)
n=n+1;
s=s+sqrt(n);
end
(4)运行结果
···
n=123,s=914.7651
n=124,s=925.9007
n=125,s=937.0810
n=126,s=948.3060
n=127,s=959.5754
n=128,s=970.8891
n=129,s=982.2469
n=130,s=993.6487
2.
(1)问题:
1790年到1980年各年美国人口数统计数据以下表:
美国人口统计数字(单位:
百万)
年份
1790
1800
1810
1820
1830
1840
1850
1860
1870
1880
统计
3.9
5.3
7.2
9.6
12.9
17.1
23.2
31.4
38.6
50.2
年份
1890
1900
1910
1920
1930
1940
1950
1960
1970
1980
统计
62.0
72.0
92.0
106.5
123.2
131.7
150.7
179.3
204.0
226.5
是依据前1数据,分别用Malthas模型和Logistic模型建立美国人口增加近似曲线(设美国人口总容纳量为10亿),并估计后人口数,经过与实际数据相比较,对两种估计结果进行分析。
(2)分析:
依据题目要求分别用Malthas模型和Logistic模型建立美国人口增加近似曲线。
(3)程序:
%Malthas
clear;clf
t=1790:
10:
1980;
N=[3.95.37.29.612.917.123.231.438.650.262.072.092.0106.5123.2131.7150.7179.3204.0226.5];
plot(t,N,'k.','markersize',20);
axis([179020803400]);
grid;holdon
pause(0.5)
n=20;
a=sum(t(1:
n));
b=sum(t(1:
n).*t(1:
n));
c=sum(log(N(1:
n)));
d=sum(t(1:
n).*log(N(1:
n)));
A=[na;ab];
B=[c;d];
p=inv(A)*B
x=1790:
;
y=exp(p
(1)+p
(2)*x);
plot(x,y,'r-','linewidth',2)
%Logistic
clear;clf
t=1790:
10:
1980;
N=[3.95.37.29.612.917.123.231.438.650.262.072.092.0106.5123.2131.7150.7179.3204.0226.5];
plot(t,N,'k.','markersize',20);
axis([1790208001000]);
grid;holdon
pause(0.5)
n=20;
k=1000;
M=N.^-1-k^-1;
a=sum(t(1:
n));
b=sum(t(1:
n).*t(1:
n));
c=sum(log(M(1:
n)));
d=sum(t(1:
n).*log(M(1:
n)));
A=[na;ab];
B=[c;d];
p=inv(A)*B
x=1790:
10:
2080;
y=1./((1./k)+exp(p
(1)+p
(2)*x));
plot(x,y,'r-','linewidth',2)
3.
(1)追击问题:
在一边长为1正方形跑到四个顶点上各站有1人,她们同时开始以等速度沿跑道追逐下一个人,在追击过程中,每个人时刻对准目标,试模拟追击路线。
(2)分析:
参考书上导弹追击飞机问题。
设4人为A,B,C,D,则先把A看做飞机,把追击AB看做导弹进行模拟;再把B看做飞机,把追击BC看做导弹进行模拟,以这类推。
(3)程序:
clear;clc;clf;
holdon
axis([01100110]);
grid
A=[0,0];
B=[100,0];
C=[100,100];
D=[0,100];
k=0;
v=1;dt=1;
whilek<10000;
k=k+1;
plot(A
(1),A
(2),'r.','markersize',15);
plot(B
(1),B
(2),'b.','markersize',15);
plot(C
(1),C
(2),'y.','markersize',15);
plot(D
(1),D
(2),'g.','markersize',15);
d=norm(A-B);e=(A-B)/d;
fprintf('k=%.0fA(%.2f,%.2f)B(%.2f,%.2f)C(%.2f,%.2f)D(%.2f,%.2f)d=%.2f\n',k,A
(1),A
(2),B
(1),B
(2),C
(1),C
(2),D
(1),D
(2),d)
ifd<1.5
break
end
B=B+v*dt*e;
d=norm(B-C);e=(B-C)/d;
C=C+v*dt*e;
d=norm(C-D);e=(C-D)/d;
D=D+v*dt*e;
d=norm(D-A);e=(D-A)/d;
A=A+v*dt*e;
pause(0.2)
end
(4)结果
4.
(1)问题:
【水塔流量估量】美国某州用水管理机构要求各小区提供以每小时多少加仑计用水量以及天天用水量。
很多小区没有测量流入或流出水塔水量装置,只能代之以每小时测量水塔中水位,其误差不超出5%。
淡水她天天有1到2次水泵供水,每次约两小时。
当水塔中水位下降到最低水位L时,水泵就自动向水塔输水直到最高水位H,此期间不能测量水位。
现在,已知该塔是一个高40ft(英尺),直径57ft正圆柱,某小镇一天水塔水位统计数据为下表:
某小镇某天水塔水位统计
时间(s)
水位(ft)
时间(s)
水位(ft)
0
31.75
46636
33.50
3316
31.10
49953
32.60
6635
30.54
53936
31.67
10619
29.94
57254
30.87
13937
29.47
60574
30.12
17921
28.92
64554
29.27
21240
28.50
68535
28.42
25223
27.95
71854
27.67
28543
27.52
75021
26.97
32284
26.97
79254
水泵开启
35932
水泵开启
82649
水泵开启
39332
水泵开启
85968
34.75
39435
35.50
89953
33.97
43318
34.45
93270
33.40
其中水位降至约27ft水泵开始工作,水位上升到35.5ft时停止工作。
试估量任何时刻t(包含书泵工作时间)从水塔中流出水流量Q(t),并估量一天总水量。
(2)分析:
1)拟合水位-时间函数
测量统计看,一天有两个供水时段(以下称第1供水时段和第2供水时段),和3个水泵不工作时段(以下称第1时段t=0到t=32284,第2次时段t=39435到t=75021和第3时段t=85968以后).对第1、2时段测量数据直接分别作多项式拟合,得到水位函数.为使拟合曲线比较光滑,多项式次数不要太高,通常在3~6.因为第3时段只有3个测量统计,无法对这一时段水位作出很好拟合.
2)确定流量~时间函数
对于第1、2时段只需将水位函数求导数即可,对于两个供水时段流量,则用供水时段前后(水泵不工作时段)流量拟合得到,而且将拟合得到第2供水时段流量外推,将第3时段流量包含在第2供水时段内.
3)一天总用水量估量
总用水量等于两个水泵不工作时段和两个供水时段用水量
之和,它们都能够由流量对时间积分得到。
(3)程序:
t1=[033166635106191393717921212402522328543322843943543318466364995353936572546057464554685357185475021859688995393270];
h=[31.7531.1030.5429.9429.4728.9228.5027.9527.5226.9735.5034.5033.5032.6031.6730.8730.1229.2728.4227.6726.9734.7533.9733.40];
t=t1./3600;
s=pi*(57*0.3048/2)^2;
v=h.*0.3048.*s.*1000./3.78541
c1=polyfit(t(1:
10),v(1:
10),3);
a1=polyder(c1);
tp1=0:
0.1:
9;
x1=-polyval(a1,tp1);
fprintf('f1(t)=%.4fx^2+%.4fx+%.4f\n',a1
(1),a1
(2),a1(3));
plot(tp1,x1,'g-')
c2=polyfit(t(11:
21),v(11:
21),3);
a2=polyder(c2);
tp2=11:
0.1:
21;
x2=-polyval(a2,tp2);
fprintf('f3(t)=%.4fx^2+%.4fx+%.4f\n',a2
(1),a2
(2),a2(3));
holdon
plot(tp2,x2,'b-')
xx1=-polyval(a1,[89]);
xx2=-polyval(a2,[1112]);
xx12=[xx1xx2];
c12=polyfit([891112],xx12,3);
tp12=9:
0.1:
11;
x12=polyval(c12,tp12);
fprintf('f2(t)=%.4fx^3+%.4fx^2+%.4fx+%.4f\n',c12
(1),c12
(2),c12(3),c12(4));
holdon
plot(tp12,x12,'y-')
dt3=diff(t(22:
24));
dv3=diff(v(22:
24));
dvt3=-dv3./dt3;
t3=[2021t(22)t(23)];
a=[-polyval(a2,t3(1:
2))];
xx3=[advt3];
c3=polyfit(t3,xx3,3);
tp3=21:
0.1:
24;
x3=polyval(c3,tp3);
fprintf('f4(t)=%.4fx^3+%.4fx^2+%.4fx+%.4f\n',c3
(1),c3
(2),c3(3),c3(4));
holdon
plot(tp3,x3,'r-')
y1=0.1*trapz(x1);
y2=0.1*trapz(x2);
y12=0.1*trapz(x12);
y3=0.1*trapz(x3);
y=(y1+y2+y12+y3)
grid
(4)结果:
f1(t)=-143.7890x^2+1656.5813x+-13731.5134
f3(t)=-86.8481x^2+3341.3267x+-46996.7559
f2(t)=-903.1315x^3+26738.6695x^2+-257790.0151x+823129.9568
f4(t)=-3.8291x^3+41.6810x^2+3339.0536x+-37911.0031
总水量y=
3.3167e+05
5.
(1)问题:
试根据级数迫近和数值积分思想方法,计算π近似值(正确到10^-5)。
要求:
1)利用级数展开公式(7-2)—(7-6)来计算。
2)利用梯形法公式(7-10)、抛物线法公式(7-12)分别进行计算并加以比较。
(2)程序:
1)7-2
clc;clear;
n=0;r=1;
p=0;k=-1;
whiler>=1.0e-5
n=n+1;
k=k*(-1);
p1=p+k/(2*n-1);
r=abs(4*(p1-p));
fprintf('n=%.0f,p=%.10f\n',n,4*p1);
p=p1;
end
运行结果:
…
n=199979,p=3.
n=199980,p=3.
n=199981,p=3.
n=199982,p=3.
n=199983,p=3.
n=199984,p=3.
n=199985,p=3.
n=199986,p=3.
n=199987,p=3.
n=199988,p=3.
n=199989,p=3.
n=199990,p=3.
n=199991,p=3.
n=199992,p=3.
n=199993,p=3.
n=199994,p=3.
n=199995,p=3.
n=199996,p=3.
n=199997,p=3.
n=199998,p=3.
n=199999,p=3.
n=00,p=3.
n=01,p=3.
7-3
clc;clear;
n=0;r=1;p=0;
k=-1;a=1;b=1;
whiler>=1.0e-5
n=n+1;
k=k*(-1);
a=4*a;b=9*b;
p1=p+k/(2*n-1)*(2/a+3/b);
r=abs(4*(p1-p));
fprintf('n=%.0f,p=%.10f\n',n,4*p1);
p=p1;
end
运行结果:
n=1,p=3.
n=2,p=3.
n=3,p=3.
n=4,p=3.
n=5,p=3.
n=6,p=3.
n=7,p=3.
n=8,p=3.
7-4
clc;clear;
n=0;r=1;p=0;
k=-1;a=1;b=1;
whiler>=1.0e-5
n=n+1;
k=k*(-1);
a=25*a;b=239*239*b;
p1=p+k/(2*n-1)*(20/a-239/b);
r=abs(4*(p1-p));
fprintf('n=%.0f,p=%.10f\n',n,4*p1);
p=p1;
end
运行结果:
n=1,p=3.
n=2,p=3.
n=3,p=3.
n=4,p=3.
n=5,p=3.
7-5
clc;clear;
n=0;r=1;p=0;
k=-1;a=1;b=1;
whiler>=1.0e-5
n=n+1;
k=k*(-1);
a=9*a;b=49*b;
p1=p+k/(2*n-1)*(6/a+7/b);
r=abs(4*(p1-p));
fprintf('n=%.0f,p=%.10f\n',n,4*p1);
p=p1;
end
运行结果:
n=1,p=3.
n=2,p=3.
n=3,p=3.
n=4,p=3.
n=5,p=3.
n=6,p=3.
>>
7-6
clc;clear;
n=0;r=1;p=0;k=-1;
a=1;b=1;c=1;d=1;
whiler>=1.0e-5
n=n+1;
k=k*(-1);
a=28*28*a;b=443*443*b;c=1393*1393*c;d=11018*11018*d;
p1=p+k/(2*n-1)*(22*28/a+886/b-5*1393/c-110180/d);
r=abs(4*(p1-p));
fprintf('n=%.0f,p=%.10f\n',n,4*p1);
p=p1;
end
运行结果:
n=1,p=3.
n=2,p=3.
n=3,p=3.
>>
2)7-10
clc;clear;
f=inline('4./(1+x.*x)');
a=0;b=1;n=1;
h=(b-a)/n;
t1=h/2*(f(a)+f(b));
er=1;k=1;
whileer>1.0e-5
s=0;
fori=1:
n
s=s+f(a+(i-1/2)*h);
end
t2=(t1+h*s)/2;
er=abs(t2-t1);
fprintf('n=%.0f,p=%.6f,r=%.6f\n',k,t2,er);
n=2*n;h=h/2;t1=t2;
k=k+1;
end
运行结果:
n=1,p=3.100000,r=0.100000
n=2,p=3.131176,r=0.031176
n=3,p=3.138988,r=0.007812
n=4,p=3.140942,r=0.001953
n=5,p=3.141430,r=0.000488
n=6,p=3.141552,r=0.000122
n=7,p=3.141582,r=0.000031
n=8,p=3.141590,r=0.000008
7-12
clc;clear;
f=inline('4./(1+x.*x)');
a=0;b=1;n=1;
z=quad(f,a,b);
fprintf('z=%.10f\n',z)
运行结果:
z=3.
6.
(1)问题:
(排洪量)某河床横断面如图所表示,为了计算最大排洪量,需要计算它最大断面积,试依据图示测量数据(单位:
米)用梯形法计算其断面积。
河道河床截面图
(2)程序:
s1=0.5*1*4;
s2=0.5*(1+3)*(10-6);
s3=0.5*(3+6)*(12-10);
s4=0.5*(6+8)*(15-12);
s5=0.5*(8+9)*(22-15);
s6=0.5*(9+5)*(28-22);
s7=0.5*(3+5)*(34-28);
s8=0.5*3*(40-34);
s1+s2+s3+s4+s5+s6+s7+s8
(3)结果:
ans=
174.5000
三、试验小结
1.经过此次试验,我们熟练掌握了MATLAB软件循环和选择结构使用方法,提升了使用MATLAB编程处理问题能力;
2.经过对部分基础数学试验学习和实践,我们掌握了级数迫近和数值积分、用最小二乘法进行数据拟合等数学思想和数学方法,能够处理生活中部分较为复杂数学问题。