|
楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
关于渐开线函数问题
$ F9 b" J% U, z6 G4 I渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。
+ S. H0 t! V; n. b6 P/ a' Y0 G$ T这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。0 o/ d9 n7 M( `1 ]% O6 I% \
但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。
- k l5 t! C+ s下面给出一个程序代码,是计算这个函数的。
3 y* Z- n' N% ]: ?9 [# J, A7 r代码:(Delphi编写). A: m' P$ `2 t$ k9 H4 o# y3 c& p% d
function INV(xouble):Double ; //自定义全局函数:渐开线函数9 f7 y$ \* d" b1 g" R! I
begin
% ^' S% T( b3 F% |5 A) B INV:=tan(x)-x;
1 u) y7 i Q q6 V; t, Wend;
: B( m* I- _! V. b9 j
$ J$ p3 c+ m- c& \function ArcInv(x:double):double; //自定义全局函数:反渐开线函数
! r4 A; Q. G2 b. d" lconst5 j* g( Y* K4 \- c, m
MaxError=0.0000000001;
# h8 \# {4 C& o3 H: ? MaxCount=100000;
2 Q# l, U% G; Evar7 _# k" _! A( A2 T) `
x1,x2,Error:double;; m6 A; \# |& H, [! H- D9 i3 t; T
num:integer;( d% Z8 n2 U8 `( p9 j
begin* n9 u+ L/ P- U) Q/ b/ l y
x1:=3*x;4 s# P( C; Q; W, X2 V( y( G1 q
x1:=exp(ln(x1)/3); //x=(3x)^(1/3)% t B3 d4 [, I6 C2 [2 k Z9 G
error:=1; //maximum of error# e3 d4 G( C; R. Z0 f! o
num:=0; //counter of iterative
* Y3 U- w/ Y3 t. b- e while (Error>MaxError) and (num<MaxCount) do
9 C/ W0 p( [ v# H! Z6 k z begin
E! O5 C, M7 n5 r x5 {- Q x2:=arccos(sin(x1)/(x+x1));
# M' G" m1 K7 F$ f0 z, W0 r Error:=abs(x2-x1);6 [% a. l) g# ?
inc(num);2 G6 v8 @ g5 h8 l6 G
x1:=x2;
/ n& k+ ^) K Z' u% s( j P end;
4 `3 I, |3 f2 P9 F, Z0 m% E. u+ S Result:=x1;% `3 _5 b5 ^; r q" h+ @
end; |
评分
-
查看全部评分
|