error: Index exceeds matrix dimensions

4 Ansichten (letzte 30 Tage)
Elia
Elia am 27 Dez. 2013
Bearbeitet: Image Analyst am 28 Dez. 2013
i have created an eatable with two columns , a plot button and two buttons for editing the row's number(add/delete), the ColumnFormat is char .the first column contains the function's body (for example sin(t) ) , and the second column contains the time limit , that i want to plot the function between it (for example [10 50]).when i press the plot button , on the command window appears the following error : 'Index exceeds matrix dimensions.' where is the mistake in the code ?
here is the plot callback function
D=cell2mat(get(handles.table,'data'));
if size(D,1)==1 %number of rows
T1=str2num(D(1,2));
X1=str2func(['@(t)' D(1,1)]);
fplot(X1,T1,'Parent',handles.axes1);
else
for i=1:size(D,1)
Ti=str2num(D(i,2));
Xi=str2func(['@(t)' D(i,1)]);
fplot(Xi,Ti,'Parent',handles.axes1);
hold(handles.axes1, 'on')
end
end
hold(handles.axes1, 'off')
grid on
  7 Kommentare
Elia
Elia am 28 Dez. 2013
Bearbeitet: Elia am 28 Dez. 2013
What exactly do you mean with '' needs to pass the range as the vector [10:50] '' ?
Jan
Jan am 28 Dez. 2013
@Sam: Please do not post a question in multiple forums. If you have a really good reason to do so, add at least a link to the other forum. Otherwise the voluntary helpers might waste time with posting an answer, which has been given elsewhere already. Thanks.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Lennart
Lennart am 27 Dez. 2013
Try the squeeze() command, sometimes non functional extra dimensions are created which give these kinds of problems.

Image Analyst
Image Analyst am 28 Dez. 2013
Remove the fplot call from the "if size(D,1)==1" block and that will probably solve it. It probably doesn't like it when you're calling fplot with just one point. lims is probably a one element vector in that case, and when it hits lims(1:2) it barfs.
  3 Kommentare
Elia
Elia am 28 Dez. 2013
i didn't understand exactly what do you mean ,where should i place the plot ? can you please show me howe the code will look like ? i tried without if-else loop (just for loop )i became the same problem too.
best regards sam
Image Analyst
Image Analyst am 28 Dez. 2013
Bearbeitet: Image Analyst am 28 Dez. 2013
Xi and Ti are just single numbers, not arrays. You need to make them arrays, and then you don't need to have a special case for the first element:
D=cell2mat(get(handles.table,'data'));
for i=1:size(D,1)
T(i) = str2num(D(i,2));
X(i) = str2func(['@(t)' D(i,1)]);
end
fplot(Xi,Ti,'Parent',handles.axes1);
hold(handles.axes1, 'off')
grid on

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Graphics Objects finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by