2013-02-25 126 views
0

我想編碼高斯消除,這是我正在使用的代碼段。矩陣已經是三角形的,而是有這表達了一個錯誤:Matlab中的矩陣索引和除法

x(n) = b(n)/A(n, n); 

下面是完整的一段代碼:

function [x] = gauss(A, b) 
    n = size(A); 
    for k=1 : n-1 
     for i=k+1 : n 
      m = A(i, k)/A(k, k); 
      for j=1 : n 
       A(i, j) = A(i, j) - m * A(k, j); 
      end 
      b(i) = b(i) - m * b(k); 
     end 
    end 
    x(n) = b(n)/A(n, n); 
    disp(double(b(n))); 
    for k=n-1 : -1 : 1 
     s=0; 
     for i=k+1 : n 
      s = s + A(k, i) * x(i); 
     end 
     x(k) = (b(k) - s)/A(k, k); 
    end 
    disp(x); 
end 

感謝您的幫助。順便說一句IM在Matlab新手...

編輯:添加一些更多的信息

林調用這樣此功能: A = [6 3 2; 9 -1 4; 10 5 3] B = [12 37 21]

sol = gauss(A, b); 
+0

行計數哪些A和B的尺寸? – sfotiadis 2013-02-25 22:17:51

+0

現在問題已更新。 :) – 2013-02-25 22:21:22

回答

0

此行

n = size(A); 

將有一個矢量結果作爲A是一個矩陣。看來,你期待此行

x(n) = b(n)/A(n, n); 

表現得像一個標量劃分,但n矢量你實際上是企圖分裂不同維度的矩陣。根據您的示例代碼檢查這些語句的輸出

n = size(A); 
A(n,n) 
b(n) 

並且看到您沒有處理標量。如果你想n等於的A行數標嘗試

[n n1] = size(A); 

更換

n = size(A); 

現在n應該真正代表的A

+0

謝謝。我找出了我的錯誤。我解決了它[n,n] = size(A); – 2013-02-25 22:34:20

+0

@Andrés很高興它的作品! – mathematician1975 2013-02-25 22:38:23