2014.10.18

前へ
次へ
ホームページトップへ戻る

MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!


[第54回]


●チェビシェフの逆展開式を求める(4)

前回発見しましたチェビシェフの逆展開式の法則に従ってC++でプログラムを書いてみました。
こんなに簡単になってしまいました。

// chebychev polynomials
// 逆展開式
//
// 14/10/18
//
#include <stdio.h>
//
void main()
{
// i---> x^i
// j--->Tj
// T[i][j]---> 'keisu' of Tj
        int T[21][21];
        int i,j;
        int n;
        T[0][0]=1;// x^0
        T[1][1]=1;// x^1
        T[2][2]=1;// x^2
        T[2][0]=1;// x^2
// keisan
        for(i=3;i<=20;i++){
                T[i][i]=1;
                for(j=i-2;j>=0;j=j-2){
                        if (j==1)T[i][1]=T[i-1][2]+T[i-1][0]*2;
                        else if (j==0)T[i][0]=T[i-1][1];
                        else T[i][j]=T[i-1][j+1]+T[i-1][j-1];
                        }
                }
// print
        printf("1=T0\n");
        printf("x=T1\n");
        n=1;
        for(i=2;i<=20;i++){
                n=n*2;
                printf("x^%d=1/%d(T%d+",i,n,i);
                for(j=i-2;j>=0;j=j-2){
                        if(T[i][j]==1)printf("T%d",j);
                        else printf("%dT%d",T[i][j],j);
                        if(j<=1)printf(")\n");
                        else printf("+");
                        }
                }

return;
}
//

先に作ったプログラムと違って、元の多項式の係数は必要ありません。
元データを利用することなく白紙の状態から係数を算出することができます。
また計算は整数のみで実数の除算は不要ですから計算誤差を気にする必要もありません。
下は上のプログラムを実行した結果です。

1=T0
x=T1
x^2=1/2(T2+T0)
x^3=1/4(T3+3T1)
x^4=1/8(T4+4T2+3T0)
x^5=1/16(T5+5T3+10T1)
x^6=1/32(T6+6T4+15T2+10T0)
x^7=1/64(T7+7T5+21T3+35T1)
x^8=1/128(T8+8T6+28T4+56T2+35T0)
x^9=1/256(T9+9T7+36T5+84T3+126T1)
x^10=1/512(T10+10T8+45T6+120T4+210T2+126T0)
x^11=1/1024(T11+11T9+55T7+165T5+330T3+462T1)
x^12=1/2048(T12+12T10+66T8+220T6+495T4+792T2+462T0)
x^13=1/4096(T13+13T11+78T9+286T7+715T5+1287T3+1716T1)
x^14=1/8192(T14+14T12+91T10+364T8+1001T6+2002T4+3003T2+1716T0)
x^15=1/16384(T15+15T13+105T11+455T9+1365T7+3003T5+5005T3+6435T1)
x^16=1/32768(T16+16T14+120T12+560T10+1820T8+4368T6+8008T4+11440T2+6435T0)
x^17=1/65536(T17+17T15+136T13+680T11+2380T9+6188T7+12376T5+19448T3+24310T1)
x^18=1/131072(T18+18T16+153T14+816T12+3060T10+8568T8+18564T6+31824T4+43758T2+24310T0)
x^19=1/262144(T19+19T17+171T15+969T13+3876T11+11628T9+27132T7+50388T5+75582T3+92378T1)
x^20=1/524288(T20+20T18+190T16+1140T14+4845T12+15504T10+38760T8+77520T6+125970T4+167960T2+92378T0)

[第52回]の計算結果と全く同じ結果が得られました。
めでたし、めでたし、です。

MYCPU80でCP/Mを![第54回]
2014.10.18upload

前へ
次へ
ホームページトップへ戻る