- they look ugly on one line.
- having them on one line has made your debugging more complicated because the error message only gives the line and you have two allocations on one line: it is clearer with one allocation per line:
i have a code pasted below but each time i try to run it, i do get erro message in line 23 which i can not figure out.I always get this error message:Index exceeds matrix dimensions. Error in plotter_analysis (line 23) d_tm=diff(t_m); dtm=d_
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
[s]=size(r1);
% find(s==1)
if strcmp(sens_arg,'US')
US_analyzer
end
if strcmp(sens_arg,'nsensor')
tt_length=length(t_m);
nlength=length(n5_vec);
llength=length(lambda);
for icount=1:tt_length
imagesc(squeeze(r1(icount,:,:))');
getframe(gcf)
% pause(0.5)
end
end
%%Assume MIP sensor is being analyzes
if strcmp(sens_arg,'MIP')
if length(t_m)>0
d_tm=diff(t_m); dtm=d_tm(1);
else
dtm=1;
end
tt_length=length(t_t);
nlength=length(n5_vec);
llength=length(lambda);
for icount=1:tt_length
aaa=squeeze(r1(icount,:,:));
maxer(icount)=max(max(aaa));
max_sen(icount)=max(max(abs(diff(aaa,1,1))));
end
maxing=max(maxer);
maxings=max(max_sen);
for icount=1:tt_length
close all
if length(t_t)>1
figure(1)
subplot(2,1,1)
imagesc([t_m(1) t_m(length(t_m))],...
[lambda(1) lambda(length(lambda))],...
squeeze(r1(icount,:,:))./maxing);
title(['Dönüþtürücü çýktýsý t_t=', num2str(t_t(icount)),' nm'])
ylabel('\lambda [nm]');
xlabel('MDP kalýnlýðý [nm]')
caxis([0 1])
colorbar
subplot(2,1,2)
imagesc([t_m(1) t_m(length(t_m))],...
[lambda(1) lambda(length(lambda))],...
abs(diff(squeeze(r1(icount,:,:)),1,1))./dtm);
title(['Dönüþtürücü duyarlýlýðý t_t=', num2str(t_t(icount)),' nm'])
ylabel('\lambda [nm]');
xlabel('MDP kalýnlýðý [nm]')
caxis([0 maxings./dtm])
colorbar
else
figure(1)
imagesc([lambda(1) lambda(length(lambda))],...
[t_m(1) t_m(length(t_m))],...
squeeze(r1)./maxing);
title(['Farklý MDP kalýnlýklarýnda yansýma katsayýlarý'])
xlabel('\lambda [nm]');
ylabel('MDP kalýnlýðý [nm]')
caxis([0 1])
colormap('hot')
colorbar
figure(2)
imagesc([lambda(1) lambda(length(lambda))],...
[t_m(1) t_m(length(t_m))],...
abs(diff(squeeze(r1),1,1))./dtm);
title(['Dönüþtürücü duyarlýlýðý'])
xlabel('\lambda [nm]');
ylabel('MDP kalýnlýðý [nm]')
colormap('hot')
caxis([0 maxings])
colorbar
end
getframe(gcf)
pause(0.5)
end
end
0 commentaires
Réponse acceptée
Stephen23
le 17 Fév 2016
Modifié(e) : Stephen23
le 17 Fév 2016
Solution
Change line 22:
length(t_m)>0
to this:
length(t_m)>1
I would also recommend that you use numel instead of length:
numel(t_m)>1
You should also put the following two allocations on two lines, because
d_tm = diff(t_m);
dtm = d_tm(1);
Explanation
When t_m is scalar (i.e. has one element), then diff(t_m) is empty. Then you try to access the first element of an empty vector: d_tm(1) Bingo, error!
Note that you could have easily found this yourself by using MATLAB's debugging tools. They are really very useful because you can solve problems like this one very quickly.
5 commentaires
Stephen23
le 17 Fév 2016
Modifié(e) : Stephen23
le 17 Fév 2016
An internet search engine solved this in two seconds: you are trying to allocate an empty array to a scalar location. Basically you are doing this:
max_sen(icount) = []
which is always going to be an error (for a scalar icount). Why is the RHS empty? Lets go backwards:
- The output of diff must have zero size along the requested dimension.
- therefore the input argument on that dimension must have size one (e.g. could be scalar).
- in other words aaa must have size 1x....
- we confirm this because the preceding line does not cause an error: maxer(icount)=max(max(aaa));, and theiy differ in the size along that dimension.
It is clear that whoever wrote it:
- did not test their code as they wrote it,
- did not consider the sizes of matrices,
- did not consider edge cases.
Many beginners write large quantities of code without testing as they are writing, and then are clueless how to fix the multiple problems when they try to run it. Avoid doing this by always considering those three points above. Code that works is better than lots of code.
Oh, and learn to use the debugging tools, there are tutorials online.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Operating on Diagonal Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!