移植MATLAB神經(jīng)網(wǎng)絡(luò)算法到MFC平臺(tái)_第1頁
移植MATLAB神經(jīng)網(wǎng)絡(luò)算法到MFC平臺(tái)_第2頁
移植MATLAB神經(jīng)網(wǎng)絡(luò)算法到MFC平臺(tái)_第3頁
移植MATLAB神經(jīng)網(wǎng)絡(luò)算法到MFC平臺(tái)_第4頁
移植MATLAB神經(jīng)網(wǎng)絡(luò)算法到MFC平臺(tái)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

移植MATLAB神經(jīng)網(wǎng)絡(luò)算法到MFC平臺(tái)該算法需利用高斯隨機(jī)分布來制造預(yù)測,因此另封裝一個(gè)randn()函數(shù)制造偽高斯隨機(jī)數(shù),然后在Forecast()函數(shù)中對樣本進(jìn)行網(wǎng)絡(luò)訓(xùn)練,并利用訓(xùn)練結(jié)果進(jìn)行網(wǎng)絡(luò)預(yù)測,[cpp]viewplaincopy#gauss.h/////////////////////////////////////////////////////////////////////#definepi3.1415926535897#definerd(rand()/(RAND_MAX+1.0))doublerandn(inttype){srand((unsigned)time(NULL));//按照12個(gè)均勻分布之和減去6得到正態(tài)分布函數(shù)的x值if(type==1)returnrd+rd+rd+rd+rd+rd+rd+rd+rd+rd+rd+rd-6.0;//按照計(jì)算公式y(tǒng)=sqrt(-2*ln(U))*cos(2*PI*V)計(jì)算得到xelseif(type==2)returnsqrt(-2*log(rand()/(RAND_MAX+1.0)))*cos(2*pi*rand()/(RAND_MAX+1.0));elsereturnrandn(0.0,1.0,-10.0,10.0);}/////////////////////////////////////////////////////////////////////////////////預(yù)測算法///////////////////////////////////////////////////////vector<vector<double>>Input;////////////訓(xùn)練輸入樣本vector<vector<double>>Output;//////////訓(xùn)練輸出樣本vector<vector<double>>PreInput;////////預(yù)測輸入樣本vector<vector<double>>PreOutput;///////預(yù)測輸出結(jié)果intinput_col;//定義訓(xùn)練輸入樣本列,數(shù)據(jù)計(jì)算以列為單位,與MATLAB中列向量同意義intinput_row;//定義訓(xùn)練輸入樣本行intinputtest_row;//定義訓(xùn)練輸出樣本行intoutput_col;//定義預(yù)測輸入樣本列,即需要預(yù)測的數(shù)據(jù),1列intoutput_row;//定義預(yù)測輸入樣本行intoutputtest_row;//定義預(yù)測輸出樣本行,1列intmaxgen;//迭代次數(shù)intn;//隱形節(jié)點(diǎn)個(gè)數(shù)doubleInput[20][1];///////////////以下為個(gè)訓(xùn)練向量與預(yù)測向量結(jié)構(gòu)初始化,預(yù)測時(shí)需進(jìn)行數(shù)據(jù)有效化填充////////////////////////////////inti=0;Input.resize(input_row);for(i=0;i<input_row;i++){Input[i].resize(input_col);}Output.resize(inputtest_row);for(i=0;i<inputtest_row;i++){Output[i].resize(input_col);}PreInput.resize(output_row);for(i=0;i<output_row;i++){PreInput[i].resize(output_col);}PreOutput.resize(outputtest_row);for(i=0;i<outputtest_row;i++){PreOutput[i].resize(output_col);}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////本人為動(dòng)態(tài)改變預(yù)測體,采用vector向量結(jié)構(gòu)計(jì)算,可隨時(shí)改變數(shù)組結(jié)構(gòu)////////////////////////////////////vector的使用需添加標(biāo)準(zhǔn)庫頭文件<vertor>,并定義命名空間,usingnamespacestd;//////////////////規(guī)避double數(shù)組只能靜態(tài)定義的特性//////////////////////////////////////////////////////////////////////////////////////////////調(diào)試中發(fā)現(xiàn)double二維及以上常規(guī)數(shù)組無法進(jìn)行指針與數(shù)組名之間的轉(zhuǎn)化//////////////////////////////////具體錯(cuò)誤cannotconvertdouble**todouble[][]////////////////////////////////////////voidForecast(){intM=input_col;%輸入節(jié)點(diǎn)個(gè)數(shù)intN=output_col;%輸出節(jié)點(diǎn)個(gè)數(shù)doublelr1=0.01;//%學(xué)習(xí)概率doublelr2=0.001;//%學(xué)習(xí)概率inti,j,k,kk,kkk;srand((unsigned)time(NULL));doublevalue=0.0;CStringstr=_T("");vector<vector<double>>Wjk(n);for(i=0;i<n;i++){Wjk[i].resize(input_col);}vector<vector<double>>Wjk_1(n);for(i=0;i<n;i++){Wjk_1[i].resize(input_col);}vector<vector<double>>Wjk_2(n);for(i=0;i<n;i++){Wjk_2[i].resize(input_col);}for(i=0;i<n;i++){for(j=0;j<input_col;j++){Wjk[i][j]=randn(2);Wjk_1[i][j]=Wjk[i][j];Wjk_2[i][j]=Wjk_1[i][j];}}vector<vector<double>>Wij(output_col);for(i=0;i<output_col;i++){Wij[i].resize(n);}vector<vector<double>>Wij_1(output_col);for(i=0;i<output_col;i++){Wij_1[i].resize(n);}vector<vector<double>>Wij_2(output_col);for(i=0;i<output_col;i++){Wij_2[i].resize(n);}for(i=0;i<output_col;i++){for(j=0;j<n;j++){Wij[i][j]=randn(2);Wij_1[i][j]=Wij[i][j];Wij_2[i][j]=Wij_1[i][j];}}vector<vector<double>>a(1);for(i=0;i<1;i++){a[i].resize(n);}vector<vector<double>>a_1(1);for(i=0;i<1;i++){a_1[i].resize(n);}vector<vector<double>>a_2(1);for(i=0;i<1;i++){a_2[i].resize(n);}for(i=0;i<1;i++){for(j=0;j<n;j++){a[i][j]=randn(2);a_1[i][j]=a[i][j];a_2[i][j]=a_1[i][j];}}vector<vector<double>>b(1);for(i=0;i<1;i++){b[i].resize(n);}vector<vector<double>>b_1(1);for(i=0;i<1;i++){b_1[i].resize(n);}vector<vector<double>>b_2(1);for(i=0;i<1;i++){b_2[i].resize(n);}for(i=0;i<1;i++){for(j=0;j<n;j++){b[i][j]=randn(2);b_1[i][j]=b[i][j];b_2[i][j]=b_1[i][j];}}vector<vector<double>>y(1);for(i=0;i<1;i++){y[i].resize(output_col);}vector<vector<double>>net(1);for(i=0;i<1;i++){net[i].resize(n);}vector<vector<double>>net_ab(1);for(i=0;i<1;i++){net_ab[i].resize(n);}vector<vector<double>>d_Wjk(n);for(i=0;i<n;i++){d_Wjk[i].resize(input_col);}vector<vector<double>>d_Wij(output_col);for(i=0;i<output_col;i++){d_Wij[i].resize(n);}vector<vector<double>>d_a(1);for(i=0;i<1;i++){d_a[i].resize(n);}vector<vector<double>>d_b(1);for(i=0;i<1;i++){d_b[i].resize(n);}//%%輸入輸出數(shù)據(jù)歸一化doubletempmax=0.0,tempmin=0.0;vector<double>input_max(input_col);vector<double>input_min(input_col);vector<vector<double>>Input1(input_row);for(i=0;i<input_row;i++){Input1[i].resize(input_col);}for(i=0;i<input_col;i++){tempmax=Input[0][i];tempmin=Input[0][i];for(j=0;j<input_row;j++){if(Input[j][i]>tempmax)tempmax=Input[j][i];if(Input[j][i]<tempmin)tempmin=Input[j][i];}input_max[i]=tempmax;input_min[i]=tempmin;for(j=0;j<input_row;j++){if(input_max[i]==input_min[i])Input1[j][i]=0;elseInput1[j][i]=2*(Input[j][i]-input_min[i])/(input_max[i]-input_min[i])-1;}}vector<double>output_max(output_col);vector<double>output_min(output_col);vector<vector<double>>PreInput1(output_row);for(i=0;i<ut_row;i++){PreInput1[i].resize(output_col);}for(i=0;i<output_col;i++){tempmax=PreInput[0][i];tempmin=PreInput[0][i];for(j=0;j<output_row;j++){if(PreInput[j][i]>tempmax)tempmax=PreInput[j][i];if(PreInput[j][i]<tempmin)tempmin=PreInput[j][i];}output_max[i]=tempmax;output_min[i]=tempmin;for(j=0;j<output_row;j++){if(output_max[i]==output_min[i])PreInput1[j][i]=0;elsePreInput1[j][i]=2*(PreInput[j][i]-output_min[i])/(output_max[i]-output_min[i])-1;}}//%%網(wǎng)絡(luò)訓(xùn)練vector<double>x(input_col);vector<double>yqw(output_col);vector<double>error(maxgen);doubletemp=0.0;for(i=0;i<maxgen;i++){//%誤差累計(jì)error[i]=0.0;for(kk=0;kk<input_row;kk++){for(kkk=0;kkk<input_col;kkk++){x[kkk]=Input1[kk][kkk];}for(kkk=0;kkk<output_col;kkk++){yqw[kkk]=PreInput1[kk][kkk];}for(j=0;j<n;j++){for(k=0;k<input_col;k++){net[0][j]=net[0][j]+Wjk[j][k]*x[k];net_ab[0][j]=(net[0][j]-b[0][j])/a[0][j];}temp=mymorlet(net_ab[0][j]);for(k=0;k<output_col;k++){y[0][k]=y[0][k]+Wij[k][j]*temp;}}for(j=0;j<output_col;j++){temp=temp+abs(yqw[j]-y[0][j]);}error[i]=error[i]+temp;for(j=0;j<n;j++){temp=mymorlet(net_ab[0][j]);for(k=0;k<output_col;k++){d_Wij[k][j]=d_Wij[k][j]-(yqw[k]-y[0][k])*temp;}temp=d_mymorlet(net_ab[0][j]);for(k=0;k<input_col;k++){for(kkk=0;kkk<output_col;kkk++){d_Wjk[j][k]=d_Wjk[j][k]+(yqw[kkk]-y[0][kkk])*Wij[kkk][j];}d_Wjk[j][k]=-d_Wjk[j][k]*temp*x[k]/a[0][j];}for(k=0;k<output_col;k++){d_b[0][j]=d_b[0][j]+(yqw[k]-y[0][k])*Wij[k][j];}d_b[0][j]=d_b[0][j]*temp/a[0][j];for(k=0;k<output_col;k++){d_a[0][j]=d_a[0][j]+(yqw[k]-y[0][k])*Wij[k][j];}d_a[0][j]=d_a[0][j]*temp*((net[0][j]-b[0][j])/b[0][j])/a[0][j];}///權(quán)值參數(shù)更新for(j=0;j<n;j++){for(k=0;k<input_col;k++){Wjk[j][k]=Wjk[j][k]-lr1*d_Wjk[j][k];d_Wjk[j][k]=0.0;Wjk_1[j][k]=Wjk[j][k];Wjk_2[j][k]=Wjk_1[j][k];}b[0][j]=b[0][j]-lr2*d_b[0][j];a[0][j]=a[0][j]-lr2*d_a[0][j];d_a[0][j]=0.0;d_b[0][j]=0.0;net[0][j]=0.0;net_ab[0][j]=0.0;a_1[0][j]=a[0][j];a_2[0][j]=a_1[0][j];b_1[0][j]=b[0][j];b_1[0][j]=b_1[0][j];}for(j=0;j<output_col;j++){for(k=0;k<n;k++){Wij[j][k]=Wij[j][k]-lr1*d_Wij[j][k];d_Wij[j][k]=0.0;Wij_1[j][k]=Wij[j][k];Wij_2[j][k]=Wij_1[j][k];}y[0][j]=0.0;}}}//////網(wǎng)絡(luò)預(yù)測//////預(yù)測輸入歸一化vector<double>inputtest_max(input_col);vector<double>inputtest_min(input_col);vector<vector<double>>OutputAsInput1(inputtest_row);for(i=0;i<inputtest_row;i++){OutputAsInput1[i].resize(input_col);}//doubleinputtest_min[input_col]={{0.0}};for(i=0;i<input_col;i++){tempmax=Output[0][i];tempmin=Output[0][i];for(j=0;j<inputtest_row;j++){if(Output[j][i]>tempmax)tempmax=Output[j][i];if(Output[j][i]<tempmin)tempmin=Output[j][i];}inputtest_max[i]=tempmax;inputtest_min[i]=tempmin;for(j=0;j<inputtest_row;j++){if(inputtest_max[i]==inputtest_min[i])OutputAsInput1[j][i]=0.5*(input_max[i]+input_min[i]);elseOutputAsInput1[j][i]=(Output[j][i]-inputtest_min[i])/(inputtest_ma

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論