Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Метод главных компонент и линейные многообразия на практике: применение к Российской банковской системе

УТВЕРЖДАЮ

Заведующий кафедрой

_________ / Шайдуров В. В

(подпись)

«___» ________2012 г.

 

МАГИСТЕРСКАЯ ДИССЕРТАЦИЯ

 

МЕТОД ГЛАВНЫХ КОМПОНЕНТ И ЛИНЕЙНЫЕ МНОГООБРАЗИЯ НА ПРАКТИКЕ: ПРИМЕНЕНИЕ К РОССИЙСКОЙ БАНКОВСКОЙ СИСТЕМЕ

 

Направление 010300.68 “Математика. Компьютерные науки”

Магистерская программа 010300.68.10 Компьютерные технологии в гуманитарных и социально-экономических науках

 

 

Научный руководитель

кандидат технических наук,

доцент ___________/ Л.И. Покидышева (подпись, дата)

 

Выпускник ____________/ К.Ю. Веретнова

(подпись, дата)

 

 

Красноярск 2012

 

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

1 Ожегов С.И., Шведова Н.Ю. Толковый словарь русского языка. М.: изд-во «Азь», 1992. 976 с.

2 Gorban A. N., Zinovyev A. Y. Principal Graphs and Manifolds, Chapter 2 in: Handbook of Research on Machine Learning Applications and Trends: Algorithms, Methods, and Techniques, Emilio Soria Olivas et al. (eds), IGI Global, Hershey, PA, USA. 2009. P. 28-59.

3 Gorban A. N., Zinovyev A. Y. Principal manifolds and graphs in practice: from molecular biology to dynamical systems // International Journal of Neural Systems. 2010. V. 20. №. 3. P. 219–232.

4 Рейтинги банков: рейтинговое интернет-агентство. 2012. URL: http://www.banki.ru (дата обращения 15.01.2012).

5 Центральный банк Российской Федерации: Интернет-ресурс. 2012. URL: http://www.cbr.ru (дата обращения 15.01.2012).

6 Pearson K. On lines and planes of closest fit to systems of points in space. Philosophical Magazine, 1901. 559-572 c.

7 Метод главных компонент: свободная энциклопедия. 2012. URL: http://ru.wikipedia.org (дата обращения 03.04.2012).

8 Jolliffe I.T. Principal Component Analysis, Springer: Springer Series in Statistics, 2nd ed., Springer, NY, 2002. P. 487 c.

9 Ланцош К. Практические методы прикладного анализа: Справочное руководство. М.: Государственное издательство физико-математической литературы, 1961. 524 c.

10 Зиновьев, А.Ю. Визуализация многомерных данных / Зиновьев А.Ю. – Красноярск: издательство КГТУ, 2000. 168с.

11 MacQueen J. Some methods for classification and analysis of multivariate observations. In Proc. 5th Berkeley Symp. on Math. Statistics and Probability. 1967. 281-297 c.

12 Россиев А.А. Итерационное моделирование неполных данных с помощью многообразий малой размерности: дис. … 12.00.00: защищена 31.05.00: утв. 19.10.00. Красноярск, 2000. 83 с.

13 Самарский А. А. Введение в численные методы. М.: изд-во «Лань», 2005. 288 с.

14 Аттетков А.В., Галкин С.В., Зарубин В.С Методы оптимизации. М.: изд-во МГТУ им. Н. Э. Баумана, 2003. 441 с.

15 Распределение Гиббса: свободная энциклопедия. 2012. URL: http://ru.wikipedia.org (дата обращения 03.04.2012).

16 Kirkpatrick S., Gelatt C. D., Vecchi M. P. Optimization by simulated annealing. Science. 1983. 671–680 c.

 

ПРИЛОЖЕНИЕ 1

 

Таблица 2 - Банки, участвующие в исследовании

