How can I fix the error "Index exceeds matrix dimension"

4 visualizzazioni (ultimi 30 giorni)
In my FEM program, I want to build a matrix bcdof[1;2;7;8;67;68;69;70;71;72] from matrix bcdof1=[1;4;34;35;36] but the program say that "Index exceeds matrix dimension". Can anyone help me, here is my code:
bcdof1=[1;4;34;35;36];
bcdof=zeros(1,2*length(bcdof1));
for i=1:length(bcdof1)
bcdof(1,(2*i-1))=2*bcdof1(1,i)-1;
bcdof(1,(2*i))=2*bcdof1(1,i);
end
  2 Commenti
Ductho Le
Ductho Le il 22 Ott 2018
the calculation was in my code, each element in matrix bcdof have a corresponding value in the right hand side.

Accedi per commentare.

Risposta accettata

Dennis
Dennis il 22 Ott 2018
Modificato: Dennis il 22 Ott 2018
bcdof1 is a column vector you need to index bcdof1(i,1) instead of bcdof(1,i)
bcdof1=[1;4;34;35;36];
bcdof=zeros(1,2*length(bcdof1));
for i=1:length(bcdof1)
bcdof(1,(2*i-1))=2*bcdof1(i,1)-1;
bcdof(1,(2*i))=2*bcdof1(i,1);
end

Più risposte (1)

KALYAN ACHARJYA
KALYAN ACHARJYA il 22 Ott 2018
Modificato: KALYAN ACHARJYA il 22 Ott 2018
bcdof1=[1;4;34;35;36];
bcdof=zeros(1,2*length(bcdof1));
for i=1:1 %length(bcdof1)
bcdof(1,2*i-1)=2*bcdof1(1,i)-1;
bcdof(1,2*i)=2*bcdof1(1,i);
end
Your matrix is size 5x1, there is a single column. What you are doing a here using "for loop" from 1 to 5.
when i=1, it is ok, but when i=1, in your following expression
bcdof(1,2*i-1)=2*bcdof1(1,i)-1;
becomes
bcdof(1,3)=2*bcdof1(1,2)-1;
That means bcdof(1,3) and bcdof1(1,2) data is not available in matrix.
As your following data having only
bcdof1=[1;4;34;35;36];
That means
bcdof1(1,1)=1;
bcdof1(2,1)=4;
bcdof1(3,1)=34;
Please note the differences
bcdof1=[1;4;34;35;36]
bcdof1 =
1
4
34
35
36
>> bcdof1=[1,4,34,35,36]
bcdof1 =
1 4 34 35 36
  3 Commenti
Ductho Le
Ductho Le il 22 Ott 2018
Modificato: Ductho Le il 22 Ott 2018
thank you..i have seen that problem.
KALYAN ACHARJYA
KALYAN ACHARJYA il 22 Ott 2018
Modificato: KALYAN ACHARJYA il 22 Ott 2018
Third way to avoid the error is- % Index position change from bcdof1(1,i) to bcdof1(i,1)
bcdof1=[1;4;34;35;36];
bcdof=zeros(1,2*length(bcdof1));
for i=1:1%length(bcdof1)
bcdof(1,2*i-1)=2*bcdof1(i,1)-1;
bcdof(1,2*i)=2*bcdof1(i,1);
end

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by