靠墙有一宽为a高为b的不可压花棚,至少要多长的梯子才能越过花棚斜靠墙上?
假设:1.梯子是直的;2.墙与地面垂直;3.地面是平面;4.花棚的顶与墙垂直。 模型1:考查过(3,2)点的直线与两轴交点间长度最小值,若≥7,就可以在x轴上求出最小值点,放置梯子。 模型2:(仿真模拟)将梯子一端放置于x轴上不同点,并令其过(3,2)点,由长度7求出另一端点x坐标,当x≤0,则梯子长度够用,对应x轴上的点为梯子放置点,若始终x>0,则梯子不够长。
示意图: >with(plottools):l:=animate(2-2*(x-3)/t,x=0..6,t=1.7..4,color=green,linestyle=20):p:=polygon([[0,0],[0,2],[3,2],[3,0]],color=red,linestyle=20,thickness=3):display(l,p);
优化模型:梯子看作直线,棚宽a=3,棚高b=2作为平面上点的坐标,考查过(3,2)点直线y-2=-k(x-3)在两轴交点间距离的最小值。两轴交点为(0,2+3k),(3+2/k,0),交点间距离L=[(3+2/k)^2+(2+3k)^2]^0.5 (k为斜率绝对值,也可用x轴交点x0作为自变量)
> l:=((3-2/k)^2+(2-3*k)^2)^0.5: > plot(l,k=0.1..5); > l0:=minimize(l,k,0.1..10); > fsolve(l=7.0235,k);
用极值函数extrema:(以-k=-2/(t-3)替换上式,t为直线与x轴交点)
> l:=(t^2+(2+6/(t-3))^2)^0.5: > readlib(extrema):extrema(l,{},t,'s');evalf(s); > assign(s[3]):evalf(l);t:='t':
仿真:y-2=k(x-3),取x=x0,y=0求出k=2/(3-x0),由此得长度=7时另一端点x坐标7cos(a): x1=x0-7*(x0-3)/[2^2+(3-x0)^2]^0.5,对x0取步长对实际仿真。
> restart: > a:=3.1: > for x0 from 3 by 0.01 to 7 do x:=x0+7*(3-x0)/sqrt(4+(3-x0)^2):if x<a then a:=x else print(x0,x);x0:=7 fi od: > restart: >a:=seq([3+.3*n,0*n],n=1..10):b:=seq([3+.3*n-7*.3*n/sqrt(4+(.3*n)^2),14/sqrt(4+(.3*n)^2)],n=1..10): > with(plots):with(plottools): >for i from 1 to 10 do l:=line(a,b,color=blue,thickness=2) od: >h:=polygon([[0,0],[0,2],[3,2],[3,0]],color=red,thickness=3):display(l[1],l[2],l[3],l[4],l[5],l[6],l[7],l[8],l[9],l[10],h);
思考问题:当梯子长L=6.5,棚高b=2时,要保证梯子不会压坏花棚,花棚最宽可为多少。 |