Issue with Matrix Dimensions

6 次查看(过去 30 天)
Hello All,
I am trying to run this code for some calculation but I seem be getting an disnion mismatch error. I have tried revisiting this code again and aagain but not able to find what I am missing. I am coming to the community to understand what is that I am missing Appreciate your help.
M=44;
N=11;
N1=6;
h=0.1;
Re=100;
for i=1:M
for j=1:N
u(i,j)=0;
v(i,j)=0;
si(i,j)=0;
om(i,j)=0;
end
end
for j=1:N1
y=(j-1)*h;
u(1,j)=-1.5+6*y*y;
si(1,j)=-0.5-1.5*y+2*y*y*y;
om(1,j)=-12*y;
end
for j=N1+1:N
y=(j-1)*h;
u(1,j)=-18*y*y+12*y-1.5;
si(1,j)=-6*y*y*y+6*y*y-1.5*y-0.5;
om(1,j)=36*y-12;
end
for i=(2:M-1)
si(i,N)=-0.5;
end
for j=(1:N)
y=(j-1)*h;
si(M,j)=-0.25+y*y*y-0.75*y;
u(M,j)=-0.75+3*y*y;
om(M,j)=-6*y;
end
for ite=(1:500)
for i=(2:M-1)
om(i,1)=-u(i:2)/h;
om(i,N)=u(i:N-1)/h;
end
for i=(2:M-1)
for j=(2:N-1)
si(i,j)=(si(i-1,j)+si(i+1,j)+si(i,j-1)+si(i,j+1)+om(i,j)*h*h)/4;
end
end
for i=(2:M-1)
for j=(2:N-1)
omx=(om(i+1,j)-om(i-1,j))/(2*h); %this line seems to be having an issue.
omy=(om(i,j+1)-om(i,j-1))/(2*h);
con=u(i,j)*omx+v(i,j)*omy;
om(i,j)=(((om(i-1,j)+om(i+1,j)+om(i,j-1)+om(i,j+1))-Re*con*h*h)/4);
end
end
end
for i=(1:M)
for j=(1:N)
u1(i,j)=1.5-6*y*y+u(i,j);
v1(i,j)=v(i,j);
end
end

采纳的回答

William Rose
William Rose 2022-2-6
The error occurs at lines
for ite=(1:500)
for i=(2:M-1)
om(i,1)=-u(i:2)/h; %error here
om(i,N)=u(i:N-1)/h; %error here
end
...
end
Change the lines to
om(i,1)=-u(i,2)/h;
om(i,N)=u(i,N-1)/h; % changed colon to comma
That works. Is it doing what you want? I don't know. But there is not an error now.

更多回答(1 个)

Voss
Voss 2022-2-6
The error I run into first is on this line:
om(i,N)=u(i:N-1)/h;
When i == 2, you have
om(2,11) = u(2:10)/0.1;
Just like the error message says, the left-hand side is a single scalar element and the right-hand side is a 1-by-9 vector. How to resolve that depends on what your intent is there, which I don't know.
Note that if that problem were resolved, then you'll have the same type of error on the next iteration with the previous line:
om(i,1)=-u(i:2)/h;
When i == 3, this is
om(3,1)=-u(3:2)/h;
because u(3:2) is empty and om(3,1) is a scalar.
Are these colon operations really supposed to be comma-separated lists (i.e., row/column indexing operations)? That is, u(i,N-1) and u(i,2)? Let me see if that runs:
M=44;
N=11;
N1=6;
h=0.1;
Re=100;
for i=1:M
for j=1:N
u(i,j)=0;
v(i,j)=0;
si(i,j)=0;
om(i,j)=0;
end
end
for j=1:N1
y=(j-1)*h;
u(1,j)=-1.5+6*y*y;
si(1,j)=-0.5-1.5*y+2*y*y*y;
om(1,j)=-12*y;
end
for j=N1+1:N
y=(j-1)*h;
u(1,j)=-18*y*y+12*y-1.5;
si(1,j)=-6*y*y*y+6*y*y-1.5*y-0.5;
om(1,j)=36*y-12;
end
for i=(2:M-1)
si(i,N)=-0.5;
end
for j=(1:N)
y=(j-1)*h;
si(M,j)=-0.25+y*y*y-0.75*y;
u(M,j)=-0.75+3*y*y;
om(M,j)=-6*y;
end
for ite=(1:500)
for i=(2:M-1)
om(i,1)=-u(i,2)/h;
om(i,N)=u(i,N-1)/h;
end
for i=(2:M-1)
for j=(2:N-1)
si(i,j)=(si(i-1,j)+si(i+1,j)+si(i,j-1)+si(i,j+1)+om(i,j)*h*h)/4;
end
end
for i=(2:M-1)
for j=(2:N-1)
omx=(om(i+1,j)-om(i-1,j))/(2*h); %this line seems to be having an issue.
omy=(om(i,j+1)-om(i,j-1))/(2*h);
con=u(i,j)*omx+v(i,j)*omy;
om(i,j)=(((om(i-1,j)+om(i+1,j)+om(i,j-1)+om(i,j+1))-Re*con*h*h)/4);
end
end
end
for i=(1:M)
for j=(1:N)
u1(i,j)=1.5-6*y*y+u(i,j);
v1(i,j)=v(i,j);
end
end
Runs without error.

类别

Help CenterFile Exchange 中查找有关 MATLAB Report Generator 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by