2015-07-10 117 views
0

我將數據集保存爲.mat,並且我正在嘗試解決非線性方程組的系統變量Ga和Ta。我使用fsolve來解決它與相關的代碼的部分是:錯誤與賦值A(I)= B,B和I中的元素數必須相同

function F = msabase(x) 
load ('matlab.mat'); 
Ta = x(1); 
Ga = x(2); 
util_a = exp(lamda.*(alpha_a - cost - w.*log(Ga))); 
util_t = exp(lamda.*(- 2.5 - w.*log(2*0.80))); 
F(1) = Ga - c0.*(1.+c1.*(Ta./cap).^c2).*d; 
F(2) = Ta - sum.*(util_a/(util_a+util_t)); 

數據的各行設置即LAMDA,alpha_a,成本等而被賦予了所有其他變量的值。在給出的代碼第7行中,我收到錯誤「在賦值A(I)= B中,B中的元素數和 我必須是相同的」 我不能理解爲什麼,因爲它應該是一個按元素操作的元素。

回答

0

由於您試圖將矢量/矩陣的元素分配給F中的單個插槽,您會看到該錯誤。由於您試圖將多個值映射到F中的單個空間,因此存在維度不匹配,這就是最終導致錯誤發生的原因。

我的一個建議是使用單元陣列或創建一個存儲您的值的2D矩陣。如果你喜歡單元陣列的方法,每個單元存儲所期望的計算,如下所示:

F = cell(2,1); 

F{1} = Ga - c0.*(1.+c1.*(Ta./cap).^c2).*d; 
F{2} = Ta - sum.*(util_a/(util_a+util_t)); 

然後訪問正確時隙中,執行任一F{1}F{2}

F = [Ga - c0.*(1.+c1.*(Ta./cap).^c2).*d; Ta - sum.*(util_a/(util_a+util_t))]; 

這是假設每一個結果是一個行向量,因此這將產生一個二維矩陣,其中每個:如果你想在2D矩陣的方法,你可以這樣做串連兩種計算爲一個矩陣行是期望的結果。我不確定每個計算的尺寸是多少,爲了使事情保持一致,我將確保兩行代碼都是行向量:

F1 = Ga - c0.*(1.+c1.*(Ta./cap).^c2).*d; 
F2 = Ta - sum.*(util_a/(util_a+util_t)); 
F = [F1(:).'; F2(:).']; 
+0

是的,您的假設是正確的,即每個結果都是單行vector.is有任何可用的鏈接,可以幫助我知道更多關於如何構建類似於你所顯示的數組的內容 –

+0

@sayandesarkar - 當然。在MathWorks中有詳細記錄:http://www.mathworks.com/help/matlab/math/creating-and-concatenating-matrices.html – rayryeng

0

嘗試在分配之前預先分配F。如果你知道F是2×1向量,插入F = zeros(2,1) 7行前地方如果你一無所知的F尺寸,初始化它作爲一個空矩陣和追加到它:

F = [] 
F = [F; (Ga - c0.*(1.+c1.*(Ta./cap).^c2).*d)]; 
F = [F; (Ta - sum.*(util_a/(util_a+util_t)))]; 

當心MATLAB在追加矢量/矩陣方面效率不高,因此如果可能的話預先分配。