我的教授的 RA 工作快要完成了;但是,我有一个编程问题困扰着我。我的教授要求我做的最后一步是我需要运行我为矩阵编写的所有函数。将会发生的是,对于该矩阵的每一列,我将调用我编写的函数,例如,它看起来像这样:
function [xpeaks, xtroughs]=peaktrough(x,cutoff)
% This function is a modified version of the algorithm used to identify
% peaks and troughs in a series of prices. This will be used to identify
% the head and shoulders algorithm. The function gives you two vectors:
% PEAKS - an indicator vector that identifies the peaks in the function,
% and TROUGHS - an indicator vector that identifies the troughs of the
% function, and a MATRIX - ptdata, which is a matrix of the location and
% the value of the peak/trough.
% The input is the vector of exchange rate series, and the cutoff
% used for the selection of the final peaks and troughs.
% Finding all possible peaks and troughs of our vector.
[posspeak,possploc]=findpeaks(x);
[posstrough,posstloc]=findpeaks(-x);
posspeak=posspeak';
posstrough=posstrough';
% Initialize vector of peaks and troughs.
numobs=length(x);
prelimpeaks=zeros(numobs,1);
prelimtroughs=zeros(numobs,1);
numpeaks=numel(possploc);
numtroughs=numel(posstloc);
% Indicator for possible peaks and troughs.
for i=1:numobs
for j=1:numpeaks
if i==possploc(j);
prelimpeaks(i)=1;
end
end
end
for i=1:numobs
for j=1:numtroughs
if i==posstloc(j);
prelimtroughs(i)=1;
end
end
end
% Vector that gives location.
location=1:1:numobs;
location=location';
% From the list of possible peaks and troughs, find the peaks and troughs
% that fit Chang and Osler [1999] definition.
% "A peak is a local minimum at least x percent higher than the preceding
% trough, and a trough is a local minimum at least x percent lower than the
% preceding peak." [Chang and Osler, p.640]
peakcutoff=1.0+cutoff; % cutoff for peaks
troughcutoff=1.0-cutoff; % cutoff for troughs
% First peak and first trough are initialized as previous peaks/troughs.
prevpeakloc=possploc(1);
prevtroughloc=posstloc(1);
% Initialize vectors of final peaks and troughs.
vectpeak=zeros(numobs,1);
vecttrough=zeros(numobs,1);
% We first check whether we start looking for peaks and troughs.
for i=1:numobs
if prelimpeaks(i)==1;
if i>prevtroughloc;
ratio=x(i)/x(prevtroughloc);
if ratio>peakcutoff;
vectpeak(i)=1;
prevpeakloc=location(i);
else vectpeak(i)=0;
end
end
elseif prelimtroughs(i)==1;
if i>prevpeakloc;
ratio=x(i)/x(prevpeakloc);
if ratio<troughcutoff;
vecttrough(i)=1;
prevtroughloc=location(i);
else vecttrough(i)=0;
end
end
else
vectpeak(i)=0;
vecttrough(i)=0;
end
end
% Now from the final peaks and troughs, we now write the matrix of the
% peaks and troughs of the exchange rate series.
xpeaks=find(vectpeak);
xtroughs=find(vecttrough);
end
然而,现在的问题是,对于不同的列,我最终会得到不同大小的向量。我想知道的是,我该怎么做?我有 20 个用户创建的函数,对于每个函数,我需要运行 5000 x 10000 矩阵中的每一列。
我的一个朋友建议我编写一个函数来获取矩阵的第 n 列,然后将其作为向量返回,然后针对该结果向量运行矩阵的每个函数。还有其他想法吗?其实,老实说,我不知道怎么写他建议的那个函数。谢谢!