fl202 发表于 2015-11-23 10:05:44

前边的公式列错了。

楼上公式错了吧?应该是:cos(L/2R)=(R-H) / R

设弦高H和弧长L,半角x(弧度值),求半径R。有方程:
1    L=R*2*x
2    H=R*(1-cos(x) )
方程式2/1可以联立得超越方程3
x=-L/2/H*cosx+L/2/H
解出x,再根据1或者2即可得R。
超越方程:
http://baike.baidu.com/link?url=tzsPzqtmOgOioG7LOXF0UJ1Z5A33I7nwzGkyHD3bT_DT1FDIhAYixY9FrXaLJk-q5h6ciwtsOn00KB3ptRHjmK
当一元方程ƒ(z)=0的左端函数ƒ(z)不是z的多项式时,称之为超越方程。如指数方程、对数方程、三角方程、反三角方程等。
具有未知量的对数函数、指数函数、三角函数、反三角函数等的方程。例如
2^x=x+1,sin x+x=0。

超越方程一般没有解析解,而只有数值解或近似解,只有特殊的超越方程才可以求出解析解来。
求解超越方程的近似解法有很多,图象法虽然形象,但得到的解误差太大了。常用的近似解法有牛顿切线法、幂级数解法等等,现在也可以编制一段程序用计算机求解,或者利用现成的软件求解,例如大多数电脑都安装的EXCEL也可以用来求解超越方程。
matlab是获得数值解的一个最强大的工具。常用的命令有fsolve, fzero 等,但超越方程的解很难有精确的表达式,因此在matlab中常用eval()函数得到近似数值解,再用vpa()函数控制精度。
在数学中有时候可以通过利用偶函数的单调性,从一个两个对称的区间中任意选取一个,当在一个区间内有一个值时,相应的也可以得到这个值在对应区间内的对应值。
牛顿法迭代求解
然后迭代求解
一直求的所需精度的解为止。



lucas_3333 发表于 2015-11-23 17:22:54

(defun ACOS (num)
(cond
    ((equal num 1 1e-9) 0.0)
    ((equal num -1 1e-9) pi)
    ((< -1 num 1)
   (atan (sqrt (- 1 (expt num 2))) num)
    )
)
)





头大无恼 发表于 2018-1-7 08:59:59

https://wenku.baidu.com/view/a9f48085b9d528ea81c779c5.html

原帖在这↓

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=171157&highlight=%BB%A1%B3%A4
页: 1 2 [3]
查看完整版本: 已知弦高H和弧长L,求半径R