MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第45回]
●チェビシェフの多項式(2)
前回の続きです。
前回はチェビシェフの多項式について説明しました。
一般式をもとにして高次の多項式を低次のものから順に算出することができます。
計算方法は単純ですが、うっかりすると間違えてしまいます。
前回の計算式は T5(x)の式をうっかり間違えてしまいました。
翌朝になってからそのことに気付いて訂正いたしました。
Tnのnの値が大きくなってくると項数も増えて計算もだんだんと複雑になってきますから、そのようについ間違えてしまうことも出てきてしまいます。
チェビシェフの多項式についてネットを検索していましたら、プログラムを作ってn=50まで求めたというサイトをみつけました。
こちらのサイト(http://www.ne.jp/asahi/music/marinkyo/js/chebyshev-polinomo.html.ja)です。
この方はJavaScriptを使って計算されたようです。
おお。
そうでした。
プログラムを書いて計算させれば、高次であっても平気でありました。
さっそく書いてみることにしました。
私はいつものごとくBorland C++を使いました。
プログラムならオーバーフローしない限り、いくらnが大きくても正しく表示させられますが、そんなに沢山表示させてみても仕方がありませんから、適当なところでn=20までとしました。
/// chebychef polynomials /// 14/10/1 10/2 // #include <stdio.h> // void main() { // i---> Ti(x) // j---> x^j // x[i][j]---> 'keisu' of x int x[21][21]; int i,j; for (i=0;i<=20;i++){ for(j=0;j<=20;j++){ x[i][j]=0; } } x[0][0]=1;// T0 x[1][1]=1;// T1 // keisan for(i=2;i<=20;i++){ for(j=i;j>=2;j--){ x[i][j]=x[i-1][j-1]*2-x[i-2][j]; } x[i][1]=x[i-1][0]*2-x[i-2][1];//1次の項 x[i][0]=-x[i-2][0];//定数項 } // print printf("T0(x)=1\n"); printf("T1(x)=x\n"); for(i=2;i<=20;i++){ printf("T%d(x)=",i);//左辺 for(j=20;j>1;j--){ if(x[i][j]>1&&i==j)printf("%dx^%d",x[i][j],j);//第1項(符号を省く) else if(x[i][j]>1)printf("+%dx^%d",x[i][j],j);//符号 else if(x[i][j]<-1)printf("%dx^%d",x[i][j],j);//符号 } if(x[i][1]>1)printf("+%dx",x[i][j]);//1次の項&符号 else if(x[i][1]<-1)printf("%dx",x[i][j]);//1次の項&符号 if(x[i][0]==0)printf("\n");//定数項なし else if(x[i][0]==1)printf("+1\n");//定数項 else if(x[i][0]==-1)printf("-1\n");//定数項 } return; } // |
T0(x)=1 T1(x)=x T2(x)=2x^2-1 T3(x)=4x^3-3x T4(x)=8x^4-8x^2+1 T5(x)=16x^5-20x^3+5x T6(x)=32x^6-48x^4+18x^2-1 T7(x)=64x^7-112x^5+56x^3-7x T8(x)=128x^8-256x^6+160x^4-32x^2+1 T9(x)=256x^9-576x^7+432x^5-120x^3+9x T10(x)=512x^10-1280x^8+1120x^6-400x^4+50x^2-1 T11(x)=1024x^11-2816x^9+2816x^7-1232x^5+220x^3-11x T12(x)=2048x^12-6144x^10+6912x^8-3584x^6+840x^4-72x^2+1 T13(x)=4096x^13-13312x^11+16640x^9-9984x^7+2912x^5-364x^3+13x T14(x)=8192x^14-28672x^12+39424x^10-26880x^8+9408x^6-1568x^4+98x^2-1 T15(x)=16384x^15-61440x^13+92160x^11-70400x^9+28800x^7-6048x^5+560x^3-15x T16(x)=32768x^16-131072x^14+212992x^12-180224x^10+84480x^8-21504x^6+2688x^4-128x^2+1 T17(x)=65536x^17-278528x^15+487424x^13-452608x^11+239360x^9-71808x^7+11424x^5-816x^3+17x T18(x)=131072x^18-589824x^16+1105920x^14-1118208x^12+658944x^10-228096x^8+44352x^6-4320x^4+162x^2-1 T19(x)=262144x^19-1245184x^17+2490368x^15-2723840x^13+1770496x^11-695552x^9+160512x^7-20064x^5+1140x^3-19x T20(x)=524288x^20-2621440x^18+5570560x^16-6553600x^14+4659200x^12-2050048x^10+549120x^8-84480x^6+6600x^4-200x^2+1 |