数学建模第五章.docx

上传人:b****6 文档编号:6466177 上传时间:2023-01-06 格式:DOCX 页数:20 大小:196.89KB
下载 相关 举报
数学建模第五章.docx_第1页
第1页 / 共20页
数学建模第五章.docx_第2页
第2页 / 共20页
数学建模第五章.docx_第3页
第3页 / 共20页
数学建模第五章.docx_第4页
第4页 / 共20页
数学建模第五章.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数学建模第五章.docx

《数学建模第五章.docx》由会员分享,可在线阅读,更多相关《数学建模第五章.docx(20页珍藏版)》请在冰豆网上搜索。

数学建模第五章.docx

数学建模第五章

第五章作业

1,

(3)边界条件:

给定三次样条在左右端点的一阶导数

仿照例题5.1.4计算和绘图

程序:

x=[0,1,3,6,8,9];y=[-1,3,1,2,0,2,4,1];

pp=csape(x,y,'complete'),pp.coefs

s=@(t,tj,c)c

(1).*(t-tj).^3+c

(2).*(t-tj).^2+c(3).*(t-tj)+c(4);

d1s=@(t,tj,c)3.*c

(1).*(t-tj).^2+2.*c

(2).*(t-tj)+c(3);

d2s=@(t,tj,c)6.*c

(1).*(t-tj)+2.*c

(2);

d3s=@(t,tj,c)6.*c

(1).*ones(size(t));

fork=1:

pp.pieces

c=pp.coefs(k,:

);u=x(k):

.01:

x(k+1);v=s(u,x(k),c);

v1=d1s(u,x(k),c);v2=d2s(u,x(k),c);v3=d3s(u,x(k),c);

plot(u,v,'k',u,v1,'k:

',u,v2,'k-.',u,v3,'k--'),holdon

end

legend('三次样条(给定样条在区间左右端点的一阶导数)','样条的一阶导函数',...

'样条的二阶导函数','样条的三阶导函数')

y1=[1,4,3,2,3,1];

plot(x,y1,'ko'),holdoff

运行结果:

pp=

form:

'pp'

breaks:

[013689]

coefs:

[5x4double]

pieces:

5

order:

4

dim:

1

ans=

1.4903-2.4903-1.00003.0000

-0.48791.9807-1.50971.0000

0.1795-0.94690.55802.0000

-0.01570.6691-0.27540

-0.78740.57492.21262.0000

计算结果说明该三次样条的分段多项式形式为

 

2,

(1)多项式插值

计算多项式插值的MATLAB的函数M文件为:

functionyi=polyinterp(x,y,xi)

n=length(x);m=length(xi);

fork=1:

m

z=xi(k);s=0;

fori=1:

n

p=1;

forj=1:

n

ifj~=i

p=p*(z-x(j))/(x(i)-x(j));

end

end

s=p*y(i)+s;

end

yi(k)=s;

end

以下为用来绘图的MATLAB脚本:

x=[0,3,5,7,9,11,12,13,14,15];y=[0,1.8,2.2,2.7,3.0,3.1,2.9,2.5,2.0,1.6];

s=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];

xi=-1:

.01:

16;yi=zeros(size(xi));

figure

(1)

fork=1:

10

w=zeros(1,10);w(k)=w(k)+1;

wi=polyinterp(x,w,xi);

yi=yi+y(k).*wi;

subplot(5,2,k),plot(x,w,'k*',xi,wi,'k'),axis([-1,16,-1,3])

end

si=zeros(size(xi));

figure

(2)

fork=1:

10

w=zeros(1,10);w(k)=w(k)+1;

wi=polyinterp(x,w,xi);

si=si+s(k).*wi;

subplot(5,2,k),plot(x,w,'k*',xi,wi,'k'),axis([-1,16,-1,3])

end

figure(3),

plot(x,y,'k*',xi,yi,'k'),holdon

plot(x,s,'k*',xi,si,'k'),holdoff,

axis([-1,16,-1,5])

title('Lagrange插值多项式')

gtext('L_16(x)=1.8*I1+2.2*I2+2.7*I3+3*I4+3.1*I5+2.9*I6+2.5*I7+2*I8+1.6*I9');

gtext('R_16(x)=1.2*I1+1.7*I2+2.0*I3+2.1*I4+2*I5+1.8*I6+1.2*I7+1*I8+1.6*I9')

图像为:

figure1:

figure2:

 

figure3:

由图可知,高次的多项式插值会发生震荡,不可求面积。

(2)分段线性插值法

程序:

x=[0,3,5,7,9,11,12,13,14,15];y=[0,1.8,2.2,2.7,3.0,3.1,2.9,2.5,2.0,1.6];

s=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];

xi=-1:

.1:

16;yi=zeros(size(xi));

figure

(1)

fork=1:

10

w=zeros(1,10);w(k)=w(k)+1;