Название банка Название банка Название Банка
ЮниКредит Банк Транскредитбанк Нота-Банк
Стройкредит Национальный Резервный Банк Фондсервисбанк
Инвестбанк Мастер-Банк СБ Банк
ЦентроКредит Открытие Нордеа Банк
Балтийский Банк НОМОС-Банк Татфондбанк
Международный Банк Санкт-Петербурга Транскапиталбанк Росгосстрах Банк
Хоум Кредит Банк Интеза Национальный Торговый Банк
МДМ Банк Московский Банк Реконструкции и Развития РосЕвроБанк
Россия Росбанк Балтинвестбанк
Газпромбанк Уралсиб ВестЛБ Восток
Банк «Санкт-Петербург» Русский Стандарт Промсвязьбанк
Сургутнефтегазбанк Абсолют Банк Зенит
СКБ-Банк Союз Внешпромбанк
Московский Индустриальный Банк Российский Капитал Национальный Банк «Траст»
ВТБ Еврофинанс Моснарбанк Всероссийский Банк Развития Регионов
Собинбанк Пробизнесбанк Эйч-Эс-Би-Си Банк (HSBC)
Альфа-Банк Металлинвестбанк Райффайзенбанк
Возрождение ИНГ Банк Национальный Расчетный Депозитарий
Восточный Экспресс Банк Новикомбанк Кредит Европа Банк
Связь-Банк Ситибанк Дойче Банк
Сбербанк России Бинбанк Коммерцбанк (Евразия)
ВТБ 24 Ак Барс Расчетная Палата РТС
Креди Агриколь КИБ Королевский Банк Шотландии ДельтаКредит
Петрокоммерц Международный Финансовый Клуб МСП Банк
Русфинанс Банк Локо-Банк Россельхозбанк
Азиатско-Тихоокеанский Банк Банк Москвы Ренессанс Кредит
КИТ Финанс Инвестиционный Банк Инвестторгбанк СМП Банк
Глобэкс ОТП Банк БНП Париба Банк
Ханты-Мансийский Банк Юниаструм Банк Национальный Стандарт
Московский Кредитный Банк Москомприватбанк Национальный Клиринговый Центр
Пересвет Авангард  

 

 

ПРИЛОЖЕНИЕ 2

 

Список показателей, которые были выбраны для исследования системы банков:

Глава I. ДОХОДЫ:
1. По предоставленным кредитам;
2. По прочим размещенным средствам;
3. По денежным средствам на счетах;
4. По депозитам размещенным;
5. По вложениям в долговые обязательства (кроме векселей);
6. По учтенным векселям;
7. Доходы от открытия и ведения банковских счетов, расчетного и кассового обслуживания клиентов;
8. Доходы от купли-продажи иностранной валюты в наличной и безналичной формах;
9. Доходы от выдачи банковских гарантий и поручительств;
10. Доходы от проведения других сделок;
11. Доходы от операций с приобретенными ценными бумагами;
12. Доходы от операций с выпущенными ценными бумагами;
13. Дивиденды от вложений в акции;
14. Дивиденды от вложений в акции дочерних и зависимых обществ;
15. Доходы от участия в хозяйственных обществах (кроме акционерных);
16. Доходы от участия в дочерних и зависимых хозяйственных обществах (кроме акционерных);
17. Положительная переоценка ценных бумаг, средств в иностранной валюте, драгоценных металлов;
18. Доходы от применения встроенных производных инструментов, не отделяемых от основного договора;
19. Доходы от расчетных (беспоставочных) срочных сделок;
20. Комиссионные вознаграждения;
21. Другие операционные доходы;
22. Штрафы, пени, неустойки;
23. Доходы прошлых лет, выявленные в отчетном году;
24. Другие доходы, относимые к прочим.
Глава II. РАСХОДЫ:
1. По полученным кредитам;
2. По денежным средствам на банковских счетах клиентов-юридических лиц;
3. По депозитам юридических лиц;
4. По прочим привлеченным средствам юридических лиц;
5. По денежным средствам на банковских счетах клиентов - физических лиц;
6. По депозитам клиентов - физических лиц;
7. По прочим привлеченным средствам клиентов - физических лиц;
8. По выпущенным долговым обязательствам;
9. Расходы по купле-продаже иностранной валюты в наличной и безналичной формах;
10. Расходы по проведению других сделок;
11.Расходы по операциям с приобретенными ценными бумагами;
12. Расходы по операциям с выпущенными ценными бумагами;
13. Отрицательная переоценка ценных бумаг, средств в иностранной валюте, драгоценных металлов;
14.Расходы от применения встроенных производных инструментов, не отделяемых от основного договора;
15. Расходы по расчетным (беспоставочным) срочным сделкам;
16. Комиссионные сборы;
17. Другие операционные расходы;
18. Расходы на содержание персонала;
19. Амортизация;
20. Расходы, связанные с содержанием (эксплуатацией) имущества и его выбытием;
21. Организационные и управленческие расходы;
22. Штрафы, пени, неустойки;
23. Расходы прошлых лет, выявленные в отчетном году;
24. Другие расходы, относимые к прочим.

 


 

ПРИЛОЖЕНИЕ 3

 

Фрагмент программы, реализующей процесс нормирования матрицы данных перед вычислением векторов главным компонент. В программе – матрица данных.

Функция вычисления выборочного среднего:

double average(double *a, int n)

{

double average = 0;

for (int i = 0; i < n; i++)

average = average + a[i];

average = average/n;

return average;

}

 

Функция вычисления выборочной дисперсии:

double dispersion(double *a, int n)

{

double avg1 = 0, avg2 = 0, dispersion;

for (int i = 0; i < n; i++)

{

avg1 = avg1 + a[i];

avg2 = avg2 + a[i]*a[i];

}

avg1 = avg1/n;

avg1 = avg1*avg1;

avg2 = avg2/n;

dispersion = avg2 - avg1;

return dispersion;

}

