|
|

楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
来自: 中国广东深圳
关于渐开线函数问题
, x0 f. p' F' w. w6 A0 z( s渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。- u% [4 t/ I7 g* l6 r
这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。+ j$ z7 K6 j! T( }0 k
但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。" ~. Q: m; O a4 z V% D
下面给出一个程序代码,是计算这个函数的。
+ l/ {' z, l7 ~6 r% R代码:(Delphi编写)7 R% T& e1 P; ^1 F& t. |, q) p& A
function INV(x ouble):Double ; //自定义全局函数:渐开线函数
0 `3 g1 r3 I1 Vbegin( Q! a" P* ]2 ]' X1 |) Q
INV:=tan(x)-x;
0 \& a8 l, {+ O3 p. bend;
8 \0 |' o# i! [1 F
# q8 r8 X) e; u% }( Z0 sfunction ArcInv(x:double):double; //自定义全局函数:反渐开线函数! _1 o/ L) L5 M% c6 o: H
const
# K4 y( ]8 Q% T. C; k: u MaxError=0.0000000001;- r( D3 M! Y/ ^9 K7 A! W
MaxCount=100000;
- `" a$ G0 i6 w* K$ K0 ovar
V- f7 t/ |* I$ Z' H' o1 S x1,x2,Error:double; A3 r5 a$ z/ c+ b- K
num:integer;
- @- C: u0 C9 W1 `6 r& [ _begin
+ Q' |, g) x8 x6 O( F x1:=3*x;) M2 ^9 S( T3 P2 m
x1:=exp(ln(x1)/3); //x=(3x)^(1/3)% s ~, W3 B! c+ n1 c" [
error:=1; //maximum of error. o5 o* N' f& k5 n, p% j) O
num:=0; //counter of iterative
/ U4 G' m3 w% { while (Error>MaxError) and (num<MaxCount) do- p1 |$ Z4 X! {7 S
begin
" w5 H+ j. N" n6 s7 I x2:=arccos(sin(x1)/(x+x1));
1 Q3 h0 O* t! J6 a6 w8 ^2 U. `& j Error:=abs(x2-x1);1 W7 I: C3 Y2 B
inc(num);" a8 j6 }( P0 q9 F
x1:=x2;3 } D* @8 F' l! N$ ]+ K
end;
9 w* Q$ i9 Q3 |, p Result:=x1;# @: o/ a9 b' ]4 N5 ^% |' a; `
end; |
评分
-
查看全部评分
|