Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2012, 14:26   #1
Linore
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 95
По умолчанию Метод "Гусеница": базовый алгоритм

Добрый день!
Может у кого-нибудь есть пример программы работы метода "Гусеница" написанный в MatLab ?
Linore вне форума Ответить с цитированием
Старый 03.04.2012, 17:06   #2
Linore
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 95
По умолчанию

Вот ссылка на сам алгоритм http://www.masters.donntu.edu.ua/200...rary/art09.htm
Вот мой m-file
function [sing_values,U,V] = ssa(x, L)

x = [1 2 3 2 1 2 3 2 1 2 3]';
%t = [1:length(x)]';
N=6; % последовательность N равноотстоющих значений некоторой функции f(t)
L=4; %длина гусеницы
K=N-L+1;% K must be >=1!
if K<1
errordlg('Wrong L. SSA is cancelled.', 'Error');
return
end

%form trajectory matrix

X=zeros(L,K);
for i=1:L
X(i,=x(i:i-1+K)';
end
%================================== ============
%Мой вставленный кусок программы===============
%V = (1/k)XTX============================== ====

W=(1/L)*X'*X;
%LA=eig(W);% вектор собственных значений матрицы W ортогональная матрица собственных векторов матрицы
%[R, D] = eig(W);%ычисляет диагональную матрицу D собственных значений и матрицу R правых собственных векторов

%Следующий шаг, как обычно в АГК, состоит в вычислении собственных чисел и
%собственных векторов матрицы V
%W=R*D*R';

%================================== ============
%Выполним её svd-разложение:C = V\Lambda V^T

% prepare to finite rank time series
M=min( rank(W), L );
%SVD
[U,S,V] = svd(W); % U_i is a column in U, {V_i} are the first L columns of V
%================================== ===============================
%Далее рассмотрим систему главных компонен
GO=V*X';
%================================== ===============================
%extract sing.values and cut them to the rank if rank<L,
%it's necessary for finite rank time series
sing_values=diag(S);
if M<L %if rank(ts)<L
sing_values=sing_values(1:M);
end

%cut eigen vectors to the rank if rank<L
if M<L %if rank(ts)<L
U=U(:,1:M);
end

%extract factor vectors
V=V(:,1:M);

x1 = ssa(x, L);

%[sing_values,U,V] = ssa (t, L);
%t = [t; t(end)+((t(2)-t(1))*[1:N]')];
%x = [x; NaN*ones(N,1)];
%plot(t',x, 'b-');
%plot(t',ssa(t, L), 'r-');

Но ом мне выдает ошибку Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit. Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.
Linore вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Ошибка:является "поле" но используется как "метод" hitman47IT Помощь студентам 0 22.11.2011 20:55
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04