ERROR came as "Index exceeds matrix dimensions".
3 次查看(过去 30 天)
显示 更早的评论
%% When I incorporate 3 eqns, ERROR came as "Index exceeds matrix dimensions".
%%Here I have initial condition f=[0 0 0 ], BC: gl=[coswt t t], gr =[0 0 0 ].
What next?
Here is my trial:
H=10;R=5;Pr=1;G1=5;G2=5;Kc=1;Sc=0.22;wt=pi/2;Q=H-(R/Pr);
xl=0; xr=5; % x domain [xl,xr]
J = 10; % J: number of division for x
dx = (xr-xl)/ J; % dx: mesh size
tf = 01; % final simulation time
Nt = 100; % Nt: number of time steps
dt = tf/Nt;
mu = dt/(dx)^2;
% Evaluate the initial conditions
x = xl : dx : xr; % generate the grid point
% f(1:J+1) since array index starts from 1
f1 = 0;f2 = 0;f3 = 0; %%%I.C
% store the solution at all grid points for all time steps
u = zeros(J+1,Nt);
v = zeros(J+1,Nt);
w = zeros(J+1,Nt);
U=[u; v; w];
% Find the approximate solution at each time step
for n = 1:Nt
t = n*dt; % current time
% boundary condition at left side
gl = [cos(wt); t; t];
% boundary condition at right side
gr = [0; 0; 0];
if n==1 % first time step
for j=2:J % interior nodes
u(j,n) = (1+dt*Q)*f1(j) + dt*(G1*f2(j)+G2*f3(j))+mu*(f1(j+1)-2*f1(j)+f1(j-1));
v(j,n) = (1+dt*Q)*f2(j) + (mu/Pr)*(f2(j+1)-2*f2(j)+f2(j-1));
w(j,n) = (1-dt*Kc)*f3(j) + (mu/Sc)*(f3(j+1)-2*f3(j)+f3(j-1));
U=[u(j,n) v(j,n) w(j,n)];
end
U(1,n) = gl; % the left-end point
U(J+1,n) = gr; % the right-end point
else
for j=2:J % interior nodes
u(j,n)= (1+dt*Q)*u(j,n-1)+ dt*(G1*v(j,n-1)+G2*w(j,n-1))+ mu*(u(j+1,n-1)-2*u(j,n-1)+u(j-1,n-1));
v(j,n)= (1+dt*Q)*v(j,n-1)+ (mu/Pr)*(v(j+1,n-1)-2*v(j,n-1)+v(j-1,n-1));
w(j,n)= (1+dt*Q)*w(j,n-1)+ (mu/Sc)*(w(j+1,n-1)-2*w(j,n-1)+w(j-1,n-1));
U=[u(j,n) v(j,n) w(j,n)];
end
U(1,n) = gl; % the left-end point
U(J+1,n) = gr; % the right-end point
end
end
% Plot the results
tt = dt : dt : Nt*dt;
figure(1)
plot(x,u)
hold on
1 个评论
madhan ravi
2019-8-18
编辑:madhan ravi
2019-8-18
Isn't this the same as your previous questions https://in.mathworks.com/matlabcentral/answers/476579-how-to-get-single-curve ?
回答(3 个)
Adam Danz
2019-8-18
编辑:Adam Danz
2019-8-18
f1 = 0; % 12th line of your code; so, f1 only has 1 element
% (later in your code...)
for j=2:J % interior nodes
u(j,n) = (1+dt*Q)*f1(j) + dt*(G1*f2(j)+G2*f3(j))+mu*(f1(j+1)-2*f1(j)+f1(j-1));
% ^^^^
When j = 2, you're trying to reference the 2nd element of f1 but f1 only has 1 element.
13 个评论
Adam Danz
2019-8-19
Often times when people are troubleshooting errors, they just try things that alleviate the error and lose sight of the bigger picture: what the algorithm is supposed to be doing and what each variable is supposed to represent. Changing a variable to avoid an error is much more simple than investing time into dissecting the code and understanding each line. Just because an error message no longer appears doesn't mean the algorithm is behaving as it should. That approach is actually dangerous because the lack of an error message can provide false security that the code "is correct".
I know it may be frustrating and it will be a large investment of time, but I suggest starting at the top of your code and understanding what each line does and what each variable represents. What shape and size should the variable take? Do the values in each variable look right? You're going to learn so much in that process and more importantly, you'll become independent in solving these types of errors.
Walter is the best and I've learned so much from him and others here but I've learned (and am still learning) the most by going through the troubleshooting process. Just my 2 cents.
Walter Roberson
2019-8-19
% boundary condition at left side
gl = [cos(wt); t; t];
What is that intended to designate?
Is the intention that the first row should be assigned the boundary condition cos(wt) (the first entry) and that the last row should be assigned the boundary condition t (the last entry), and that all other rows should be assigned the boundary condition t (the middle entry) ?
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!