本试验取材于中南大学《科学计算与MATLAB语言》。
下面进行题目描述与题目分析和解答:
根据实际测量,得到河流某处宽600m,其横截面不同位置某一时刻的水深如下表所示:
①若此刻水流的流速为0.6m/s,试估计该河流此刻的流量。
②已知x方向[50,60]区间为坡式护岸的下部护脚部分,根据相关堤防设计规范,抛石护岸坡度应缓于1:1.5(正切值),请估计水流冲刷是否已破坏该区域的护脚.
看到题目的时候,看见两者相对应,先画出散点图,然后
- 拟合出河床曲线
- 定积分计算,求得河流横截面也就是可估计流量
- 根据河床曲线,计算导数,
便可判断导数函数值是否大于1:1.15,如果大于,那太陡,可能水流冲刷破坏该区域的护脚.
第(1)问代码:
>> xi=0:50:600;
>> yi=[4.4,4.5,4.6,4.8,4.9,5.1,5.4,5.2,5.5,5.2,4.9,4.8,4.7];
>> p=polyfit(xi,yi,3);
>> plot(xi,yi,'o',xi,polyval(p,xi),'r');
>> syms y x;
>> y=poly2sym(p,x);
>> s=int(y,x,0,600);%%计算横截面积
>> v=s*0.6;
>> eval(v)
ans =
1.7874e+003
>>
曲线倒着的可以求面积,但无法求函数斜率,也就是需要把函数再倒一下
第(2)问代码:
>> xi=0:50:600;
>> yi=[4.4,4.5,4.6,4.8,4.9,5.1,5.4,5.2,5.5,5.2,4.9,4.8,4.7];
>> yn=-yi;
>> p=polyfit(xi,yn,3);
>> plot(xi,yn,'o',xi,polyval(p,xi));
>> syms y x yii;
>> y=poly2sym(p,x);
>> yii=diff(y,x);
>> x=50:60;
>> y=polyval(p,x);
>> k=diff(y)/1;
>> all(abs(k)<1/1.5)
ans =
1
>>
总结:河流不会冲毁护脚!