Problem with the find function

조회 수: 12 (최근 30일)
Lil
Lil 2014년 4월 6일
답변: maxime bernard 2014년 4월 7일
Hi all,
I have a problem with my code and can't find what's wrong with it. Can someone help me?:(
I'm trying to sum the energy between two indexes,which is the interval of 10s.I use the find function but I get a message error:
??? Improper assignment with rectangular empty matrix.
Error in ==> testtaux2 at 29
klow(i)=find (temps >=t2(i),1,'first');
and here is my code:
clear all
close all
data2=load('SML64_long_AE_correct.txt');
data=load('trx9_SML64d_mod3.txt');
%data3=load('count.txt');
%t=data(:,1);
%def=data(:,12);
Q=data(:,11);
Ener=data2(:,14);
temps=data2(:,4);
def=data2(:,7);
defm=data(:,16);
amplitude=data2(:,12);
count=data2(:,9);
cumul_ener=data2(:,17);
dt=10;
k=0;
n=0;
for i=1:length(temps)-dt
t2(i)=temps(1)+n*dt;
t1(i)=t2(i)+dt;
n=n+1;
klow(i)=find (temps >=t2(i),1,'first');
kup(i)=find(temps >t1(i)+2*dt,1,'first');
dE(i)=sum(Ener((klow(i)):kup(i)));
t(i)=temps(klow(i))+temps(kup(i))/2;
k=k+1;
taux(k)=dE(i)/dt;
tt(k)=t(i);
end
%file = fopen('tauxfixe.txt','w');
% fprintf(file,' %f %f\n',taux(k),tt(k));
% fclose(file);
figure
plot(tt,taux)
hold on
Does anyone know what is wrong with my code?
Thank you very much for your help and sorry for my bad English !

답변 (3개)

per isakson
per isakson 2014년 4월 6일
Here are some links on debugging in Matlab

Roger Stafford
Roger Stafford 2014년 4월 6일
I would guess offhand that when the 'find' function happens to come up empty at
klow(i)=find (temps >=t2(i),1,'first');
then matlab complains about trying to insert an empty array into a single space. If so, you will have to make some special provision for the empty case.

maxime bernard
maxime bernard 2014년 4월 7일
Thank you for your answer. I have tried to change it by replacing the "n" with "kk" index but I still get this messqge error.Do you know whatI can I do it? I have tried so many things and I always this problem.
dt=10;
k=0;
kk=1;
for i=1:length(temps)-dt
t1(i)=temps(kk);
t2(i)=t1(i)+dt;
klow(i)=find (temps >=t1(i),1,'first');
kup(i)=find(temps >t1(i) +dt,1,'first');
dE(i)=sum(Ener((klow(i)):kup(i)));
t(i)=temps(klow(i))+temps(kup(i))/2;
kk=kup(i);
k=k+1;
taux(k)=dE(i)/dt;
tt(k)=t(i);
end

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by