0
下面我提供基本设置我的问题了参数:无法调试Matlab的循环“下标分配不匹配”的错误
%% Parameters
L = 5; % size of domain
T = 5; % measurement time
dx = 1e-2; % position step
dt = 1e-3; % time step
x0 = 0;
%% More Parameters
t = 0:dt:T; % time vector
x = (0:dx:L)'; % position vector
nt = length(t);
nx = length(x);
mu = dt/dx;
eta = dx/dx;
Lx = (1/dx^2)*spdiags(ones(nx,1)*[1 -2 1],-1:1,nx,nx); % discrete Laplace operator
B = spdiags(ones(nt,1)*[-eta 1+eta 0],0:1,nt-1,nt);
phi = @(x) (x>0).*exp(-1./x.^2);
R = @(x) phi(x).*phi(1-x);
r = R(x-2);
%% Get Data
u = zeros(nx,nt); % preallocate memory
% initial conditions
u(:,1) = sinc((x-x0)/dx);
u(:,2) = sinc((x-x0)/dx);
for k = 2:nt-1
u(:,k+1) = 2*u(:,k) - u(:,k-1) + dt^2*Lx*u(:,k) - dt^2*r.*u(:,k);
end
data = u(x==x0,:);
好了,现在我们有我们所需要的,我可以描述我的问题。在下面我试图计算一个循环,这将得到我们v
,一个5000x501矩阵,可以在内存中的预分配中看到。但是,问题是,当我运行下面的循环时,我立即得到'下标赋值不匹配'错误。
%% Solve
v = zeros(nx,nt-1); % preallocate memory
v(1,:) = 2*gradient(data); % initial condition
for l = 1:nx
v(l+1,:) = B*v(l,:);
end
我已经计算size(v) = 501 5000
,size(B) = 5000 50001
,size(v(l,:)) = size(v(1,:)) = 1 5000
,因此,由于nx = 500
,就应该所有的工作;但由于某种原因,它没有。
'B * v(l,:)'会给你一个'Inner matrix dimensions must agree'错误。 “下标分配不匹配”错误发生在哪条线上? – gnovice
@gnovice错误发生在我们有'v(l + 1,:) = B * v(l,:);' –
@flawr的行那里,'B'有501行和5000列,因此执行循环为'l = 1:nx'应该产生一个RHS,自从'nx = 501'后也有501行。 –