How can i define this in matlab

1 visualización (últimos 30 días)
Folakemi Omotoye
Folakemi Omotoye el 6 de Ag. de 2018
Comentada: Dennis el 7 de Ag. de 2018
I want to define this function {s(-1)} in matlab. it is giving me error message. array index must be positive integers or logical value. i have search through mathworks answers on how to rewrite this but i did not get an answer peculiar to this kind of situation.
  7 comentarios
Jan
Jan el 6 de Ag. de 2018
@Folakemi Omotoye: This is not Matlab code. Therefore we cannot know, what it is intended to do. "s(-1)=j(-1)==0" is not meaningful in Matlab. "for t=0" is not a loop, but the same as "t=0". "s(t)=sum(t-1)+sum(t)" is not meaningful, because sum is not defined here and because t is 0, you cannot use it as index. "[]=t(j>10)" is not clear also.
Please explain, what you want to achieve. Posting pseudo-code in an unknown notation does not clarify anything.
Folakemi Omotoye
Folakemi Omotoye el 7 de Ag. de 2018
this is the whole algorithm
m=zeros(10,10,30); %define 3-D 10 by 10 by 30 matrix
n=30; %number of matrix
for k=1:n
T=linspace(0,1.0,n); %specify the value an element will take in each iteration
m(3,3,k) = T(k); %the 3rd row and 3rd column in each matrix will have the value of t
% disp(m(:,:,k));
vector=sum(sum(m)); %sum all the colums of the vector into a row
end
[v]=vector(:,:); %convert the vector into 1D vector
t=logical(T);
%CUSUM Algorithm
h=4; %threshold
s(-1) = 0;
g(-1)=0 ; %initial conditions
for t=0 %start time
s(t)=sum(v(t-1) + sum(v(t))); %cumulative sum up to current value
g(t)=max(g(t-1) + s(t)); %current value minus minimum value in vector up to current value
if g(t) > h %if output is greater than the specified threshold
detect_tim=t; %store the detection time
disp(['The detection time: (', num2str(detect_tim),')']); %display the detection time
change_time=(t(min(s(t))) + 1); %estimate the change time
disp(['The change time estimate: (', num2str(change_time),')']) %display value of change
% stop and reset algorithm
return %to re-start algorithm
end
t=t+1;
xL = get(gca,'XLim'); %plot threshold line on same axis
figure(1), subplot(2,1,1)
line(xL,[0.6 0.6],'Color','r'); %horizontal line through the threshold value
hold on
plot(1:t,v(1:t),'*b') %the time vector plot
title('signal change plot')
xlabel('time (ms)')
ylabel('Amplitude (v)')
end

Iniciar sesión para comentar.

Respuestas (1)

Image Analyst
Image Analyst el 6 de Ag. de 2018
  18 comentarios
Folakemi Omotoye
Folakemi Omotoye el 7 de Ag. de 2018
t=logical(T) %to convert T of class double to logical
s(t)=sum(v(t-1) + sum(v(t))); %if (t-1) was execuatble, it would have been the current sum plus cumulative sum of last iteration
g(t)=max(g(t) + s(t)); %same explanation as above.the max value of past iterations of g(t) till current iteration
if g(t) > h
detect_tim=t; %it will only write when g(t) is greater than h, else it restarts iteration from beginning
disp(['The detection time: (', num2str(detect_tim),')'])
change_time=(t(min(s(t))) + 1); %it should be the time following the time at which g(t) was greater than h
disp(['The change time estimate: (', num2str(change_time),')'])
return % it should re-start the algorithm from the beginning rather than continuing with the next iteration
end
t=t+1; %noted
Dennis
Dennis el 7 de Ag. de 2018
s(t)=sum(v(t-1) + sum(v(t))); %if (t-1) was execuatble, it would have been the current sum plus cumulative sum of last iteration
No.
If v=[1 2 3 4] was your vector s(4) would be sum(v(3)) + sum(v(4)) which is the same as v(3) + v(4) -> 7
The cummulative sum would be v(1)+v(2)+v(3)+v(4) =1+2+3+4=10, but thats no what your code is calculating.
This works if you write
s(t)=s(t)-1+v(t) %s(t-1) !!!!!
And again sum(v(t)) is the same as v(t).

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by