數值計算程式大放送 數學變換與濾波

2021-04-03 01:09:53 字數 4722 閱讀 4824

數值計算程式大放送-數學變換與濾波 //

//傅利葉級數逼近

//f-長度為2n+1的陣列,存放[0,2pi]上2n+1個等距點處的函式值

//n-整型變數

//a-長度為n+1的陣列,返回時存放傅利葉級數係數ak

//b-長度為n+1的陣列,返回時存放傅利葉級數係數bk

void kfour(double f,int n,double a,double b);

////快速離散傅利葉變換(fft)

//pr-長度為n的陣列,當l=0時,存放n個取樣輸入的實部,返回時存放離散傅利葉變換的模;

//   當l=1時,存放傅利葉變換的n個實部,返回時存放逆傅利葉變換的模;

//pi-長度為n的陣列,當l=0時,存放n個取樣輸入的虛部,返回時存放離散傅利葉變換的幅角(單位為度);

//   當l=1時,存放傅利葉變換的n個虛部,返回時存放逆傅利葉變換的幅角(單位為度);

//n-整型變數,輸入的點數

//k-整型變數,滿足n=2^k

//fr-長度為n的陣列,當l=0時,返回時存放離散傅利葉變換的實部;

//   當l=1時,返回時存放逆傅利葉變換的實部

//fi-長度為n的陣列,當l=0時,返回時存放離散傅利葉變換的虛部;

//   當l=1時,返回時存放逆傅利葉變換的虛部

//l-整型變數,l=1時,計算傅利葉變換,當l=0時,計算逆傅利葉變換

//il-整型變數,il=0時,表示不要求計算傅利葉變換或逆變換的模與幅角

//   il=1時,表示要求計算傅利葉變換或逆變換的模與幅角

void kkfft(double pr,double pi,int n,int k,double fr,double fi,int l,int il);

////快速沃什(walsh)變換

//p-長度為n的陣列,存放n=2^k個給定的輸入序列

//n-整型變數,輸入的點數

//k-整型變數,滿足n=2^k

//x-長度為n的陣列,返回時存放沃什(walsh)變換序列;

void kkfwt(double p,double x,int n,int k);

////等距節點五點三次平滑

//n-整型變數,輸入的點數,要求n>=5

//y-長度為n的陣列,存放n個等距觀測點上的觀測資料

//yy-長度為n的陣列,返回時存放平滑結果

void kkspt(int n,double y,double yy);

////離散隨機線性系統的卡爾曼(kalman)濾波

//n-整型變數,動態系統的維數

//m-整型變數,觀測系統的維數

//k-觀測序列的長度

//f-n*n陣列,系統狀態轉移矩陣

//q-n*n陣列,模型雜訊wk的協方差矩陣

//r-m*m陣列,觀測雜訊vk的協方差矩陣

//h-m*n陣列,觀測矩陣

//yy-k*m陣列,觀測向量序列

//x-k*n陣列,x[0,j]存放給定的初值,其餘各行返回狀態向量估計序列

//p-n*n陣列,存放初值p0,返回時存放最後時刻的估計誤差協方差矩陣

//g-n*m陣列,返回最後時刻的穩定增益矩陣

//呼叫函式 brinv(double a,int n);

int klman(int n,int m,int k,double f,double q,double r,double h,double y,double x,double p,double g);

//選自《徐世良數值計算程式集(c)>>

每個程式都加上了適當地注釋,陸陸續續幹了幾個月才整理出來的啊。

今天都給貼出來了

#include

//傅利葉級數逼近

//f-長度為2n+1的陣列,存放[0,2pi]上2n+1個等距點處的函式值

//n-整型變數

//a-長度為n+1的陣列,返回時存放傅利葉級數係數ak

//b-長度為n+1的陣列,返回時存放傅利葉級數係數bk

void kfour(double f,int n,double a,double b)

a[i]=t*(f[0]+u1*c1-u2);

b[i]=t*u1*s1;

u0=c*c1-s*s1;

s1=c*s1+s*c1;

c1=u0;

}return;}

//快速離散傅利葉變換(fft)

//pr-長度為n的陣列,當l=0時,存放n個取樣輸入的實部,返回時存放離散傅利葉變換的模;

//   當l=1時,存放傅利葉變換的n個實部,返回時存放逆傅利葉變換的模;

//pi-長度為n的陣列,當l=0時,存放n個取樣輸入的虛部,返回時存放離散傅利葉變換的幅角(單位為度);

//   當l=1時,存放傅利葉變換的n個虛部,返回時存放逆傅利葉變換的幅角(單位為度);

//n-整型變數,輸入的點數

//k-整型變數,滿足n=2^k

//fr-長度為n的陣列,當l=0時,返回時存放離散傅利葉變換的實部;