Нормировка по столбцам:

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

{

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

c[i] = X[i][j];

tmp = average(c, n);

tmp1 = sqrt(dispersion(c, n));

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

if (tmp1!= 0)

X[i][j] = (X[i][j] - tmp)/tmp1;

}

 

ПРИЛОЖЕНИЕ 4

Фрагмент программы, реализующей поиск векторов главных компонент. На вход подается нормированная матрица данных . Затем вычисляется ковариационная матрица , после чего находятся собственные вектора и собственные значения этой матрицы с помощью метода вращений Якоби. Найденные собственные вектора – вектора главных компонент.

Функция нахождения коэффициента ковариации:

double kfr (int n, double *a, double *b)

{

int i;

double sr1, sr2, sum1=0, sum2=0, pr1=0, d, kf;

 

//Находим среднее:

sr1 = average(a, n); //функция average(x,y) – функция из предыдущего фрагмента программы

sr2 = average(b, n);

sum1 = 0;

 

//Перемножаем центрированные компоненты:

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

{

pr1=(a[i]-sr1)*(b[i]-sr2);

sum1=sum1+pr1;

}

 

d=sum1/n;

kf=d;

return kf;

}

 

Вспомогательная функция, для вычисления модуля числа:

double modul (double n)

{

if (n >= 0)

return n;

else

return (-1)*n;

}

 

Вспомогательная функция для вычисления функции sign(x):

double sign (double n)

{

if (n > 0)

return 1;

else

{

if (n == 0)

return 0;

else

return -1;

}

}

Вычисляем ковариационную матрицу:

double b1[n], b2[n];

double kf;

 

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

{

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

{

b1[j] = X[j][i];

b2[j] = X[j][i];

}

kf = kfr(n, b1, b2);

cov[i][i] = kf;

}

 

for(int t = 0; t < m; t++)

{

for(int k = t; k < m - 1; k++)

{

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

{

b1[j] = X[j][t];

b2[j] = X[j][k+1];

}

kf=kfr(n, b1, b2);

cov[k+1][t] = kf;

cov[t][k+1] = kf;

}

}

 

/Переменные для нахождения собственных векторов:

int k, l;

double v[m][m], vt[m][m], vta[m][m], V[m][m], W[m][m], max, max1, q, eps, cos, sin;

 

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

{

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

{

if (i!= j)

V[i][j] = 0;

else V[i][j] = 1;

}

}

while (N!= 1551)

{

max = cov[1][0];

k = 1;

l = 0;

//Находим максимальный по модулю элемент

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

{

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

{

if(i!= j)

{

if (max < modul(cov[i][j]))

{

max = modul(cov[i][j]);

k = i;

l = j;

}

}

}

}

//Строим матрицу Vk:

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

{

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

{

if(i == j)

v[i][j] = 1;

else

v[i][j] = 0;

}

}

 

Строим ротацию:

q = sqrt(1-((4*cov[k][l]*cov[k][l])/(pow((cov[k][k] - cov[l][l]),2)+pow(2*cov[k][l],2))));

if (cov[k][k] == cov[l][l])

eps = sign(cov[k][l]);

else

eps = sign((cov[k][k] - cov[l][l])/(2*cov[k][l]));

cos = sqrt((1+q)/2);

sin = eps*sqrt((1-q)/2);

v[k][k] = cos;

v[l][l] = cos;

v[k][l] = (-1)*sin;

v[l][k] = sin;

 

 

//Транспонирование Vk:

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

{

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

{

vt[i][j] = v[j][i];

}

}

// Умножение матриц:

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

{

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

{

tmp=0;

for(z = 0; z < m; z++)

{

tmp += vt[i][z]*cov[z][j];

}

vta[i][j] = tmp;

}

}

//Матрица а(k+1):

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

{

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

{

tmp = 0;

for (z = 0; z < m; z++)

{

tmp += vta[i][z]*v[z][j];

}

cov[i][j] = tmp;

}

}

//Матрица собственных векторов:

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

{

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

{

tmp = 0;

for(z = 0; z < m; z++)

{

tmp += V[i][z]*v[z][j];

}

W[i][j] = tmp;

}

}

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

{

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

{

V[i][j] = W[i][j];

}

}

N = N + 1;

}

 

 

ПРИЛОЖЕНИЕ 5

Таблица 3 – Вектора главных компонент

  1 вектор 2 вектор 3 вектор 4 вектор 5 вектор
