2017-04-10 65 views
0

对不起,我是新来的MATLAB和想知道是否有人能帮助我,分配有更多的非单RHS尺寸大于非单标

我写的代码升技,

M= inital_conditions 
time_vals = start_time:delta_t:end_time; 
for iidx = 1 : length(time_vals) 
    i = time_vals(iidx); 

    new_conc = old_conc + delta_t*EQN(old_conc); 
    k(:,iidx)= new_conc; 
    old_conc=new_conc; 
end 

我不断收到错误赋值有更多非单实例rhs维度比非单实例下标。

我使用size(),并意识到k(:,iddx)是1 X 9,new_conc是1 x 8。任何人都可以提出一种方法来平衡双方?

感谢

EQN脚本

function output= EQN(M) 

M = [90 90 90 90 90 90 90 90 90 90 90 90 90 90 90]; 
k1=1; 
k2=1; 
k3=1; 
k4=1; 
k5=1; 
k6=1; 
k7=1; 
k8=1; 
k9=1; 
k10=1; 
k11=1; 
k12=1; 
k13=1; 
k14=1; 
%k15=1; 


output(1,1) = k14-k5*M(1)*M(2)-k4*M(1)*M(4)%-k1*M(5)*M(6))); 
output(2,1) = -k5*M(1)*M(2); 
output(3,1) = k5*M(1)*M(2); 
output(4,1) = k13*M(14)-k3*M(9)*M(4)-k3*M(9)*M(4); 
output(5,1) = k4*M(1)*M(4)- k1*M(5)*M(6); 
output(6,1) = k10-k1*M(5)*M(6); 
output(7,1) = k1*M(5)*M(6)-k2*M(7); 
output(8,1) = k2*M(7)-k14*M(8); 
output(9,1) = k11-k3*M(9)*M(4); 
output(10,1) = k3*M(9)*M(4); 
output(11,1) = 0; 
output(12,1) = k6*M(10)*M(11)-k7*M(12); 
output(13,1) = k7*M(12)-k12*M(13); 
output(14,1) = k12*M(13)-k13*M(14); 
output(15,1) = k12*M(13); 
+0

你需要让'k'为'8 x 9' – Suever

+0

根据你现在提供的代码,它看起来像'new_conc'应该有15个元素,不是?请确保在循环之前清除'k'('clear k'),以确保旧数据不会干扰 – Suever

+0

当我使用whos时,它声明new_conc是15 X 15,但我在其他问题上看到过,使用大小()和它的未来作为1 8 – code1

回答

0

看来,你的主要问题是,你有意想不到的automatic implicit expansion受害人,事中MATLAB R2016b增加。考虑下面的例子:

>> a = 1:10;  % Row vector, 1-by-10 
>> b = (1:10).'; % Column vector, 10-by-1 
>> c = a+b 

c = 

    2  3  4  5  6  7  8  9 10 11 
    3  4  5  6  7  8  9 10 11 12 
    4  5  6  7  8  9 10 11 12 13 
    5  6  7  8  9 10 11 12 13 14 
    6  7  8  9 10 11 12 13 14 15 
    7  8  9 10 11 12 13 14 15 16 
    8  9 10 11 12 13 14 15 16 17 
    9 10 11 12 13 14 15 16 17 18 
    10 11 12 13 14 15 16 17 18 19 
    11 12 13 14 15 16 17 18 19 20 

注意到结果ab逐元素和的10元素向量。当您的输入不同(但是compatible)大小时,MATLAB会自动复制所需的尺寸以便匹配。在以前的版本中,这只会引发错误,告诉您由于行向量和列向量的大小不同,无法添加行向量和列向量。

修复?确保您的输入为EQN(目前看起来是一个行向量,old_conc)与您的输出(它当前是列向量)的大小相同。将old_conc(1乘15矢量)添加到EQN(一个15乘1的矢量)的输出中,使得结果new_conc成为15乘15的矩阵。 如果你想避免隐式扩展,你必须非常小心地检查你的数组在新版本的MATLAB中是否有匹配的大小!

...您还有一个额外的问题,您使用的功能错误size。如果你想要一个变量的大小new_conc,它的size(new_conc)。如果输入size new_conc,您将获得命令行参数字符串“new_conc”的大小,该字符串是1乘8字符的数组。