|
|

楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
来自: 中国广东深圳
关于渐开线函数问题
7 e: ]/ e4 I7 g/ j渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。# S8 r9 s0 j7 ^- O! d! @+ K+ \8 @
这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。
5 E/ s- b; N3 v) A1 ?但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。4 _( u" _& I- D1 L! A+ ]
下面给出一个程序代码,是计算这个函数的。
1 d& @' ^- i6 k/ b& X) J代码:(Delphi编写)
0 U' W) o& E; ufunction INV(x ouble):Double ; //自定义全局函数:渐开线函数& }5 ~' H. a, `; C* P) G( V* B! d. V* v4 J
begin* n+ _% m# e* q/ }6 y. l5 _0 v# H
INV:=tan(x)-x;
* H7 R5 \6 R! E% gend; b p6 o0 I* f
& W: w5 n2 B& P# W% A. R; s& M" y4 Q8 Y
function ArcInv(x:double):double; //自定义全局函数:反渐开线函数# g; Y s9 M, W$ j: Z0 Y; a
const1 ?# R. A- y4 c. I6 B/ ?. G
MaxError=0.0000000001;# s- R) t6 _, K! x; T* t) j/ N
MaxCount=100000;1 a" Z, O0 {2 t m0 v, U4 ]
var
& M! [/ a! W7 d5 [ x1,x2,Error:double;
& b8 Q( @! ^5 A! W1 `" p3 r% W num:integer;
7 _- K2 j3 t2 x+ a' Rbegin7 a# b7 ~# A) P- e1 k/ n
x1:=3*x;
. A: a9 K2 }* n' J x1:=exp(ln(x1)/3); //x=(3x)^(1/3)
9 ~3 a3 [9 p& f. }& ], u2 I, m error:=1; //maximum of error
M0 J5 C2 y/ K) i# s num:=0; //counter of iterative6 {' ?! j/ a* N
while (Error>MaxError) and (num<MaxCount) do G$ F$ w1 c' m) z; ~$ J
begin& [8 M4 g$ p% g2 M0 T
x2:=arccos(sin(x1)/(x+x1));
* e' z& L. m( i8 I Error:=abs(x2-x1);% a% R! S# o8 k
inc(num);. _# ]' r3 H, |" d3 ]
x1:=x2;/ r; F. s6 b6 y/ w: }! b5 b
end;* L* T+ `; W3 P/ _! M' H
Result:=x1;
2 ^# U/ Z8 {6 g8 Gend; |
评分
-
查看全部评分
|