0,521165 0,158703 0,056407 0,042407 0,037734
  0,190796 0,082305 0,011961 0,062177 0,023413
  0,141881 -0,22729 0,127359 -0,04789 0,103607
  0,032417 -0,05782 -0,13615 -0,04348 -0,23789
  0,071608 -0,0526 -0,08836 0,413741 -0,11122
  0,191252 0,062681 0,009049 -0,03139 0,065775
  0,025518 -0,07522 -0,40292 -0,0883 0,066441
  0,178406 0,145881 0,041045 -0,00104 0,016567
  0,076106 -0,10606 -0,07241 -0,26433 -0,53008
  0,16719 -0,10679 -0,14071 -0,08431 0,077998
  0,1573 -0,16279 0,187974 -0,04482 0,067023
  0,089818 -0,22767 -0,23762 -0,17153 0,132565
  0,083915 -0,01949 -0,2384 -0,02171 0,028438
  0,173813 -0,0222 0,024218 -0,03606 0,121529
  0,07668 -0,29552 0,227963 -0,0024 0,056646
  0,01785 -0,0443 -0,2438 0,500131 -0,15916
  0,006603 0,022293 0,059501 0,060799 -0,13842
  0,192474 0,026251 0,047681 -0,00228 0,035251
  0,173542 0,136942 -0,00819 -0,07887 -0,07797
  0,081264 -0,28984 0,226175 -0,01268 0,016984
  0,187732 0,098061 -0,00151 0,034775 -0,04459
  0,185829 0,106263 -0,05354 -0,03501 0,044983
  0,159003 -0,08521 0,09443 0,050272 -0,09315
  0,174664 0,051089 -0,0511 0,029511 0,089232
  0,03362 -0,06922 0,086628 0,352901 -0,12333
  0,16295 -0,17506 0,127149 0,023177 0,063982
  0,158127 -0,02779 -0,18903 -0,0984 0,195741
  0,136351 -0,22531 -0,08089 0,162156 0,00685
  0,139701 -0,17022 -0,13538 0,228626 -0,01426
  0,168443 0,148029 0,039922 -0,01604 -0,09782
  0,173526 0,157053 0,02776 0,028959 0,036025
  0,032332 -0,08281 -0,37348 -0,1501 0,23828
  0,104499 -0,1911 -0,22048 0,276477 -0,03174
  0,074439 -0,10895 -0,07533 -0,26661 -0,52729
  0,097852 -0,27737 0,185558 -0,02606 0,065114
  0,068799 -0,2337 -0,19933 -0,17168 0,071041
  -0,00137 -0,02282 -0,00842 0,076689 -0,05911
  0,192522 0,025817 0,048142 -0,00217 0,035096
  0,175176 0,145682 0,012502 -0,06318 -0,02513

Окончание Таблицы 3

  1 вектор 2 вектор 3 вектор 4 вектор 5 вектор
0,521165 0,158703 0,056407 0,042407 0,037734
  0,082777 -0,29398 0,211607 -0,01446 0,032455
  0,162697 0,022189 -0,11664 -0,01715 -0,13458
  0,186736 0,100236 -0,05893 -0,02182 0,045859
  0,184457 0,124434 0,018208 0,026201 0,016895
  0,180189 0,135466 0,054174 0,005857 0,034488
  0,172736 0,110145 -0,00584 0,060695 -0,08733
  0,185048 0,119428 0,031072 0,003523 0,026918
  0,166418 0,147073 0,049094 -0,02373 0,002017
  0,178514 0,058829 0,045366 -0,00398 0,01241
  0,135386 -0,10331 0,041349 -0,07038 -0,24395
  0,182603 0,118399 0,081666 0,017986 0,009606

 

 

ПРИЛОЖЕНИЕ 6

 

Фрагмент программы, реализующей процесс проецирования точек-банков из пространства показателей в пространство главных компонент. В программе – матрица данных, – вектора главных компонент.

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

{

sum1=0;

sum2=0;

 

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

b[j] = a[i][j];

 

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

{

sum1 = sum1+x1[j]*b[j];

sum2 = sum2+x2[j]*b[j];

}

 

y1[i] = sum1; //координата на векторе первой главной компоненты

y2[i] = sum2; //координата на векторе второй главной компоненты

}

 

 

ПРИЛОЖЕНИЕ 7

 

Таблица 4 – Координаты точек-банков на плоскости главных компонент

