2015-10-14 24 views
1

我正試圖求解一個由10個線性方程組成的系統,其中的中間8個方程式看起來都差不多。它們看起來像這樣:Matlab:我做錯了什麼? (Indexing)

t_i-1 - 2.3086*(t_i) + t_i+1 == -7.7160 

其中i = 2:9

所以決定構建係數矩陣和方程組通過looping.This系統中的常數矩陣(陣列)是我所做。

T = sym('t' , [1 10]); %% Creates a vector T = [ t1 t2 .... t10] 
A_10 = zeros(10,10); 
b_10 = zeros(10,1); 

for i = 2:9 %% This loop generates the equations and arranges them in the matrices A_10 and B_10. 

T(i-1) - 2.3086*T(i) + T(i+1) == -7.7160; 

[A_10(i,i-1:i+1),b_10(i,1)] = equationsToMatrix(ans) 

end 

除矩陣A_10中的第九行(最後一行)之外的所有內容都是正確的。這是A_10看起來像

A_10 =

列1至9

 0   0   0   0   0   0   0   0   0 
1.0000 -2.3086 1.0000   0   0   0   0   0   0 
    0 1.0000 -2.3086 1.0000   0   0   0   0   0 
    0   0 1.0000 -2.3086 1.0000   0   0   0   0 
    0   0   0 1.0000 -2.3086 1.0000   0   0   0 
    0   0   0   0 1.0000 -2.3086 1.0000   0   0 
    0   0   0   0   0 1.0000 -2.3086 1.0000   0 
    0   0   0   0   0   0 1.0000 -2.3086 1.0000 
    0   0   0   0   0   0   0 1.0000 1.0000 
    0   0   0   0   0   0   0   0   0 

列10

  0 
     0 
     0 
     0 
     0 
     0 
     0 
     0 
    -2.3086 
     0 

行九最後的三個要素應該是1,-2.3086 ,1像以前的行,但它顯示1,1,-2.3086。我在這裏做錯了什麼?

這是迭代的樣子在循環

ans = t8 - (11543*t9)/5000 + t10 == -1929/250 

的公式是正確的了。我無法弄清楚問題所在。

回答

3

沒有第二個輸入vars,equationsToMatrix uses symvar來確定變量列表。 使用symvar直接與最後一個方程給出

>> i = 9;symvar(T(i-1) - 2.3086*T(i) + T(i+1) == -7.7160) 
ans = 
[ t10, t8, t9] 

所以,不管出於什麼原因,symvar產生不正確的排序僅爲最後的公式(可能是因爲1 < 9)。爲了糾正這種情況,使用第二輸入

eqn = T(i-1) - 2.3086*T(i) + T(i+1) == -7.7160; 
[A_10(i,i-1:i+1),b_10(i,1)] = equationsToMatrix(eqn,T(i-1:i+1)); 

您還會注意到我分配公式來顯式變量eqn通過你打算訂購。這比依靠ans更好。


而且,因爲你反正生產數字數組,你就可以生產A沒有在許多方面象徵工具箱。例如:

n   = 10; 
A   = full(spdiags(ones(n,1)*[1,-2.3086,1],[-1,0,1],n,n)); 
A([1,end],:) = 0; 
+0

工作。謝謝! – Loki93