用数值分析方法做一道平面解析几何数学题

问题

看到有人问:

已知拱高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欧元每字符”之报酬。

时间: 2024-10-12 16:36:10

用数值分析方法做一道平面解析几何数学题的相关文章

普通方法、类的方法、匿名方法 做参数

1.普通方法做参数: 如果方法 是类的方法,那么就不能当函数的参数了,编译会报错,就是说 类的方法的指针 与 普通方法的指针是有区别的,毕竟类的方法的指针 可能包含了 面向对象的 继承 覆盖 等信息: 2.类的方法做参数,就是说类的方法的类型要加上 of object: 3.匿名方法 做参数,要加上 reference to 最终的调试代码: unit Unit6; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils,

使用Student T'test方法做性能测试

性能测试 日常工作中对比函数间的快慢时,最直接的方法就是根据timer:tc/1结果的时间来衡量,比如想知道lists:reverse/1与直接使用自己写的尾递归函数谁更快?最直接的方法就是 -module(test). -export([start/1]). start(Len) -> L = lists:seq(1, Len), Max = 1000, Time1 = benchmark(Max, fun() -> lists:reverse(L) end), Time2 = benchm

编程做一道高中数学题

看到一同学发了个高中的数学题,一时想用编程方法来练练算法,虽然很简单,就当锻炼一下逻辑,毕竟很少有时间再接触这些了. 题目:一个七层的塔,每层所点灯的盏数都等于上面一层的2倍,一共381盏灯,则底层所点灯的盏数是? 我用的递归方法,也没啥好说的,比较传统的方法: <!doctype html> <html> <script type="text/javascript"> var key=1,num=0,s=1,add=1; function find

【整理】最近做的几道数学题

数学题也是有意思 那么总结一下 T1.[Bzoj2751][HAOI2012]容易题 题意 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些限制即A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,求出所有可能的数列的积的和. 题解 考虑一个式子(...)(...)(...),()内为一些数相加,根据乘法分配律,打开这个式子就是每次从每个括号中选一个元素,再把所有可能选择的结果加起来. 这件事情就是我们题目的设问,于是我们只要算出来每个位置sigma可能的选择

两个方法做APP界面展示图片

今天就教大家怎么做出这种厚度的地方还不是白色的,而是根据界面内容交相呼应的图案的APP界面展示图片. 以苹果5S的尺寸为例. 步骤: 1.新建一个画布尺寸为:640*1136,然后保存,命名如:5S效果图模板 2.再新建一个画布,命名如:效果图展现 2.再新建一个画布,命名如:效果图展现 尺寸随意,可以大点,自己看情况吧. 3.将刚才保存的那个5S效果图模板.psd拖到这个画布中. Ctrl+T变换到合适的尺寸,倾斜到合适的透视效果. 4.然后双击”5S效果图模板”这个图层. 这就是智能对象的好

一道有趣的数学题(一)

前段时间看到了一道十分有趣的数学题,如下 \[ \begin{align*} &x+y+z=1 \&x^2+y^2+z^2=2 \&x^3+y^3+z^3=3 \&\cdots \&x^5+y^5+z^5=? \end{align*} \] 这规律看着挺明显哈,那\(x^5+y^5+z^5\)肯定等于\(5\)啊,这题小学僧都随便做~那很不好意思哦,这道题的答案其实是\(6\)(笑. 我们先从一个最简单的做法做起,显然\(x,y,z\)是如下方程的解 \[ \beg

一道有趣的数学题

班主任给了我一道数学题: 求证an都能表示成两个自然数的平方和. [分析] 不会就打表(OI后遗症) 那么我们发现an的第2个平方在an+1出现在了第一个(按从小到大) 这个就很py了啊,再看看第二个有啥关系..咦好像是比两倍多一点,多多少呢?咦,1.3.7.17--这不就是我找的那个规律了吗 啊我们就能猜想: 然后我们归纳一波 对于n<=5显然成立(上表),对于n>=6: 假设对于n=i成立,那么就有 目标:证明下式成立 这是啥呢?令A'=B,B'=A+2B,代入即可. 剩下的故事啊就是把递

如何用敏捷方法做测试?

敏捷的核心就是个"快"字:快速开发,快速推出,快速验证产品方向.说白了就是管理每个小目标,保证他们能够按时完成. 想要运用敏捷方法,要注意几点: 1.开发做完一个小功能马上开始测试,减少等待时间. 2.测试的工作量更加分散,不会出现一段时间无事可做,一段时间忙的要死的情况. 3.每次的bug都是针对刚刚开发完的功能,开发处理起来会更得心应手,减少沟通成本. 在与同事沟通中,我还了解到,将bug加入开发计划会大大影响他们的目标完成进度,往往问题刚整理出一些思路,就因为某些bug需要处理而

NGUI之Slider,最简单的方法做进度条。

既然标题是最简单的,那么很多东西就不需要我们自己做了,使用的是NGUI的示例,只针对初学者,接下来让我们来做一个最简单游戏设置里的声音控制. 1.导入NGUI: 2.找到NGUI的Menu示例Demo,文件夹为NGUI\Examples\Scenes 打开Example 3 - Menu场景 3.在Hierarchy视图中找到Option - Voice游戏对象[灰色的active没有启用的对象] 4.复制改游戏对象,并在你的项目的Hierarchy视图中粘贴到合适的位置,并将active启用(