Название банка Координата на вектор первой главной компоненты Координата на вектор второй главной компоненты
ЮниКредит Банк 2,374094 4,003284
Стройкредит -2,613858 -1,453187
Инвестбанк -2,380410 -1,561806
ЦентроКредит -1,725142 -0,596934
Балтийский Банк -2,370714 -1,557370
Международный Банк Санкт-Петербурга -2,310513 -1,101855
Хоум Кредит Банк -0,335943 -0,155341
МДМ Банк 2,941014 0,232035
Россия -1,070576 0,957787
Газпромбанк 11,760691 11,766965
Банк «Санкт-Петербург» 1,622789 4,367865
Сургутнефтегазбанк -2,545138 -1,610059
СКБ-Банк -1,585749 -1,450145
Московский Индустриальный Банк -1,818490 -1,623637
ВТБ 24,026981 55,590524
Собинбанк -2,193588 -1,216814
Альфа-Банк 8,823002 2,943957
Возрождение -1,736126 -1,689404
Восточный Экспресс Банк -0,803815 -2,854669
Связь-Банк -1,112767 0,565542
Сбербанк России 57,562526 -30,040255
ВТБ 24 4,675935 -3,232880
Креди Агриколь КИБ -2,300235 -1,492675
Петрокоммерц -1,306289 -0,085267
Русфинанс Банк -1,497152 -1,506521
Азиатско-Тихоокеанский Банк -2,305665 -1,308319
КИТ Финанс Инвестиционный Банк -1,952633 -0,529320
Глобэкс -1,895175 -0,112296
Ханты-Мансийский Банк -0,769510 1,431843
Московский Кредитный Банк -1,096793 -0,402439
Пересвет -2,413004 -1,336581

Продолжение Таблицы 4

Название банка Координата на вектор первой главной компоненты Координата на вектор второй главной компоненты
Транскредитбанк 0,048396 -0,147753
Национальный Резервный Банк -2,001960 -1,106559
Мастер-Банк -1,977373 -1,701528
Открытие -0,569584 1,937599
НОМОС-Банк 3,150664 9,984174
Транскапиталбанк -1,732372 -0,905467
Интеза -1,994424 -1,434074
Московский Банк Реконструкции и Развития -1,729117 -0,736802
Росбанк 2,833093 -1,127206
Уралсиб 1,494326 -1,303587
Русский Стандарт 0,926627 -2,697405
Абсолют Банк -1,181132 -0,920107
Союз -2,085640 -1,326279
Российский Капитал -2,511450 -1,529866
Еврофинанс Моснарбанк -2,464229 -1,432528
Пробизнесбанк -1,439319 -0,767866
Металлинвестбанк -1,596304 1,527923
ИНГ Банк -0,985498 2,404837
Новикомбанк -1,864271 -0,480926
Ситибанк 0,405632 -1,347922
Бинбанк -1,736556 -1,617873
Ак Барс -0,277435 0,871502
Королевский Банк Шотландии -2,423102 -1,343624
Международный Финансовый Клуб -2,383887 -0,947004
Локо-Банк -2,196123 -1,305379
Банк Москвы 3,525042 3,820341
Инвестторгбанк -2,164388 -0,840584
ОТП Банк -1,387707 -1,743280
Юниаструм Банк -2,020231 -1,802870
Москомприватбанк -2,155772 -1,825333
Авангард -2,092095 -1,333486
Нота-Банк -2,509552 -1,395992
Фондсервисбанк -2,225199 -1,364911
СБ Банк -2,316109 -0,954288
Нордеа Банк -1,853591 -1,364391
Татфондбанк -2,102027 -1,143499

Окончание Таблицы 4

Название банка Координата на вектор первой главной компоненты Координата на вектор второй главной компоненты
Татфондбанк -2,102027 -1,143499
Росгосстрах Банк -1,553986 -0,602156
Национальный Торговый Банк -2,549446 -1,523503
РосЕвроБанк -1,934127 -0,809282
Балтинвестбанк -2,352803 -1,419392
ВестЛБ Восток -2,644208 -1,542497
Промсвязьбанк 4,258492 4,654956
Зенит -1,143229 0,343914
Внешпромбанк -2,205058 -1,098956
Национальный Банк «Траст» -1,172632 -2,128660
Всероссийский Банк Развития Регионов -2,217552 -1,478595
Эйч-Эс-Би-Си Банк (HSBC) -2,125520 -0,906893
Райффайзенбанк 2,769333 -0,964244
Национальный Расчетный Депозитарий -2,416024 -1,391928
Кредит Европа Банк -1,619188 -0,286790
Дойче Банк -0,653969 -0,525841
Коммерцбанк (Евразия) -2,529929 -1,298737
Расчетная Палата РТС -2,595449 -1,395257
ДельтаКредит -2,453909 -1,060156
МСП Банк -2,411716 -1,128558
Россельхозбанк 4,544411 6,522741
Ренессанс Кредит -1,707827 -0,632283
СМП Банк -1,894053 0,661733
БНП Париба Банк -2,073547 -1,216481
Национальный Стандарт -2,513736 -1,054656
Национальный Клиринговый Центр -0,859461 2,741434

 


 

ПРИЛОЖЕНИЕ 8

 

Фрагмент программы, реализующей построение упругой кривой. В программе через обозначена матрица данных, – матрица координат узлов кривой.

 

Функция, вычисляющая расстояние между точками:

double distance (double x1, double y1, double x2, double y2)

{

return sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2));

}

 

Функция, для вычисления номера узла, который ближе всего находится к точке данных:

int min_dist (double *d, int n)

