cuspy memo


フィボナッチ関数をプロットしてみた

2008/01/23 Wednesday 01:26:01

フィボナッチ数列の一般化については数学ガール

a_k=\frac{(1+\sqrt{5})^k-(1-\sqrt{5})^k}{2^k\sqrt{5}}

こんな式に一般化出来ることを知ってすげーなー実数にも拡張出来るのかぁ、と驚かされたものだけどよくよく考えると負の数を整数じゃない実数でべき乗すると虚数が出てくるんだな。

フィボナッチ数列の一般化が複素関数な件

フィボナッチ数列が一見実数上にある簡単なものに見えて、連続的な関数として捉えるとやつは複素関数に居て、その関数のごくごく一部分(入力が整数の場合のみ、と考えればこれは実数上の点点でしかない)のみを切り取って、「なんだこいつら全部整数じゃん」と思っているにすぎないと思うとなかなか身が震えてくる。

たしかに、自称 gnuploter としてはこれはもうプロットせざるを得ないな。
実数入力をz軸にとって、出力の実部をx軸、虚部をy軸でプロットしてみた。

fib1

あれ、これは螺旋なのかな? と思って。入力を(0, 5)までにしてみたら

fib2

確かに螺旋だった。

複素数の入力 x + yi を取って出力の絶対値を z にプロットしてもおもしろいかもしれない。

追記:
ソースコード

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <complex.h>

#define THETA 1.618034
double complex cfib(double i)
{
    double complex c = cpow(-THETA, -i);
    return (pow(THETA, i) - creal(c)) / sqrt(5) - cimag(c) / sqrt(5) * I;
}

int main(int argc, char *args[]){
    double d;
    double complex c;
    for(d=0; d<10; d+=0.1){
        c = cfib(d);
        printf("%lf\t%lf\t%lf\n", creal(c), cimag(c), d);
    }
    return EXIT_SUCCESS;
}
  1. Robert wrote related post…

    Silk posts and stories…

    Trackback by Robert wrote related post — 2008/06/10 Tuesday @ 03:30:09

  2. Latest News…

    SweN, Latest News and Latest…

    Trackback by Latest News — 2008/06/19 Thursday @ 09:47:56

Leave a comment

You must be logged in to post a comment.

hoge