0

私はガウスの消去法をコーディングしようとしていますが、これは私が使用しているコードの一部です。行列はすでに三角形ですが、この式には誤りがあります。

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

ご協力いただきありがとうございます。ところで、Matlabの初心者です...

編集:さらに情報を追加

この関数を次のように呼び出しています:A = [6 3 2; 9 -1 4; 10 5 3] b = [12 37 21]

sol = gauss(A, b);
4

1 に答える 1

0

この行

 n = size(A);

A行列のようにベクトル結果が得られます。この行を期待しているようです

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

スカラー除算のように動作しnますが、ベクトルを使用すると、実際には異なる次元の行列を除算しようとしています。サンプルコードに基づいて、これらのステートメントの出力を調べます

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

スカラーを扱っていないことがわかります。nの行数に等しいスカラーにしたい場合は、A置き換えてみてください

n = size(A);

[n n1] = size(A);

そして今n、真に行数を表す必要がありますA

于 2013-02-25T22:28:29.227 に答える