{

int i, k;

double min;

 

min = d[0];

k = 0;

 

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

{

if (d[i] < min)

{

min = d[i];

k = i;

}

}

 

return k;

}

 

Функция, вычисляющая значение функции :

int delta (int i, int j)

{

if (i == j)

return 1;

else

return 0;

}

 

Вспомогательные функции для вычисления коэффициентов матрицы системы, которую надо будет решать:

int deltaE (int i, int k)

{

return delta(i, k) - delta(i+1, k);

}

 

int deltaR (int i, int k)

{

return delta(i + 1, k) + delta(i - 1, k) - 2*delta(i, k);

}

 

Функция для вычисления нормы элемента:

double norm (double **y, int p, int m)

{

int i, j;

double n = 0;

 

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

{

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

{

n = n + y[i][j]*y[i][j];

}

}

 

n = sqrt(n);

 

return n;

}

 

Функция для вычисления значения функционала :

double Uy (double **X, int n, double **y)

{

double tmp, tmpr,**K, *d, uy;

int i, j, k, min;

 

K = new double *[p];

d = new double [p];

 

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

{

K[i] = new double [n];

}

 

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

{

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

K[i][j] = -1;

}

 

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

{

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

{

d[j] = distance(X[i][0], X[i][1], y[j][0], y[j][1]);

}

 

min = min_dist(d, p);

K[min][i] = i;

}

 

uy = 0;

 

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

{

k = 0;

 

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

{

if (K[i][j] >= 0)

{

k = k + 1;//количество точек в i-ом таксоне

 

//формирование U(y):

uy = uy + pow(distance(X[j][0] - y[i][0], X[j][1] - y[i][1], 0, 0), 2);

}

}

 

}

 

uy = uy/(double)n;

return uy;

}

 

Функция для вычисления значения функционала :

double U (double **y, int p, int m, double uy, double lyambda, double mu)

{

int i;

double u = uy;

 

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

{

u = u + lyambda*pow(distance(y[i+1][0] - y[i][0], y[i+1][1] - y[i][1], 0, 0), 2);

}

 

for (i = 1; i < p - 1; i++)

{

u = u + mu*pow(distance(y[i+1][0] + y[i-1][0] - 2*y[i][0], y[i+1][1] + y[i-1][1] - 2*y[i][1], 0, 0), 2);

}

 

return u;

}

 

Задается начальное положение узлов:

min = (int)X[0][0];

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

{

if (X[i][0] < min)

min = (int)X[i][0];

}

min = min - 1;

 

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

{

y[i][0] = min + i*hx;

y[i][1] = 0;

}

do

{

count++;

//Формирование матрицы K:

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

{

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

K[i][j] = -1;

}

 

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

{

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

{

d[j] = distance(X[i][0], X[i][1], y[j][0], y[j][1]);

}

 

min = min_dist(d, p);

K[min][i] = i;

}

 

//Формирование правой части:

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

{

b[i][0] = 0;

b[i][1] = 0;

 

k = 0;

 

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

{

if (K[i][j] >= 0)

{

b[i][0] = b[i][0] + X[j][0];

b[i][1] = b[i][1] + X[j][1];

 

k = k + 1;//количество точек в i-ом таксоне

 

}

}

 

b[i][0] = b[i][0]/(double)n;

b[i][1] = b[i][1]/(double)n;

 

qt[i] = k;

}

 

uy = Uy(X, n, y);

 

uOld = U(y, p, m, uy, lyambda, mu);

 

if (count == 1)

{

ubest = uOld;

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

{

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

{

ybest[i][j] = y[i][j];

}

}

}

 

if (count > 1)

{

mu = mu/2;

lyambda = lyambda/2;

}

//Формирование матрицы А:

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

{

for (k = 0; k < p; k++)

{

e = 0;

 

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

{

e = e + (lyambda/p)*deltaE(i, j)*deltaE(i, k);

}

 

r = 0;

 

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

{

r = r + (mu/p)*deltaR(i, j)*deltaR(i, k);

}

 

A[j][k] = (qt[j]*delta(j, k))/(double)n + e + r;

}

}

 

//Решение системы методом Зейделя:

 

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

{

for (k = 0; k < m; k++)

{

yk[j][k] = y[j][k];

}

}

do

{

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

{

for (k = 0; k < m; k++)

{

yki[j][k] = yk[j][k];

}

}

 

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

{

tmp = 0;

tmpr = 0;

for (k = 0; k < p; k++)

{

 

if (j!= k)

{

tmp = tmp + A[j][k]*yk[k][0];

tmpr = tmpr + A[j][k]*yk[k][1];

 

}

}

 

yk[j][0] = (b[j][0] - tmp)/A[j][j];

yk[j][1] = (b[j][1] - tmpr)/A[j][j];

}

 

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

{

for (k = 0; k < m; k++)

{

yki[j][k] = yki[j][k] - yk[j][k];

}

}

norma = norm(yki, p, m);

 

}

while (norma > eps);

//Метод имитации отжига:

uy = Uy(X, n, yk);

 

u = U(yk, p, m, uy, lyambda, mu);

 

if(count == 1)

{

Q = uOld - u;

}

 

if (u < uOld || (double(rand()%10))/10 < exp((-1)*(u - uOld)/mu))

{

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

{

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

{

y[i][j] = yk[i][j];

}

}

}

 

Q = Q*0.895;

 

uy = Uy(X, n, y);

 

u = U(y, p, m, uy, lyambda, mu);

 

if (u < ubest)

{

difference = abs(u - ubest);

 

ubest = u;

 

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

{

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

{

ybest[i][j] = y[i][j];

}

}

}

}

