|

楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
来自: 中国广东深圳
关于渐开线函数问题
1 S% a$ g6 H2 n |8 t% d9 b渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。' `; e% x X* o5 _( @5 T# g
这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。
1 r! G& K/ ~7 \* e$ l但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。
! A& b" o! B E, F" t/ T下面给出一个程序代码,是计算这个函数的。% M8 x* y3 E* Q5 D% q) u' K
代码:(Delphi编写)0 F1 j6 r0 C5 ]$ O+ i5 E
function INV(x ouble):Double ; //自定义全局函数:渐开线函数3 F. Q0 q( j, m; i5 w, V- J
begin) S- d& Z+ s; O2 f! w, u, z
INV:=tan(x)-x;4 R- I; N& b4 k3 ^( y
end;8 w& l2 b e! q1 f
4 {' A/ l) D/ Q/ M2 _
function ArcInv(x:double):double; //自定义全局函数:反渐开线函数
9 S+ m! R$ A( wconst1 v5 ~6 D* y, ]+ {2 Q5 S
MaxError=0.0000000001;
$ K5 H1 m1 _' k: l MaxCount=100000;- H+ F2 U# @! }+ J6 Y& M8 p" y8 K
var
: F, Q0 Q( I1 e x1,x2,Error:double;$ Q7 Z9 F( O. E" e
num:integer;$ t2 M' n" X. f* o6 r0 k! ?. w
begin
" N" U$ C6 a& p) c A x1:=3*x;
. E4 W) R; J9 p' K. g8 i x1:=exp(ln(x1)/3); //x=(3x)^(1/3)
" L4 D9 J, ^' g8 p4 ]9 a+ k error:=1; //maximum of error
- J1 A0 Q/ z2 L! \ E0 s( p num:=0; //counter of iterative
6 ?. F& d) h4 h: Z while (Error>MaxError) and (num<MaxCount) do
' T( ~7 u8 I- X5 E5 B1 I- H begin
$ Y7 d* v, p3 {3 P# G& h/ ]- w x2:=arccos(sin(x1)/(x+x1));
9 R6 i5 U/ p' p" ^" Y Error:=abs(x2-x1);& [- i& k4 p; c2 f* G
inc(num);
. ]0 q4 Q; y! w1 k' G& F. o& \9 k7 M4 n' ? x1:=x2;
Y( B0 I! C" v) F$ O% @& x8 e5 F3 x: h end;7 G! H1 ]4 D5 Z6 R+ k) B
Result:=x1;3 O1 \! x% L% l; d
end; |
评分
-
查看全部评分
|