Matlab';矩阵尺寸必须一致';ode23s

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

下面是我的代码。我尝试使用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(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(:));