while (difference > eps);

 


 

ПРИЛОЖЕНИЕ 9

 

Фрагмент программы, реализующей процесс проецирования точек из пространства главных компонент на упругую кривую. В программе – матрица координат точек в пространстве главных компонент, – матрица координат узлов упругой кривой.

Функция, вычисляющая наклонных коэффициент прямой, проходящей через две заданные точки:

double main_str_a (double x1, double y1, double x2, double y2)

{

return (y2 – y1)/(x2 – x1);

}

Функция, вычисляющая сдвиг по оси прямой, проходящей через две заданные точки:

double main_str_b (double x1, double y1, double x2, double y2)

{

return y1 – main_str_a(x1, y1, x2, y2)*x1;

}

Функция, вычисляющая наклонных коэффициент прямой, перпендикулярной данной:

double adv_str_A (double x1, double y1, double x2, double y2)

{

return (-1)/(main_str_a(x1, y1, x2, y2));

}

Функция, вычисляющая сдвиг по оси прямой, перпендикулярной данной:

double adv_str_B (double x1, double y1, double x2, double y2)

{

return 0.5*(y1 + y2) – ((-1)/(main_str_a(x1, y1, x2, y2)))*(x1 + x2)*0.5;

}

 

double adv_str_Bj (double x1, double y1, double x2, double y2, double x, double y)

{

return y – ((-1)/(main_str_a(x1, y1, x2, y2)))*x;

}

 

Функция, вычисляющая первую координату точки пересечения двух прямых:

double pc_x (double A1, double B1, double A2, double B2)

{

return (B2 – B1)/(A1 – A2);

}

Функция, вычисляющая вторую координату точки пересечения двух прямых:

double pc_y (double A1, double B1, double A2, double B2)

{

return (B2*A1 – B1*A2)/(A1 – A2);

}

Находим узел, который находится ближе всего к точке данных:

for (I = 0; I < n; i++)

{

for (k = 0; k < p; k++)

{

d[k] = distance(x[i][0], x[i][1], y[k][0], y[k][1]);

}

 

min = min_dist(d, p);

if (min == 0 || min == p – 1)

{

if (min == 0)

{

Am = main_str_a(y[min][0], y[min][1], y[min + 1][0], y[min + 1][1]);

Bm = main_str_b(y[min][0], y[min][1], y[min + 1][0], y[min + 1][1]);

 

A1 = adv_str_A(y[min][0], y[min][1], y[min + 1][0], y[min + 1][1]);

B1 = adv_str_Bj(y[min][0], y[min][1], y[min + 1][0], y[min + 1][1], x[i][0], x[i][1]);

}

 

if (min == p – 1)

{

Am = main_str_a(y[min][0], y[min][1], y[min – 1][0], y[min – 1][1]);

Bm = main_str_b(y[min][0], y[min][1], y[min – 1][0], y[min – 1][1]);

 

A1 = adv_str_A(y[min][0], y[min][1], y[min – 1][0], y[min – 1][1]);

B1 = adv_str_Bj(y[min][0], y[min][1], y[min – 1][0], y[min – 1][1], x[i][0], x[i][1]);

}

 

 

pl[i][0] = pc_x(Am, Bm, A1, B1);

pl[i][1] = pc_y(Am, Bm, A1, B1);

 

}

 

else

{

A1 = adv_str_A(y[min][0], y[min][1], y[min – 1][0], y[min – 1][1]);

B1 = adv_str_B(y[min][0], y[min][1], y[min – 1][0], y[min – 1][1]);

 

A2 = adv_str_A(y[min][0], y[min][1], y[min + 1][0], y[min + 1][1]);

B2 = adv_str_B(y[min][0], y[min][1], y[min + 1][0], y[min + 1][1]);

//Находим координаты точки пересечения серединных перпендикуляров:

h[0] = pc_x(A1, B1, A2, B2);

h[1] = pc_y(A1, B1, A2, B2);

A1 = main_str_a(x[i][0], x[i][1], h[0], h[1]);

B1 = main_str_b(x[i][0], x[i][1], h[0], h[1]);

 

Am = main_str_a(y[min][0], y[min][1], y[min – 1][0], y[min – 1][1]);

Bm = main_str_b(y[min][0], y[min][1], y[min – 1][0], y[min – 1][1]);

 

pl[i][0] = pc_x(A1, B1, Am, Bm);

pl[i][1] = pc_y(A1, B1, Am, Bm);

 

 

}

}


