版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
移植MATLAB神經(jīng)網(wǎng)絡(luò)算法到MFC平臺(tái)該算法需利用高斯隨機(jī)分布來(lái)制造預(yù)測(cè),因此另封裝一個(gè)randn()函數(shù)制造偽高斯隨機(jī)數(shù),然后在Forecast()函數(shù)中對(duì)樣本進(jìn)行網(wǎng)絡(luò)訓(xùn)練,并利用訓(xùn)練結(jié)果進(jìn)行網(wǎng)絡(luò)預(yù)測(cè),[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ù)測(cè)算法///////////////////////////////////////////////////////vector<vector<double>>Input;////////////訓(xùn)練輸入樣本vector<vector<double>>Output;//////////訓(xùn)練輸出樣本vector<vector<double>>PreInput;////////預(yù)測(cè)輸入樣本vector<vector<double>>PreOutput;///////預(yù)測(cè)輸出結(jié)果intinput_col;//定義訓(xùn)練輸入樣本列,數(shù)據(jù)計(jì)算以列為單位,與MATLAB中列向量同意義intinput_row;//定義訓(xùn)練輸入樣本行intinputtest_row;//定義訓(xùn)練輸出樣本行intoutput_col;//定義預(yù)測(cè)輸入樣本列,即需要預(yù)測(cè)的數(shù)據(jù),1列intoutput_row;//定義預(yù)測(cè)輸入樣本行intoutputtest_row;//定義預(yù)測(cè)輸出樣本行,1列intmaxgen;//迭代次數(shù)intn;//隱形節(jié)點(diǎn)個(gè)數(shù)doubleInput[20][1];///////////////以下為個(gè)訓(xùn)練向量與預(yù)測(cè)向量結(jié)構(gòu)初始化,預(yù)測(cè)時(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ù)測(cè)體,采用vector向量結(jié)構(gòu)計(jì)算,可隨時(shí)改變數(shù)組結(jié)構(gòu)////////////////////////////////////vector的使用需添加標(biāo)準(zhǔn)庫(kù)頭文件<vertor>,并定義命名空間,usingnamespacestd;//////////////////規(guī)避double數(shù)組只能靜態(tài)定義的特性//////////////////////////////////////////////////////////////////////////////////////////////調(diào)試中發(fā)現(xiàn)double二維及以上常規(guī)數(shù)組無(wú)法進(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ù)測(cè)//////預(yù)測(cè)輸入歸一化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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度南京二手房交易稅費(fèi)減免政策咨詢合同
- 二零二五年度農(nóng)田租賃與農(nóng)業(yè)金融服務(wù)合同樣本
- 2025年度瓶裝純凈水原水采集與處理合同4篇
- 2025年度門面房屋租賃合同租賃雙方信息保密協(xié)議4篇
- 2025年度海洋工程技術(shù)服務(wù)合同協(xié)議范本3篇
- 民政局二零二五年度離婚協(xié)議書(shū)電子模板使用許可4篇
- 二零二五版金融信息服務(wù)合同4篇
- 2025年度個(gè)人店面租賃合同范本簡(jiǎn)易版2篇
- 2025年度個(gè)人房產(chǎn)買賣合同法律咨詢協(xié)議2篇
- 2025年度個(gè)人網(wǎng)絡(luò)安全與隱私保護(hù)咨詢服務(wù)合同范本3篇
- 圖形的位似課件
- 醫(yī)院急診醫(yī)學(xué)小講課課件:急診呼吸衰竭的處理
- 腸梗阻導(dǎo)管在臨床中的使用及護(hù)理課件
- 調(diào)料廠工作管理制度
- 2023年MRI技術(shù)操作規(guī)范
- 小學(xué)英語(yǔ)單詞匯總大全打印
- 衛(wèi)生健康系統(tǒng)安全生產(chǎn)隱患全面排查
- GB/T 15114-2023鋁合金壓鑄件
- 三相分離器原理及操作
- 貨物驗(yàn)收單表格模板
- 600字A4標(biāo)準(zhǔn)作文紙
評(píng)論
0/150
提交評(píng)論