1. 程式人生 > >數學領域的函式的遞迴函式

數學領域的函式的遞迴函式

        我們知道在程式設計領域裡面會碰到對某個函式的遞迴呼叫,同時對於遞迴呼叫我們有時候也可以在某些時候轉化為非遞迴呼叫,轉化為非遞迴呼叫的目的可以減少棧記憶體的分配從而減少記憶體溢位的問題,那麼在一般的數學領域中我們也有一些遞迴的呼叫的情況,比如在類比電路中的反饋電路的情況和混沌理論中,某次計算的輸出又再次作為計算的輸入。因此研究函式遞迴有實際的意義。

 一些常見的周期函式

           在研究函式的遞迴之前,我們先考察一些常見的周期函式,常見的比如y=sin(PI/2 + 2*x*PI),  y = (-1)^x,  y = 1^x   y = x^0, y=0*x。 我們這裡只研究x是整數的情況。

   對於y = 0*x 來說,我們可以知道對於任何整數x∈Z 來說 y = 0,   函式的週期是1,因為我們可以匯出對於任何一個整數x∈Z來說 y都等於常數A的函式:

(1)        y = A + 0*x;

    對於y=1^x  和 y = x^0 這兩個函式來說我們可以知道對於任何整數x∈Z 來說,總是得到y = 1,函式的週期是1,因此我們可以匯出對於任何一個整數x∈Z 來說y等於常數A的函式:

  (2) y = A*1^x 

 (3) y = A*x^0

 (4) y = A - 1 + 1^x

 (5) y = A - 1 + x^0

 對於 y= (-1)^x 和 y = sin (PI/2 - 2*x*PI) 來說, 對於任何x∈Z 來說當x為奇數時y=-1 , 而當x為偶數時y=1, 函式的週期是2, 因此我們可以匯出對於任何一個整數x∈Z,來說當x為奇數時y的值等於常數A,而x為偶數時y的值為B的函式。

          對此我們可以定義一個線性函式y = ax+b。 並假設當x=-1時y=A, 當x=1時y=B。那麼這個線性函式的解析式為:

      y = (B-A)/2 * x + (B+A)/2    其中的a=(B-A)/2,  b = (B+A)/2

     因為我們規定x只能是-1,和1,因此我們把y=(-1)^x  和y = sin(PI/2 - 2*x*PI) 代入得到:

     (6)   y = (B-A)/2 * (-1)^x + (B+A)/2

     (7)y = (B-A)/2 *sin(PI/2 - 2 *x *PI) +  (B+A)/2 

以及繼續尋找y=f(x) 當x為某個區段時 y等於某個固定的值, 也就是尋找週期為n的函式,這部分也是最難的,對於解決函式n次遞迴迴圈有很大的幫助。

也就是從某種程度上來說能找到週期為n的函式,就是對某個n次遞迴迴圈的函式進行非遞迴表達的通用表達函式。

函式的遞迴

      假設存在某個函式 y = ⨍(x), y的值域是x定義域的子集。 假設當x=x0時有 y0=⨍(x0),  當我們把y0再次作為自變數又代入到⨍(x) 中去得 y1=⨍(y0), 那麼這時候y1也可以表示為:

                    y1 =⨍ (⨍(x0))

     我們稱y1是x0經過2次函式呼叫後得到的值。同時我們稱 g(x) = ⨍ (⨍(x)) 為函式⨍(x) 的二次遞迴函式。我們可以定義如下:

        定義  ⨍n(x) 為⨍(x)經過n次遞迴後得到的函式,簡稱為n次遞迴函式,其中n>=1,並且我們規定⨍1(x) = ⨍(x) 

       那麼接下來就要面臨幾個問題了,是否任何一個函式都有n次遞迴函式,如果有n次遞迴函式,那麼是否可以用一個非遞迴的函式來描述這個遞迴函式呢?以及某個函式是否經過m次遞迴後得到的值跟最開始的自變數是相等的? 以及函式的逆函式跟遞迴函式有什麼關係?

       上面的幾個問題希望志同道合的同學們一起討論和研究。

      設某個函式y=⨍(x) 的n次遞迴函式為⨍n(x),  若存在一個函式g(n,x), 使得⨍n(x)=g(n,x) 那麼我們稱g(n,x)為⨍n(x)的非遞迴表示式。可以看出遞迴函式的非遞迴表示式主要是可以把遞迴的次數當做某個函式g的係數,從而簡化了遞迴函式的計算方法。

    對於一些初等函式來說我們很容易得到某個函式的n次遞迴函式的非遞迴表達方式,比如:

     y = a*x +b  的n次遞迴函式為 y = a^n *x + b*∑ a^i     (其中i=0 to n-1)

     y = x^a       的n次遞迴函式為 y = x^(a^n)   

     y = 1/x       的n次遞迴函式為  y = ((x^2 - 1)*(-1)^n + x^2 + 1)/2*x   (這個公式沒有那麼簡單得出,後續會給出推導的過程,參考公式(8))

  y = (x+1)/(x-1)  的n次遞迴函式為 y = ((-1)^(n+1)+ 2x + 1)/((2-x)*(-1)^n + x)   (這個公式參考(8))

