Использование нечеткой искусственной нейронной сети TSK (Takagi, Sugeno, Kang’a) в задаче прогнозирования валютных курсов

Прогнозирование валютных курсов с использованием искусственной нейронной сети. Общая характеристика среды программирования Delphi 7. Существующие методы прогнозирования. Характеристика нечетких нейронных сетей. Инструкция по работе с программой.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 12.11.2010
Размер файла 2,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Begin

SetSize(B,A.M,A.N);

for i:=0 to A.M-1 do for j:=0 to A.N-1 do B.Data[i,j]:=A.Data[i,j]+Value;

Result:=B;

End;

Function MulValue(const A:Matrix; Value:extended):Matrix; { домножение матрицы на число }

var

i,j : integer;

B : Matrix;

Begin

SetSize(B,A.M,A.N);

for i:=0 to A.M-1 do for j:=0 to A.N-1 do B.Data[i,j]:=A.Data[i,j]*Value;

Result:=B;

End;

Procedure DeleteRow(var A:Matrix; Row:integer); { удаление строки }

var

i : integer;

Begin

if (Row>=A.M) then Raise Exception.Create('Попытка удалить из матрицы несуществующую строку!');

SetLength(A.Data[Row],0);

for i:=Row+1 to A.M-1 do A.Data[i-1]:=A.Data[i];

SetLength(A.Data,A.M-1);

dec(A.M);

End;

Procedure DeleteCol(var A:Matrix; Col:integer); { удаление столбца }

var

i,j : integer;

Begin

if (Col>=A.N) then Raise Exception.Create('Попытка удалить из матрицы несуществующий столбец!');

for i:=0 to A.M-1 do begin

for j:=Col+1 to A.N-1 do A.Data[i,j-1]:=A.Data[i,j];

SetLength(A.Data[i],A.N-1);

end;

dec(A.N);

End;

Procedure DeleteCross(var A:Matrix; Row:integer); { удаление строки и столбца с заданным номером }

Begin

DeleteRow(A,Row);

DeleteCol(A,Row);

End;

Procedure InsertRow(var A:Matrix; Row:integer);

var

i : integer;

Begin

SetSize(A,A.M+1,A.N);

for i:=A.M-1 downto Row do A.Data[i+1]:=A.Data[i];

SetLength(A.Data[Row],A.N);

for i:=0 to A.N-1 do A.Data[Row,i]:=0;

End;

Procedure InsertCol(var A:Matrix; Col:integer);

var

i,j : integer;

Begin

SetSize(A,A.M,A.N+1);

for i:=0 to A.M-1 do begin

for j:=A.N-1 downto Col do A.Data[i,j+1]:=A.Data[i,j];

A.Data[i,Col]:=0;

end;

End;

Function MapMatrix(const A:Matrix; const Map:TMap):Matrix; { удаление заданных строк и столбцов }

var

i,j : integer;

B : Matrix;

CurValue : integer;

Begin

SetSize(B,A.M,A.N);

for i:=0 to A.M-1 do for j:=0 to A.N-1 do B.Data[i,j]:=A.Data[i,j];

for i:=0 to length(Map)-2 do begin

for j:=i to length(Map)-1 do if (Map[j]<Map[i]) then begin

CurValue:=Map[j];

Map[j]:=Map[i];

Map[i]:=CurValue;

end;

end;

for i:=length(Map)-1 downto 0 do DeleteRow(B,Map[i]);

for i:=length(Map)-1 downto 0 do DeleteCol(B,Map[i]);

Result:=B;

End;

Function MapVector(const A:Matrix; const Map:TMap):Matrix; { удаление заданных строк}

var

i,j : integer;

B : Matrix;

CurValue : integer;

Begin

SetSize(B,A.M,A.N);

for i:=0 to A.M-1 do for j:=0 to A.N-1 do B.Data[i,j]:=A.Data[i,j];

for i:=0 to length(Map)-2 do begin

for j:=i to length(Map)-1 do if (Map[j]<Map[i]) then begin

CurValue:=Map[j];

Map[j]:=Map[i];

Map[i]:=CurValue;

end;

end;

for i:=length(Map)-1 downto 0 do DeleteRow(B,Map[i]);

Result:=B;

End;

Function UnmapMatrix(const A:Matrix; const Map:TMap):Matrix; { восстановление матрицы до исходного размера}

var

i,j : integer;

B : Matrix;

CurValue : integer;

Begin

SetSize(B,A.M,A.N);

for i:=0 to A.M-1 do for j:=0 to A.N-1 do B.Data[i,j]:=A.Data[i,j];

for i:=0 to length(Map)-2 do begin

for j:=i to length(Map)-1 do if (Map[j]<Map[i]) then begin

CurValue:=Map[j];

Map[j]:=Map[i];

Map[i]:=CurValue;

end;

end;

for i:=0 to length(Map)-1 do InsertRow(B,Map[i]);

for i:=0 to length(Map)-1 do InsertCol(B,Map[i]);

Result:=B;

End;

Function UnmapVector(const A:Matrix; const Map:TMap):Matrix; { восстановление количества строк матрицы до исходного размера}

var

i,j : integer;

B : Matrix;

CurValue : integer;

Begin

SetSize(B,A.M,A.N);

for i:=0 to A.M-1 do for j:=0 to A.N-1 do B.Data[i,j]:=A.Data[i,j];

for i:=0 to length(Map)-2 do begin

for j:=i to length(Map)-1 do if (Map[j]<Map[i]) then begin

CurValue:=Map[j];

Map[j]:=Map[i];

Map[i]:=CurValue;

end;

end;

for i:=0 to length(Map)-1 do InsertRow(B,Map[i]);

Result:=B;

End;

Function SubMatrix(const A:Matrix; const MapX,MapY:TMap):Matrix; { выделение подматрицы, содержащей заданные столбцы и строки }

var

i,j : integer;

B : Matrix;

Begin

SetSize(B,Length(MapY),Length(MapX));

for i:=0 to length(MapY)-1 do begin

for j:=0 to length(MapX)-1 do B.Data[i,j]:=A.Data[MapY[i],MapX[j]];

end;

Result:=B;

End;

Function RangeMatrix(const A:Matrix; StartX,EndX,StartY,EndY:integer):Matrix; { выделение подматрицы, содержащей заданный диапазон столбцов и строк }

var

i,j : integer;

B : Matrix;

Begin

SetSize(B,EndY-StartY+1,EndX-StartX+1);

for i:=StartY to EndY do begin

for j:=StartX to EndX do B.Data[i-StartY,j-StartX]:=A.Data[i,j];

end;

Result:=B;

End;

Function Vectorize(const A:Matrix):Vector; { преобразование матрицы в вектор, расположенный в памяти последовательно }

var

i,j,k : integer;

V : Vector;

Begin

SetLength(V,A.M*A.N+2);

V[0]:=A.M;

V[1]:=A.N;

k:=2;

for i:=0 to A.M-1 do for j:=0 to A.N-1 do begin

V[k]:=A.Data[i,j];

inc(k);

end;

Result:=V;

End;

Function Unvectorize(const V:Vector):Matrix; { обратное преобразование: вектор в матрицу }

var

i,j,k : integer;

A : Matrix;

Begin

SetSize(A,trunc(V[0]),trunc(V[1]));

k:=2;

for i:=0 to A.M-1 do for j:=0 to A.N-1 do begin

A.Data[i,j]:=V[k];

inc(k);

end;

Result:=A;

End;

end.


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.