问题
看到有人问:
已知拱高10.4米的圆弧弧长36.7米,求圆的半径和圆心角(最好附带Matlab程序)。怎么限制x是锐角?
解答
顺便把三个软件都用一遍,用它们各自擅长的。实际上,这个问题而言,单独用任何一款都能画图和解方程(是的,Geogebra不但画图厉害,解这个方程也实际上顶呱呱)。
先根据大致情况推导一番(Geogebra作图)
因为r跟θ有如下关系,只须求一个r即可:
s=r?θ
可以利用的关系从图上看出还有:
x2=h(2r?h)
sinθ2=xr
由此三个关系知道:
x2=r2sin2θ2=r2sin2(s2r)
?f(r):=r2sin2(s2r)?h(2r?h)=0
或等价形式(三角函数倍角公式):
?f(r):=2h2?4hr+r2(1?cos(sr))=0
只须求解这个关于 r 的非线性方程的非负实根就可以了。通过导数判断趋势的方式是常规而严谨的方法,不过,这里就不啰嗦了,直接上图(Mathematica作图):
Plot[f[x],{x,1,20},PlotPoints->1000,AspectRatio->1,AxesOrigin->{0,0},PlotStyle->Red,AxesStyle->Arrowheads[.035],AxesLabel->(Style[#,Bold,Italic,18,FontFamily->"TimesNewRoman"]&/@{"x","y"}),ImageSize->600,TicksStyle->Directive[{FontFamily->"Arial",Black,12}],AspectRatio->2,Ticks->{Range[21]-1,Automatic},PlotRange->{{0,18},{-80,50}}]
从图上曲线趋势以及从导数的取值和符号应可以得到满足条件的r有三个。可以通过数值迭代的方法通过取相应初值得到对应根的数值解。这种方程求符号解难度稍高了些,不清楚是否已经有现成的方法,但数值解是必然可以的。
比如Matlab中fsolve可以轻松得到:
s=36.7;h=10.4;
x0=1.0;
r=fsolve(@(r)2*h^2+r^2-4*h*r-r^2*cos(s/r),x0);
disp(num2str(r,‘%10.8lf‘))
得到:
5.32327124
s=36.7;h=10.4;
x0=10;
r=fsolve(@(r)2*h^2+r^2-4*h*r-r^2*cos(s/r),x0);disp(num2str(r,‘%16.9f‘))
得到:
11.183055764
s=36.7;h=10.4;
x0=18;
r=fsolve(@(r)2*h^2+r^2-4*h*r-r^2*cos(s/r),x0);disp(num2str(r,‘%16.9f‘))
得到:
13.999546228
到这里关键的问题就算解决了。
关于限制“锐角”的问题,则不在本解答范畴。因为,原问题表达非常模糊,如果问题如所问已经给出,则θ有没有锐角完全取决于实际的s, h之类 的已知条件,已知条件给定的情况下,结果是无法调整的。只是讨论不同情形下的可能性。——如果是想讨论如何给定s,h才可能有锐角θ的可能才有一些意义。不过就不讨论了。
版权声明:stereohomology原创本文于CSDN博客,无原始链接之转载视为认可“10欧元每字符”之报酬。