2017-04-10 30 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字符的數組。