0

matlabで簡単な質問があります。私は方程式を持っています:A * H = b私はAとbを知っています私はこの式を使おうとします:

H=A\b;

しかし、私は間違った値を取得します:例:

       A =

       231   481
       233   488
       241   481
       243   489
b =

    11    31
     6    20
    21    31
    18    22

そして、私は得る

H =

    1.1627    0.2713
   -0.5396   -0.0791

それで

A*H

ans =

    9.0386   24.6299
    7.5868   24.6189
   20.6659   27.3434
   18.6745   27.2532

これはbではありません

4

2 に答える 2

1

help slashコマンドプロンプトでの入力から:

\バックスラッシュまたは左除算。

A \ Bは、AからBへの行列除算であり、計算方法が異なることを除いて、INV(A)*Bとほぼ同じです。AがN行N列の行列で、BがN個の成分を持つ列ベクトル、またはそのような列がいくつかある行列の場合、X = A\Bは方程式A*X=Bの解です。警告メッセージは次のとおりです。 Aのスケーリングが不十分であるか、ほぼ特異である場合に印刷されます。A \ EYE(SIZE(A))は、Aの逆数を生成します。

AがM<または>NのM行N列の行列で、BがM成分の列ベクトル、またはそのような列がいくつかある行列の場合、X = A\Bは最小二乗の意味での解です。方程式の過小または過剰決定システムA*X =B。Aの有効ランクKは、ピボットを使用したQR分解から決定されます。列ごとに最大でK個の非ゼロ成分を持つ解Xが計算されます。K <Nの場合、これは通常PINV(A)*Bと同じソリューションではありません。A \ EYE(SIZE(A))は、Aの一般逆行列を生成します。

したがって、2番目の段落はあなたのケースに適用されます。言い換えれば、あなたの問題Hを満足A*H = bさせることができるものはありませんが、Matlabは(最小二乗の意味で)それに最適な近似を計算します。したがって、得られる結果は正しいものです。

于 2012-08-19T19:05:21.430 に答える
-1
h = b ./ A;

h = 0.0476    0.0644
    0.0258    0.0410
    0.0871    0.0644
    0.0741    0.0450

A.*h = 11    31
        6    20
       21    31
       18    22

.または、部門にを追加することもできます。h = A .\ b

于 2012-08-19T17:07:40.293 に答える