|
|

楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
来自: 中国广东深圳
关于渐开线函数问题
& V4 _0 e* J' k" @+ O* r* a渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。
9 |9 o- d+ a9 }这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。! W1 F( b! W6 M% J
但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。
! J5 }- i: _8 [4 d8 m# C下面给出一个程序代码,是计算这个函数的。
% Y" }% E" k0 o/ b代码:(Delphi编写)
* V6 q, o) H1 H! m& {+ ^function INV(x ouble):Double ; //自定义全局函数:渐开线函数8 H7 @9 R- `( Q
begin
0 H/ W0 p/ n( r; ~; Q! p INV:=tan(x)-x;4 p4 Z: A& E# _+ X) A# t4 s3 Q# R# M
end;
* }2 u/ e2 ~; G* e! g) f7 q8 ~
& v% f- ]4 R9 ?; B' v% Gfunction ArcInv(x:double):double; //自定义全局函数:反渐开线函数" p- R) W7 d/ k; j7 s! L
const
$ q/ K2 i7 T4 Y. ` MaxError=0.0000000001;
4 |3 H' f) @1 Z3 q8 b% d+ N MaxCount=100000;
$ i( \2 _3 l# u. }: D! Pvar! p+ f; e# _& o7 x
x1,x2,Error:double;
$ j3 S: j8 [. [/ d num:integer;' P& N4 b2 W5 B1 x6 T# r% j
begin5 a& Q0 N% |9 P* O
x1:=3*x;
0 y) U, s0 d5 @, {0 b) S. u x1:=exp(ln(x1)/3); //x=(3x)^(1/3)# w# T* a3 V1 k( m
error:=1; //maximum of error: X2 O8 A" `* F& t. l# P6 i, ^
num:=0; //counter of iterative ~% h$ W9 V$ p# C6 l
while (Error>MaxError) and (num<MaxCount) do
; E2 p: ?$ {& q( [' ?, b begin
1 e( q7 g+ B; V' w x2:=arccos(sin(x1)/(x+x1));
m8 F% j0 C4 _3 y: C Error:=abs(x2-x1);& M3 {5 p6 ?' p" J1 l, X
inc(num);$ U' f+ w" C& v
x1:=x2;0 H( u! I, d+ |" c8 p- `$ R
end;1 S0 x8 H' u" n9 D ^0 }1 c
Result:=x1;
! w5 o. ~$ ]1 x8 J) [7 @6 N& @end; |
评分
-
查看全部评分
|