wi=interp1(x,w,xi);

yi=yi+y(k).*wi;

subplot(5,2,k),plot(x,w,'k*',xi,wi,'k'),axis([-1,16,-1,3]);

end

b1=trapz(x,y)

si=zeros(size(xi));

figure

(2)

fork=1:

10

w=zeros(1,10);w(k)=w(k)+1;

wi=interp1(x,w,xi);

si=si+s(k).*wi;

subplot(5,2,k),plot(x,w,'k+',xi,wi,'k'),axis([-1,16,-1,3])

end

b2=trapz(x,s)

figure(3),

plot(x,y,'ko',xi,yi,'-k'),holdon

plot(x,s,'ko',xi,si,'--k'),holdoff,

title('Lagrange插值多项式'),

axisequal

b1=

33.1500

b2=

22.4000

图像:

Figure1:

Figure2:

Figure3:

计算:

在这种方法下,截面面积为10.75

(3)三次样条插值

分析:

通过计算上,下轮廓的数值积分,然后作差得到截面面积

程序:

计算上轮廓的程序

x=[0,3,5,7,9,11,12,13,14,15];

y=[0,1.8,2.2,2.7,3.0,3.1,2.9,2.5,2.0,1.6];

pp=csape(x,y),pp.coefs;

s=@(t,tj,c)c

(1).*(t-tj).^3+c

(2).*(t-tj).^2+c(3).*(t-tj)+c(4);

fork=1:

pp.pieces

c=pp.coefs(k,:

);u=x(k):

.1:

x(k+1);v=s(u,x(k),c);

v1=d1s(u,x(k),c);v2=d2s(u,x(k),c);v3=d3s(u,x(k),c);

plot(u,v,'m'),holdon

end

legend('三次样条(边界条件2)')

plot(x,y,'ko'),holdoff

a=trapz(0:

.01:

15,ppval(pp,0:

.01:

15)),

axisequal

运行结果:

pp=

form:

'pp'

breaks:

[035791112131415]

coefs:

[9x4double]

pieces:

9

order:

4

dim:

1

a=

33.8639

图像:

计算下轮廓的程序

x=[0,3,5,7,9,11,12,13,14,15];

y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];

pp=csape(x,y),pp.coefs;

s=@(t,tj,c)c

(1).*(t-tj).^3+c

(2).*(t-tj).^2+c(3).*(t-tj)+c(4);

d1s=@(t,tj,c)3.*c

(1).*(t-tj).^2+2.*c

(2).*(t-tj)+c(3);

d2s=@(t,tj,c)6.*c

(1).*(t-tj)+2.*c

(2);

d3s=@(t,tj,c)6.*c

(1).*ones(size(t));

fork=1:

pp.pieces

c=pp.coefs(k,:

);u=x(k):

.1:

x(k+1);v=s(u,x(k),c);

v1=d1s(u,x(k),c);v2=d2s(u,x(k),c);v3=d3s(u,x(k),c);