ПРИЛОЖЕНИЕ 10

 

Фрагмент программы, реализующей вычисление ошибки аппроксимации. В программе – матрица координат объектов до проекции на кривую, – матрица координат объектов после проекции на кривую.

ms = 0;

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

{

ms = ms + pow(distance(x[i][0], x[i][1], xp[i][0], xp[i][1]), 2);

}

 

ms = sqrt(ms/n);


 

ПРИЛОЖЕНИЕ 10

Таблица 5 – Таблица расстояний между точками-банками и их проекциями на упругую кривую

Банк Ошибка Банк Ошибка
ЮниКредит Банк 0.439959 Транскредитбанк 0.00340444
Стройкредит 0.00166363 Национальный Резервный Банк 0.00350249
Инвестбанк 0.0271587 Мастер-Банк 0.228045
ЦентроКредит 0.143589 Открытие 3.64662
Балтийский Банк 0.0273692 НОМОС-Банк 17.9048
Международный Банк Санкт-Петербурга 0.043408 Транскапиталбанк 0.0120991
Хоум Кредит Банк 0.0134786 Интеза 0.0545
МДМ Банк 4.09829 Московский Банк Реконструкции и Развития 0.0662236
Россия 2.09163 Росбанк 7.73317
Газпромбанк 0.00226905 Уралсиб 3.32075
Банк «Санкт-Петербург» 2.20801 Русский Стандарт 7.41998
Сургутнефтегазбанк 0.0168937 Абсолют Банк 0.0262407
СКБ-Банк 0.193333 Союз 0.00910776
Московский Индустриальный Банк 0.233724 Российский Капитал 0.00562912
ВТБ 0.240644 Еврофинанс Моснарбанк 0.000127572
Собинбанк 0.00269618 Пробизнесбанк 0.00878509
Альфа-Банк 23.393 Металлинвестбанк 4.82141
Возрождение 0.336653 ИНГ Банк 6.4948
Восточный Экспресс Банк 4.18992 Новикомбанк 0.298897
Связь-Банк 1.24957 Ситибанк 1.65906
Сбербанк России 2.74793e-009 Бинбанк 0.267165
ВТБ 24 31.08 Ак Барс 1.00644
Креди Агриколь КИБ 0.0200102 Королевский Банк Шотландии 0.00228973
Петрокоммерц 0.401616 Международный Финансовый Клуб 0.144034
Русфинанс Банк 0.282059 Локо-Банк 0.000627948
Азиатско-Тихоокеанский Банк 0.000567646 Банк Москвы 0.142291
КИТ Финанс Инвестиционный Банк 0.297598 Инвестторгбанк 0.137117
Глобэкс 0.786102 ОТП Банк 0.626497
Ханты-Мансийский Банк 3.00422 Юниаструм Банк 0.299048
Московский Кредитный Банк 0.0651847 Москомприватбанк 0.252987
Пересвет 0.00243315 Авангард 0.00975399

 

Окончание Таблицы 5

Банк Ошибка
Нота-Банк 0.00178564
Фондсервисбанк 0.00408866
СБ Банк 0.116441
Нордеа Банк 0.056704
Татфондбанк 0.00541814
Росгосстрах Банк 0.0863704
Национальный Торговый Банк 0.00265727
РосЕвроБанк 0.0839355
Балтинвестбанк 0.00271115
ВестЛБ Восток 0.000565282
Промсвязьбанк 0.233533
Зенит 0.876238
Внешпромбанк 0.0260317
Национальный Банк «Траст» 1.51969
Всероссийский Банк Развития Регионов 0.0281866
Эйч-Эс-Би-Си Банк (HSBC) 0.0861402
Райффайзенбанк 6.90316
Национальный Расчетный Депозитарий 3.54272e-006
Кредит Европа Банк 0.363487
Дойче Банк 0.00381074
Коммерцбанк (Евразия) 0.0189537
Расчетная Палата РТС 0.00693457
ДельтаКредит 0.0976801
МСП Банк 0.0539799
Россельхозбанк 0.481257
Ренессанс Кредит 0.115324
СМП Банк 2.46277
БНП Париба Банк 1.75873e-005
Национальный Стандарт 0.119381
Национальный Клиринговый Центр 6.85193
   

 

 


<== предыдущая | следующая ==>
бір-біріне қызмет көрсетуді қамтамасыз етеді | Выпускная квалификационная работа

Date: 2015-11-14; view: 219; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.009 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию