|
楼主 |
发表于 2008-7-16 12:05:44
|
显示全部楼层
关于渐开线函数问题
- A5 p0 L) J2 a3 g* f" r渐开线函数是齿轮设计中经常用到的一个函数:Invα=tanα-α。
$ H* h$ X0 z4 W6 |这个函数的计算比较简单,但是其反函数就变成了一个超越方程,只有数值解可求,因此可以通过牛顿迭代等数值计算方法求取数值解。3 V: {6 B9 n0 W5 ?- D; L8 p
但是,现在通过计算机编程的方法却很多,比如二分法等。程序的循环计算有时候都不用什么数值解法了。这或许是计算机计算功能的一种体现。
6 z' D# u3 x8 B8 f下面给出一个程序代码,是计算这个函数的。
5 h/ k( f2 O' f代码:(Delphi编写)
( k8 O4 I% V+ Ffunction INV(xouble):Double ; //自定义全局函数:渐开线函数; x: }+ r" s, i7 K3 D
begin. ?8 s5 C0 e/ y
INV:=tan(x)-x;% n' P4 n% c5 E+ x6 I2 p
end;# `+ N; j. v, L8 {
- H( }: r$ M1 \1 ~function ArcInv(x:double):double; //自定义全局函数:反渐开线函数( Y3 `$ d& T, B5 T `5 J
const
! Y8 c8 b1 X# q2 h. z' c& z: A$ E8 E MaxError=0.0000000001;2 \' j& l6 R% w+ M. K3 { F3 f
MaxCount=100000;
5 V1 U9 H v, z8 Nvar
M- Y! b: b1 g! }3 H x1,x2,Error:double;
* F. s6 b: T: |2 }3 ^) z# D/ R num:integer;1 ?. f: \$ m9 R/ p
begin" v7 O+ z. w$ I. @/ D) ?- P9 U7 E( n/ Y
x1:=3*x;
) L& L1 d" h+ \( H9 C; r- `4 O x1:=exp(ln(x1)/3); //x=(3x)^(1/3)5 K) l2 j- C9 I2 b8 C7 `: V5 f, k
error:=1; //maximum of error( G: y$ K$ S' s' x4 m( Y) s0 _
num:=0; //counter of iterative
4 f! h& \7 x$ G+ |( ^& s while (Error>MaxError) and (num<MaxCount) do4 x/ `2 u0 B' R
begin
# a) D: J$ g! H# u' T x2:=arccos(sin(x1)/(x+x1));9 H4 S/ f/ i5 a% i2 H) [
Error:=abs(x2-x1);
3 \8 n7 ?6 T: ? b inc(num);
3 Y$ U% K# r& g0 t7 m3 X1 e L# V x1:=x2;) c! Q7 O J. }6 G# H0 y5 B6 a
end;0 Q/ l1 B+ B' @; L
Result:=x1;
* I6 u& |0 m' M/ r4 e! ~: N( nend; |
评分
-
查看全部评分
|