plot(u,v,'m',u,v1,'k--',u,v2,'k-',u,v3,'k:

'),holdon

end

legend('三次样条(边界条件2)','样条一阶导函数','样条二阶导函数','样条三阶导函数',4)

plot(x,y,'ko'),holdoff

b=trapz(0:

.01:

15,ppval(pp,0:

.01:

15)),

axisequal

运行结果:

pp=

form:

'pp'

breaks:

[035791112131415]

coefs:

[9x4double]

pieces:

9

order:

4

dim:

1

b=

22.5722

图像:

结论:

截面面积(=a-b=33.8639-22.5722=)11.2917

 

4.解:

问题分析:

根据表5.5中测量的过桥车辆数据记录,然后估计一天过桥的车辆总数。

由题设可知一天过桥的车辆总数是每一时刻过桥的车辆数对时间积分得到。

可使用多项式、分段线性、三次样条三种一维插值的方法来进行求解,再用复化梯形求积公式来求面积,从而得出一天过桥辆车的总数。

显然,多项式插值一般适合于结点数目较少即多项式次数较低的情况,故不采用此种方法来进行插值。

所以我们选择用分段线性和三次样条插值方法进行插值,然后再进一步比较优劣,以更好地估计一天过桥的车辆总数。

模型的建立和求解:

先用Matlab编程进行线性分段插值和三次样条插值,再用复化梯形求积公式求得一天过桥的车的数量,同时得到对应的图像。

程序如下:

x=[0245678910.512.514161718192021222324];

y=[2202582512101279282210911893];

x0=x+(1/60)*(1/2);

y0=y/(1/60);

u=(1/60)*(1/2):

(1/60):

24+(1/60)*(1/2);

y1=interp1(x0,y0,u);

sum1=trapz(y1)*(1/60)

plot(u,y1,'k'),grid,xlabel('time/h'),

ylabel('一天过桥的车的数量'),title('线性分段插值')

运行结果:

sum1=13425

 

y2=spline(x0,y0,u);

sum2=trapz(y2)*(1/60)

plot(u,y2,'k'),grid,xlabel('time/h'),

ylabel('一天过桥的车的数量'),title('三次样条插值')

运行结果:

sum2=1.3192e+004

结果分析:

用分段线性插值方法和三次样条插值方法进行插值进行插值,用复化梯形求积公式求面积,得到一天通过桥梁的车总量分别为13425辆和13192辆。

比较图形,可以知道分段线性插值方法得出的结果更符合实际情况,拟合得更好更合理,于是得出一天过桥的车的数量是13425辆。

5.解:

问题分析:

设这辆汽车在t时刻的位置为x(t),则x(t)关于t的一阶导数

是这辆汽车在t时刻的速度,由表5.6可知x(t)在区间[0,13]的左、右端点的一阶导数就是在t=0s和t=13s时汽车的速度,均为20m/s,即

由上面的分析,首先求出x(t)的函数表达式,再对其求导得到一阶导数

,结合

的图像得到所要求解的问题的答案即可。

模型的建立和求解:

用Matlab样条工具箱函数scape计算给定左右端点一阶导数的三次样条,得到位置x关于时间t的函数。

Matlab程序如下:

x=[0,3,5,8,13];y=[20,0,65,121,194,313,20];

pp=csape(x,y,'complete'),pp.coefs

s=@(t,tj,c)c

(1).*(t-tj).^3+c

(2).*(t-tj).^2+c(3).*(t-tj)+c(4);

d1s=@(t,tj,c)3.*c

(1).*(t-tj).^2+2.*c

(2).*(t-tj)+c(3);

d2s=@(t,tj,c)6.*c

(1).*(t-tj)+2.*c

(2);

fork=1:

pp.pieces

c=pp.coefs(k,:

);u=x(k):

0.01:

x(k+1);v=s(u,x(k),c);

v1=d1s(u,x(k),c);v2=d2s(u,x(k),c);plot(u,v,'k',u,v1,'k-',u,v2,'k--'),holdon

end

legend('三次样条','样条的一阶导函数',...

'样条的二阶导函数')

y1=[0,65,121,194,313];

plot(x,y1,'ko'),holdoff

输出的结果:

pp=

form:

'pp'

breaks:

[035813]

coefs:

[4x4double]

pieces:

4

order:

4

dim:

1

ans=

0.3008-0.346920.00000

-0.69042.360526.040765.0000

0.2757-1.782027.1976121.0000

-0.14600.699723.9507194.0000

由此可以得到这辆汽车在t时刻的位置的分段函数x(t)如下:

对x(t)求导数得到导函数

也即速度关于t的函数如下:

 

(1)求t=10s时,这辆车的位置和速度

此题只需将t=10s代入

得到

也即在

时的位置是

,速度是

(2)由题意汽车在这段公路上行驶时,最大速度不能超过

,下面用matlab编程画出速度函数v(t)关于时间t的图像,matlab程序如下:

f1=@(x)0.9024*x.^2-0.6938*x+20;

f2=@(x)-2.0712*(x-3).^2+4.721*(x-3)+26.0407;

f3=@(x)0.8271*(x-5).^2-3.564*(x-5)+27.1976;

f4=@(x)-0.438*(x-8).^2+1.3994*(x-8)+23.9507;

plot(0:

0.01:

3,f1(0:

0.01:

3),3:

0.01:

5,f2(3:

0.01:

5),5:

0.01:

8,f3(5:

0.01:

8),8:

0.01:

13,f4(8:

0.01:

13),0:

0.01:

14,22.2),holdon

legend('0≤t≤3','3≤t≤5','5≤t≤8','8≤t≤13')

xlabel('时间(s)'),ylabel('速度(m/s)')

title('速度v(t)关于时间t的函数图5.2')

运行结果为:

由图像可以看出在

这两个时间段里面,汽车的速度已经超出了

,要求出汽车开始超速和结束超速的时间,只需要求出在在

这两个时间段里速度函数与

的交点的横坐标即可。

Matlab程序如下:

h1=@(x)f1(x)-22.2;

h2=@(x)f4(x)-22.2;

x1=fzero(h1,[0,3])

x2=fzero(h2,[8,13])

命令窗口输出结果是:

x1=1.9924,x2=12.1566。

因此,当

时,汽车开始超速,当

时,汽车结束超速,即当

时,汽车超速。

(3)由第

(2)题易知这辆汽车的最高速度在

这个时间段里面出现。

因此,只需求出在

内速度的最大值即可。

下面用matlab程序算出-f2的最小值点坐标(就可以求出f2的最大值点)

h3=@(x)-f2(x);

[u,v]=fminbnd(h3,3,5)

命令窗口输出如下:

u=4.1397,v=-28.7309

即在

时,速度达到最大值,为

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1