如何解决Scilab参数拟合时的‘submatrix incorrectly defined’错误?
解决Scilab中"submatrix incorrectly defined"错误(ODE参数拟合场景)
你碰到的这个错误,核心原因很明确:Scilab不允许直接给一个还未初始化的矩阵的列赋值。你现在的代码里先写了y_exp(:,1),但此时y_exp还不存在,Scilab不知道它的维度(行数、列数),所以会抛出"submatrix incorrectly defined"的报错。而模板里的原数据应该是用了直接创建完整矩阵的方式,所以没这个问题。
下面给你两种简单的解决方法:
方法一:先初始化矩阵,再赋值列
先创建一个和你的实验数据维度匹配的空矩阵(这里是9行2列,因为t有9个时间点,每个点对应2个实验值),再给每一列赋值:
// 先创建9行2列的空矩阵 y_exp = zeros(9, 2); // 给第一列赋值 y_exp(:,1) = [0.135,0.0924,0.067,0.0527,0.0363,0.02445,0.01668,0.012,0.009]'; // 给第二列赋值 y_exp(:,2) = [0,0.00918,0.0132,0.01835,0.0261,0.03215,0.0366,0.0393,0.0401]';
方法二:直接一次性创建完整矩阵(更简洁)
把两列实验数据直接组合成矩阵,一步到位,省去初始化步骤:
y_exp = [0.135, 0; 0.0924, 0.00918; 0.067, 0.0132; 0.0527, 0.01835; 0.0363, 0.0261; 0.02445, 0.03215; 0.01668, 0.0366; 0.012, 0.0393; 0.009, 0.0401];
或者用行向量转置的方式组合:
col1 = [0.135,0.0924,0.067,0.0527,0.0363,0.02445,0.01668,0.012,0.009]'; col2 = [0,0.00918,0.0132,0.01835,0.0261,0.03215,0.0366,0.0393,0.0401]'; y_exp = [col1, col2];
另外再提醒你一句:确保t的长度和y_exp的行数完全一致(你现在的t有9个元素,实验数据也是9组,这部分是对的),不然后续ODE求解和最小二乘拟合也会出现维度不匹配的问题。
内容的提问来源于stack exchange,提问作者Leovm
相关产品推荐
相关产品推荐

