|
|

楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
来自: 中国广东深圳
关于渐开线函数问题6 Z$ h* Y+ @) C; ^
渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。8 ^: ?$ j* @! w z; G' i: ?" d7 c( W
这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。! b" n( W# W; R& R$ ?1 ~+ m
但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。
5 L6 V! R9 Z$ ]# `" ?下面给出一个程序代码,是计算这个函数的。, p' U- b6 E: g% N7 h _
代码:(Delphi编写)# X O& m1 P! ^; t- t
function INV(x ouble):Double ; //自定义全局函数:渐开线函数
+ R/ g( t# x A; ebegin
/ ^) f1 D' t. _# q/ @3 G INV:=tan(x)-x;
1 n2 r( s- S/ ~" K# N' G9 \end;
7 c3 T1 Q: ^: |6 x4 t! G o5 I
/ q, J. |4 S8 m2 d( d# [$ @function ArcInv(x:double):double; //自定义全局函数:反渐开线函数
* c; ]" \7 s7 C0 o: y4 Pconst
+ V) K8 I2 E4 R) w3 ^' J; s MaxError=0.0000000001;( A6 k# `, k, ?) \- Y
MaxCount=100000;
0 E0 v6 Y- N+ R' Tvar) j9 n- `4 S, W3 P) F
x1,x2,Error:double;
9 c) F8 A4 k7 j& d num:integer;# A% x. S7 w4 n5 k
begin# c+ U: ~0 D( z9 d
x1:=3*x;1 w% S' l6 l8 V0 n4 ?
x1:=exp(ln(x1)/3); //x=(3x)^(1/3)
2 h) R' _4 w W6 r error:=1; //maximum of error
' w" |' v! M- }, ~* C% R num:=0; //counter of iterative
1 _& G6 h' H7 W( U8 w# r while (Error>MaxError) and (num<MaxCount) do3 \5 Z1 d# G7 H. q/ p
begin/ U' r* k2 ~% I, m
x2:=arccos(sin(x1)/(x+x1));
# g4 }" {: K+ o Error:=abs(x2-x1);
0 y/ Q3 `7 n1 O$ \2 u# W4 X inc(num);
( X/ ?# {, u+ ~$ N; w x1:=x2;
7 t9 \0 X# |0 N" t. Z- N q end;5 I0 g! r5 D5 r
Result:=x1;0 Z2 ?3 x6 g9 x* P! W2 S
end; |
评分
-
查看全部评分
|