Matlab';矩阵尺寸必须一致';ode23s
下面是我的代码。我尝试使用ode23s在Matlab中建模PFR。它适用于单组分不可逆反应。但当扩展更多的因变量时,“矩阵维数必须一致”问题就显现出来了。我不知道怎么修理它。是否可以使用其他软件来解决类似问题? 多谢各位Matlab';矩阵尺寸必须一致';ode23s,matlab,ode,Matlab,Ode,下面是我的代码。我尝试使用ode23s在Matlab中建模PFR。它适用于单组分不可逆反应。但当扩展更多的因变量时,“矩阵维数必须一致”问题就显现出来了。我不知道怎么修理它。是否可以使用其他软件来解决类似问题? 多谢各位 function PFR_MA_length clear all; clc; close all; function dCdt = df(t,C) dCdt = zeros(N,2); dCddt = [0; -vo*diff
function PFR_MA_length
clear all; clc; close all;
function dCdt = df(t,C)
dCdt = zeros(N,2);
dCddt = [0; -vo*diff(C(:,1))./diff(V)-(-kM*C(2:end,1).*C(2:end,2)-kS*C(2:end,1))];
dCmdt = [0; -vo*diff(C(:,2))./diff(V)-(-kM*C(2:end,1).*C(2:end,2))];
dCdt(:,1) = dCddt;
dCdt(:,2) = dCmdt;
end
kM = 1;
kS = 0.5; % assumptions of the rate constants
C0 = [2, 2]; % assumptions of the entering concentration
vo = 2; % volumetric flow rate
volume = 20; % total volume of reactor, spacetime = 10
N = 100; % number of points to discretize the reactor volume on
init = zeros(N,2); % Concentration in reactor at t = 0
init(1,:) = C0; % concentration at entrance
V = linspace(0,volume,N)'; % discretized volume elements, in column form
tspan = [0 20];
[t,C] = ode23s(@(t,C) df(t,C),tspan,init);
end
“”“您可以在计算
dCddt
的行上放置一个断点,并观察矩阵C
和V
的大小不同
>> size(C)
ans =
200 1
>> size(V)
ans =
100 1
在这两个变量之间执行按元素划分的操作,/
,将导致您提到的错误
根据
ode23s
的帮助,调用dCdt=df(t,C)
的输出需要是一个向量。但是,返回的矩阵大小为100x2。在对同一函数的下一次调用中,ode32s
在计算C
的值时将其转换为向量,因此大小为200x1。在对Matlab行为的GNU octave
解释中,必须明确确保解算器只看到平坦的一维状态向量。在模型的应用过程中,必须前后转换这些参数
将对象A
显式读取为平面阵列A(:)
会忘记矩阵维度信息,可以使用重塑(A,m,n)
命令将这些信息添加回去
function dCdt = df(t,C)
C = reshape(C,N,2);
...
dCdt = dCdt(:);
end
...
[t,C] = ode45(@(t,C) df(t,C), tspan, init(:));