|

楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
来自: 中国广东深圳
关于渐开线函数问题5 E! u7 C+ f# M" [- F* L L
渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。$ t. d8 t/ F1 J" ~: I
这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。
, b9 j. E P/ P) x3 n但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。# W+ S# m) V( ]" W" O
下面给出一个程序代码,是计算这个函数的。
* \, { f+ J& g! _4 k: F' i* Q代码:(Delphi编写)
; n3 y& k! y. W V- }function INV(x ouble):Double ; //自定义全局函数:渐开线函数8 v, ~" s$ K* L2 q+ B; R
begin
2 l/ {& B$ n! d2 V$ T INV:=tan(x)-x;2 a* H3 R$ Y9 S& M2 f. Z
end;
# ?5 d, \# o: u2 @- W/ w9 F' T/ ?# d) _# x0 [% P
function ArcInv(x:double):double; //自定义全局函数:反渐开线函数
& d( a2 T1 Y- j/ I! V ^! [const% x: I7 ^0 H: t9 P/ |! [/ W) c: q
MaxError=0.0000000001;
) a7 w Y% ?0 E' z) r# } MaxCount=100000;
6 j$ p( R6 q6 E ]" L Mvar
: {' j1 l$ S/ k8 Q7 D! x x1,x2,Error:double;
4 m4 F" a, ?; p4 D& H num:integer;
# J3 ]" q& L' vbegin' ]; D- a: \9 b f! I5 ]
x1:=3*x;
* }+ o% h" }% t$ K- Z x1:=exp(ln(x1)/3); //x=(3x)^(1/3). o. A" V7 ^+ i, K
error:=1; //maximum of error
- ^# p9 H" I) U2 g' M* g: x, Z% F num:=0; //counter of iterative
0 f v( x; H8 k( R( X# r4 q* d. ^ while (Error>MaxError) and (num<MaxCount) do3 @4 i! N) Y+ D1 s
begin. x$ I" q! [/ r) P, q, G
x2:=arccos(sin(x1)/(x+x1));0 V8 D2 X- m0 V q3 }8 s4 n
Error:=abs(x2-x1);
% V+ h- G2 ]; ~+ d& e- ~6 D$ P inc(num);
Q2 v; X* K4 l9 N. ]5 J x1:=x2;
9 [& d2 W0 M/ q6 y$ Y end;! o9 W u" y* Q5 H4 F* j# h( J+ B9 Q$ K
Result:=x1;: {& H" u8 u/ S6 K6 ^ Z1 Q; Q
end; |
评分
-
查看全部评分
|