移植MATLAB神經網路演算法到MFC平台

2021-07-22 16:10:15 字數 3215 閱讀 9283

該演算法需利用高斯隨機分布來製造**,因此另封裝乙個randn()函式製造偽高斯隨機數,然後在forecast()函式中對樣本進行網路訓練,並利用訓練結果進行網路**,

#gauss.h/

#define pi 3.1415926535897

#define rd (rand()/(rand_max+1.0))

double randn(int type)

/////**演算法///

vector< vector< double > > input;訓練輸入樣本

vector< vector< double > > output;//訓練輸出樣本

vector< vector< double > > preinput;**輸入樣本

vector< vector< double > > preoutput; ///**輸出結果

int input_col;//定義訓練輸入樣本列,資料計算以列為單位,與matlab中列向量同意義

int input_row;//定義訓練輸入樣本行

int inputtest_row;//定義訓練輸出樣本行

int output_col;//定義**輸入樣本列,即需要**的資料,1列

int output_row;//定義**輸入樣本行

int outputtest_row;//定義**輸出樣本行,1列

int maxgen; //迭代次數

int n; //**節點個數

double input[20][1];

///以下為個訓練向量與**向量結構初始化,**時需進行資料有效化填充

int i=0;

input.resize(input_row);

for(i=0;i,並定義命名空間,using namespace std;///

///規避double陣列只能靜態定義的特性///

///除錯中發現double二維及以上常規陣列無法進行指標與陣列名之間的轉化/

/具體錯誤cannot convert double** to double

void forecast()

vector< vector< double > > a_1(1);

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

vector< vector< double > > a_2(1);

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

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

vector< vector< double > > b(1);

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

vector< vector< double > > b_1(1);

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

vector< vector< double > > b_2(1);

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

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

} vector< vector< double > > y(1);

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

vector< vector< double > > net(1);

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

vector< vector< double > > net_ab(1);

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

vector< vector< double > > d_wjk(n);

for(i=0;i> d_wij(output_col);

for(i=0;i> d_a(1);

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

vector< vector< double > > d_b(1);

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

//%% 輸入輸出資料歸一化

double tempmax = 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;itempmax)

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++)

}vector< double > output_max(output_col);

vector< double > output_min(output_col);

vector< vector< double > > preinput1(output_row);

for(i=0;itempmax)

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++)

}//%% 網路訓練

vector< double > x(input_col);

vector< double > yqw(output_col);

vector< double > error(maxgen);

double temp = 0.0;

for(i = 0; i < maxgen; i++)

inputtest_max[i] = tempmax;

inputtest_min[i] = tempmin;

for(j = 0;j < inputtest_row;j++)

}/網路**

vector< double > x_test(input_col);

vector< vector< double > > yuce(1);

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

for(i = 0; i yun(outputtest_row);

for(i = 0; i < outputtest_row; i ++)

return;

}

線性神經網路 matlab神經網路

自適應線性元件20世紀50年代末由widrow和hoff提出,主要用於線性逼近乙個函式式而進行模式聯想以及訊號濾波 模型識別和控制等。線性神經網路和感知器的區別是,感知器只能輸出兩種可能的值,而線性神經網路的輸出可以取任意值。線性神經網路採用widrow hoff學習規則,即lms least me...

MATLAB神經網路

ai 菌這幾天沉迷於數模的ai菌來補發文章啦。深深地體會到雖然神經網路工具的api已經有了非常完備的封裝,但是資料的預處理真的讓人感覺非常的麻煩。當你把所有的異常點一一清理,有一種 掘地求公升終於爬出大氣層 飛向太空的感覺 雖然ai菌連夢想開始的地方都爬不出去 所以今天就來介紹一下這幾天的收穫吧 a...

從生物神經網路到人工神經網路

如今提及人工智慧,大家期待的一定是某種可以 學習 的方法,這種方法使用數學模型從資料中獲取模式的某種表示。在眾多 學習 方法中,獲得最多關注,承載最多期望的非 神經網路 莫屬。既然我們將這種數學方法稱作神經網路,那麼他必然和廣泛存在於生物體內的神經網路存在某種聯絡。讓我們考察乙個典型的神經連線。每個...