//   當l=1時,返回時存放逆傅利葉變換的實部

//fi-長度為n的陣列,當l=0時,返回時存放離散傅利葉變換的虛部;

//   當l=1時,返回時存放逆傅利葉變換的虛部

//l-整型變數,l=1時,計算傅利葉變換,當l=0時,計算逆傅利葉變換

//il-整型變數,il=0時,表示不要求計算傅利葉變換或逆變換的模與幅角

//   il=1時,表示要求計算傅利葉變換或逆變換的模與幅角

void kkfft(double pr,double pi,int n,int k,double fr,double fi,int l,int il)

fr[it]=pr[is];

fi[it]=pi[is];

}pr[0]=1.0;

pi[0]=0.0;

p=6.283185306/(1.0*n);

pr[1]=cos(p);

pi[1]=-sin(p);

if (l!=0) pi[1]=-pi[1];

for (i=2; i<=n-1; i++)

for (it=0; it<=n-2; it=it+2)

m=n/2;

nv=2;

for (l0=k-2; l0>=0; l0--)}}

if (l!=0)

}if (il!=0)

else

}else}}

return;

}//快速沃什(walsh)變換

//p-長度為n的陣列,存放n=2^k個給定的輸入序列

//n-整型變數,輸入的點數

//k-整型變數,滿足n=2^k

//x-長度為n的陣列,返回時存放沃什(walsh)變換序列;

void kkfwt(double p,double x,int n,int k)

}for (i=0; i<=n-1; i++)

l=1;

for (i=1; i<=k; i++)

}l=2*l;

}return;

}//等距節點五點三次平滑

//n-整型變數,輸入的點數,要求n>=5

//y-長度為n的陣列,存放n個等距觀測點上的觀測資料

//yy-長度為n的陣列,返回時存放平滑結果

void kkspt(int n,double y,double yy)

}else

yy[n-2]=2.0*y[n-5]-8.0*y[n-4]+12.0*y[n-3];

yy[n-2]=(yy[n-2]+27.0*y[n-2]+2.0*y[n-1])/35.0;

yy[n-1]=-y[n-5]+4.0*y[n-4]-6.0*y[n-3];

yy[n-1]=(yy[n-1]+4.0*y[n-2]+69.0*y[n-1])/70.0;

}return;

}/離散隨機線性系統的卡爾曼(kalman)濾波

//n-整型變數,動態系統的維數

//m-整型變數,觀測系統的維數

//k-觀測序列的長度

//f-n*n陣列,系統狀態轉移矩陣

//q-n*n陣列,模型雜訊wk的協方差矩陣

//r-m*m陣列,觀測雜訊vk的協方差矩陣

//h-m*n陣列,觀測矩陣

//yy-k*m陣列,觀測向量序列

//x-k*n陣列,x[0,j]存放給定的初值,其餘各行返回狀態向量估計序列

//p-n*n陣列,存放初值p0,返回時存放最後時刻的估計誤差協方差矩陣

//g-n*m陣列,返回最後時刻的穩定增益矩陣

int brinv(double a,int n);

int klman(int n,int m,int k,double f,double q,double r,double h,double y,double x,double p,double g)}}

if (d+1.0==1.0)

if (is[k]!=k)

}if (js[k]!=k)

}l=k*n+k;

a[l]=1.0/a[l];

for (j=0; j<=n-1; j++)

}for (i=0; i<=n-1; i++)}}

}for (i=0; i<=n-1; i++)}}

for (k=n-1; k>=0; k--)

}if (is[k]!=k)}}

free(is); free(js);

return(1);

}

Python技巧大放送(三)

此方法可用於將給定字串的第乙個字母轉換為小寫。def decapitalize string return str 1 lower str 1 decapitalize foobar foobar decapitalize foobar foobar 這個方法計算乙個字串中母音的數量 a e i o...

喜迎國慶 好禮大放送

從2004年開始,沃通 wosign 專注提供一站式各種全球信任的數字證書產品和技術服務,為了感謝廣大使用者十年來對沃通 wosign 的信賴和支援,藉此舉國歡慶之際,沃通 wosign 開展 迎國慶,好禮大放送 活動。活動物件 在活動時間內購買沃通ssl證書的所有客戶。活動細則 1.在活動時間內已...

漫畫繪製技法大放送 上

網路收集整理 jundark 1b 一 人體基本結構 1b 小孩 孩子的頭部較大,一般比例為三到四個頭高。成年人 人體立姿為七個頭高 立七 坐姿為五個頭高 坐五 蹲姿為三個半頭高 蹲三半 立姿手臂下垂時,指尖位置在大腿二分一處。老人 由於骨骼收縮,老年人的比例較成年人略小一些,在畫老年人時,應注意頭...