|
|

楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
来自: 中国广东深圳
关于渐开线函数问题" r( p3 l) N! Q
渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。9 O' n( W8 u' a t5 D
这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。* F8 `3 u1 e5 V( {
但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。" n6 x! z* z* _- }5 ^9 `2 G w
下面给出一个程序代码,是计算这个函数的。 F! k9 A1 y, ?$ A, @) x# N7 o x
代码:(Delphi编写)
8 [$ r1 M3 \$ |& ?5 j/ n( g% t' sfunction INV(x ouble):Double ; //自定义全局函数:渐开线函数
8 A/ x5 K A* V$ w1 C+ a5 Zbegin
]5 T' h, ~- N0 ~ INV:=tan(x)-x;
/ \: G% J% a* t$ t) Vend;; M% ~# K: Y$ W$ v5 A4 b
) J& H- X3 a9 N. x/ }" t
function ArcInv(x:double):double; //自定义全局函数:反渐开线函数
3 x* I9 _0 W+ ^; a% _( Pconst# B3 S1 z0 ~" O% G* d0 r# S
MaxError=0.0000000001;
3 |9 `0 g1 a8 _4 c MaxCount=100000;
, k; G! l( b, H' @. z5 ?var7 I5 c* K, W( O- w" ~2 R3 s
x1,x2,Error:double;7 }% `& [/ K2 w7 d
num:integer;6 A) u. l7 {! O4 D) s: j
begin/ i' A6 I/ D r9 N
x1:=3*x;
, q5 g1 ~3 y( b/ r" D( K x1:=exp(ln(x1)/3); //x=(3x)^(1/3)$ n! l% S, T, [! K* q- M8 R
error:=1; //maximum of error
$ E3 q: r( D9 w' S/ N num:=0; //counter of iterative
7 ]7 _. \, i# l while (Error>MaxError) and (num<MaxCount) do
# Q( C( X: e0 a2 ^+ H2 r* N begin' B: l0 C2 S7 f D7 Q, L
x2:=arccos(sin(x1)/(x+x1));$ e5 p% Y& V/ `$ Q- t7 }
Error:=abs(x2-x1);- q; `6 _+ m7 @; t
inc(num);4 s5 J7 }0 \# A3 p. R, S
x1:=x2;
% H( Y9 _8 T* G$ z5 F7 W8 U9 y end;
/ Y0 X( u. }! o: n2 D7 l: F Result:=x1;
* X$ ?2 j. K) i3 wend; |
评分
-
查看全部评分
|