page1 | page2 | page3 | page5 | page6 | 大富豪カードPG | ロト6シミュレーションPG | メインページに戻る
ルンゲクッタ法 | フーリエ変換 | サイコロ | | | | |


  1. フーリエ変換1
  2. #include <fstream>
    #include <iostream>
    #include <math.h>
    
    #include <time.h>
    
    using namespace std;
    
    #define PI 3.1415
    
    double x(double t,double A[],double B[],double w);
    
    
    int main(){
    
        int i,n;
        double j,l,dx,xa,xb,w;
        double N;
        double a[5],b[5],sa[6],sb[6];
    
        srand((unsigned int) time(NULL));
    
        for(i=0;i<5;i++){
            a[i]=rand()%100+1.0;
            b[i]=rand()%100+1.0;
        }
    
        w=(double)((rand()%50)/50.0+0.01);
    
        for(i=0;i<=5;i++) {
            sa[i]=0.0;
            sb[i]=0.0;
        }
    
        ofstream out("fourier1.txt");
        for(j=10.0;j<=10.0+6.0*PI/w;j+=0.01){
            out << j<<' '<<x(j,a,b,w)<<endl;
        }
        out.close();
    
        cout <<"角速度:"<<w<<endl;
        cout<<"周期:"<<2*PI/w<<endl;
    
        cout <<"x(10.0):    "
    
            <<x(10.0,a,b,w)<<endl
             <<"=x(10.0+"<<2*PI/w<<"):  "
             <<x(10.0+2*PI/w,a,b,w)<<endl;
    
        l=PI/w;
        N=1000.0/w;
        dx=2*l/N;
    
        for(n=1;n<=5;n++){
            for(j=0.0;j<N;j++) {
                xa=10.0+dx*j;
                xb=10.0+dx*(j+1.0);
                sa[n]+=(x(xa,a,b,w)*cos(n*PI*xa/l)+x(xb,a,b,w)*cos(n*PI*xb/l))*dx/2.0;
                
    
            }
        }
    
        for(n=1;n<=5;n++){
            for(j=0.0;j<N;j++) {
                xa=10.0+dx*j;
                xb=10.0+dx*(j+1);
                sb[n]+=(x(xa,a,b,w)*sin(n*PI*xa/l)+x(xb,a,b,w)*sin(n*PI*xb/l))*dx/2.0;
                
    
            }
        }
    
        cout <<"-------フーリエ変換によるa[i]----------"<<endl;
    
        for(n=1;n<=5;n++) {
            cout <<"a["<<n<<"]="<<sa[n]/l<<endl;
        }
        
        cout <<"-------実際のa[i]---------"<<endl;
    
        for(i=0;i<5;i++){
        cout << "a[" << i+1 << "]=" << a[i] <<endl;
        }
    
        cout <<"-------フーリエ変換によるb[i]----------"<<endl;
    
        for(n=1;n<=5;n++) {
            cout <<"b["<<n<<"]="<<sb[n]/l<<endl;
        }
        
        cout <<"-------実際のb[i]---------"<<endl;
    
        for(i=0;i<5;i++){
        cout << "b[" << i+1 << "]=" << b[i] <<endl;
        }
    
        return 0;
    }
    
    
    double x(double t,double A[],double B[],double w){      //x(t)
    
        
        int i;
        double k=0.0;
        
        for(i=1;i<=5;i++){
            k+=A[i-1]*cos(i*w*t)+B[i-1]*sin(i*w*t);
        }
        
        return (k);
    }
    
  3. フーリエ変換2
  4. #include <fstream>
    #include <iostream>
    #include <math.h>
    
    #include <time.h>
    
    using namespace std;
    
    #define PI 3.1415
    
    double x(double t,double A[],double B[],double w,double r[]);
    
    
    int main(){
    
        int i;
        double j,k,dx,xa,xb,w,sum;
        double N;
        double a[3],b[3],r[3];
    
        srand((unsigned int) time(NULL));
    
        for(i=0;i<3;i++){
            a[i]=rand()%100+1.0;
            b[i]=rand()%100+1.0;
            r[i]=(double)((rand()%50)/50.0+0.1);
            cout <<"r["<<i+1<<"]="<<r[i]<<endl;
        }
        w=(double)((rand()%50)/80.0+1);
        
    
    
        ofstream out1("fourier1.txt");
        for(j=0;j<=4.0*PI/w;j+=0.02){
            out1 << j<<' '<<x(j,a,b,w,r)<<endl;
        }
        out1.close();
    
        cout <<"角速度:"<<w<<endl;
    
        N=pow(10.0,4);
        dx=0.01;
    
        ofstream out2("fourier2.txt");
        
        //フーリエ余弦変換
    
        for(k=0;k<=6.0;k+=0.02){
            sum=0.0;
            for(j=0.0;j<N;j+=1.0) {
                xa=0+dx*j;
                xb=0+dx*(j+1.0);
                sum+=(x(xa,a,b,w,r)*cos(k*xa)+x(xb,a,b,w,r)*cos(k*xb))*dx/2.0;
            }
            sum*=pow(2.0/PI,0.50);
            out2<<k<<' '<<sum<<endl;
        }
        out2.close();
    
        ofstream out3("fourier3.txt");
        
        //フーリエ正弦変換
        for(k=0;k<=6;k+=0.02){
            sum=0.0;
            for(j=0.0;j<N;j+=1.0) {
                xa=0+dx*j;
                xb=0+dx*(j+1.0);
                sum+=(x(xa,a,b,w,r)*sin(k*xa)+x(xb,a,b,w,r)*sin(k*xb))*dx/2.0;
            }
            sum*=pow(2.0/PI,0.50);
            out3<<k<<' '<<sum<<endl;
        }
        out3.close();
    
        return 0;
    }
    
    
    double x(double t,double A[],double B[],double w,double r[]){       //x(t)
    
        
        int i;
        double k=0.0;
        
        for(i=1;i<=3;i++){
            k+=A[i-1]*exp(-r[i-1]*t)*cos(i*w*t)+B[i-1]*exp(-r[i-1]*t)*sin(i*w*t);
        }
        
        return (k);
    }