|

楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
来自: 中国广东深圳
关于渐开线函数问题
: h+ @% v7 j: E- _( B- R# d渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。- ?- y& g5 E7 q* Q$ E4 K, s% j; ^
这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。7 s/ A+ p! I2 |/ \% L
但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。6 P6 q. g8 K7 r& W! D
下面给出一个程序代码,是计算这个函数的。: ?7 ^( ?" P& l$ |, m9 |9 B
代码:(Delphi编写)
) p) X/ d/ H$ P9 ]$ W$ lfunction INV(x ouble):Double ; //自定义全局函数:渐开线函数
6 V% @* M4 p9 l$ C& fbegin
, {- r9 k8 L& \# y7 N# ] INV:=tan(x)-x;; k7 M8 n6 n: F' M8 W9 B
end;. m {5 `) z, o& X( `
& x9 e7 Z( H/ `
function ArcInv(x:double):double; //自定义全局函数:反渐开线函数! Q% c, q, M* s, i
const$ r4 D5 R1 _% O9 {
MaxError=0.0000000001;: S$ d8 z% M [/ {
MaxCount=100000;7 o5 Z$ e0 J N. `
var
s5 D) }, h# B) C3 V x1,x2,Error:double;
0 D, F% e* [1 h: P% R num:integer;, x" r- I/ w" B+ H, E' u2 V% N
begin
, ?' A& b+ S" w$ C. ? x1:=3*x;4 S1 s+ r1 \. O: y8 \+ K2 c9 P
x1:=exp(ln(x1)/3); //x=(3x)^(1/3)
/ Z( i- Z8 M" x# A error:=1; //maximum of error3 {7 c: o8 e9 C% L& M
num:=0; //counter of iterative
: x5 A1 s7 |4 L$ R0 z- K( a- |3 u while (Error>MaxError) and (num<MaxCount) do
; m% l' [0 U- f5 z4 }6 a# {7 M begin7 F4 v; s, m4 \" ]
x2:=arccos(sin(x1)/(x+x1));
+ O7 ^- H! f4 F Error:=abs(x2-x1);
( |8 y% z9 k5 p" P) T inc(num);& |; M; F4 v; N& Y/ d. {
x1:=x2;
# J. l. } L9 n end;6 [$ L2 q, ?# I1 t" x. d6 l% D
Result:=x1;7 M4 i& a: z1 s3 `" o
end; |
评分
-
查看全部评分
|