而有些函式比如

    y = sin(x)  則我們沒有辦法用一個可以定義的非遞迴函式來表示其n次遞迴函式(是否真的沒有?還是需要研究),暫時只能用列舉的方法來表示:

                   y = sin(sin(sin(.......(x)....)))

複合函式的遞迴函式

      上面描述的是普通函式的遞迴函式,那麼對於一些複合函式怎麼求他的遞迴函式呢?

        設y = ⨍(u),    u=g(x),    則已x為自變數y為因變數的複合函式表示為 y= ⨍(g(x)),  那麼如何來求複合函式y的遞迴函式呢?

因為y= ⨍(g(x)),  所以將y變為自變數後的第二次遞迴的表達為:

                y2 = ⨍(g(y)),  而y=⨍(g(x)), 所以代入得 y2 = ⨍(g(⨍(g(x)))).  依次類推得到

     yn=⨍(g(⨍(g(⨍(g(⨍(g(...⨍(g(x)...))))))))

                                 n

函式的遞迴週期

       假設某個函式⨍(x)的n次遞迴函式⨍n(x),當n=M1,M2,Mk時有⨍Mi(x) = x 其中(i = 1 to k ) 那麼我們稱其中的最小Mi為函式的遞迴週期,稱為M。

接下來的問題就是如何確定某個n次遞迴函式是否有遞迴週期的問題,以及遞迴週期如何計算的問題,這個也是研究的課題。

2次遞迴周期函式

      如果某個函式的遞迴週期為2則稱這個函式為2次遞迴周期函式。2次遞迴周期函式其實就是當n為奇數時y=f(x),而當n為偶數是y=x, 也就是遞迴週期如下:

              f1(x)= f(x),  f2(x)= x,  f3(x)=f(x),  f4(x) = x,  f5(x)= f(x),.....

如何來推導一個2次遞迴周期函式的表示式呢。

    我們再從上面的函式2次遞迴周期函式來分析得出當n為奇數時fn(x) = f(x)  而當n為偶數時fn(x) = x 因此我們可以從前面的公式(6)中推匯出2次遞迴周期函式的非遞迴函式為:

   (8)  fn(x) =  (x - f(x))/2 * (-1)^n + (x+ f(x))/2

全遞迴函式

我們知道如果某個函式y =f(x), 那麼這個函式的逆函式表示為 x = f-1(y)。 如果再次對這個逆函式進行遞迴則

。。。

因為我們定義如下:

    如果某個函式y=f(x)的 n次遞迴函式fn(x) 且當 n = 0 是有  f0(x) = x , 且n次逆遞迴函式為gn(x) 那麼我們稱函式

                              fn(x)     n>=1

            kn(x) =    {  x          n = 0

                             gn(x)    n < 0

 為f(x)的全遞迴函式。

並且如果某個函式的n次遞迴函式fn(x)  當 n = 0 時有 f0(x) = x;   且有 n < 0 時 fn(x) = gn(x) 那麼我們稱fn(x)是全遞迴函式的唯一函式,並且稱這個全遞迴函式是唯一全遞迴函式。

注意的是並不是所有函式的n次遞迴函式都是全遞迴函式。

    y = a* x  的n次遞迴函式是  y= a^n*x ,  全遞迴函式是 y = a^n*x

     y = (x+1)/(x-1) n次遞迴函式是 y = ((-1)^(n+1)+ 2x + 1)/((2-x)*(-1)^n + x)  全遞迴函式是 y = ((-1)^(n+1)+ 2x + 1)/((2-x)*(-1)^n + x)

   y = 1/x n次遞迴函式是 y = ((x^2 - 1)*(-1)^n + x^2 + 1)/2*x  全遞迴函式是 y = ((x^2 - 1)*(-1)^n + x^2 + 1)/2*x

   y = x^a n次遞迴函式是 y = x^(a^n)  全遞迴函式是 y = x^(a^n)

   y = a*x + b   n次遞迴函式是  y = a^n*x + b * ∑a^(i-1) (i = 1 to n)  全遞迴函式是:

          a^n*x + b * ∑a^(i-1) (i = 1 to n)   n>=1

   y = { x                                      n = 0

         a^n*x - b * ∑a^i   (i = -1 to -n)     n < 0