|
|

楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
来自: 中国广东深圳
关于渐开线函数问题
0 i& m) F4 }, v渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。
0 W. w' x8 m- z# c0 [' v( d这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。
$ K7 A5 ?/ [" s% I9 @但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。
% _ P' M8 U, l' e下面给出一个程序代码,是计算这个函数的。# a: r% a; I) t5 _! n f) }
代码:(Delphi编写)
) [9 R! e8 [% k3 y0 Rfunction INV(x ouble):Double ; //自定义全局函数:渐开线函数
- G$ R6 h4 Q& i5 K) r8 _( W5 G gbegin
+ v+ l A/ f7 X3 { INV:=tan(x)-x;
" j9 {/ Q3 K3 f# bend;
3 G; L4 v' A& J# b: E# ?6 G; b" p% R* V3 p' V0 u
function ArcInv(x:double):double; //自定义全局函数:反渐开线函数3 k7 ~# h/ z5 S9 R
const
2 d, k7 x5 `( R1 G- A/ M/ A$ J MaxError=0.0000000001;2 [$ C9 \, w8 o k, @6 P& n
MaxCount=100000;, `0 q( [- O i, w0 K" Z8 Q8 @
var
' `7 q" I7 B4 x6 p' T x1,x2,Error:double;; L: E- K* q5 e- M
num:integer;
/ b; U! q+ t! ^) @) |" J4 @" Pbegin p* ?. x: Y& p
x1:=3*x;
5 r# S- l3 S* {- M$ h$ a% e x1:=exp(ln(x1)/3); //x=(3x)^(1/3)
9 r. b$ z1 @- D8 ?3 O; F% H error:=1; //maximum of error
4 n8 b g# [' M- w4 B! y num:=0; //counter of iterative0 Z9 }5 f( u2 |# e' h( S+ z/ Z, p
while (Error>MaxError) and (num<MaxCount) do0 ?+ E7 W. u5 o
begin
% H3 Z, K# ^6 D6 x+ v- ~4 Q x2:=arccos(sin(x1)/(x+x1));
0 v$ I3 P; A: ^+ g- Y; r& ] Error:=abs(x2-x1);% M( V4 w6 z" v( k& \" ]
inc(num);
1 N. J1 c- ]7 E) m7 I! I C x1:=x2;; z; ?" S" H, R+ \; y
end;' m' R, ]% V4 J: U0 d5 w4 t$ x. _
Result:=x1;* q9 T. w: R; T# E+ ?7 x- \3 r( Q
end; |
评分
-
查看全部评分
|