1

私のスクリプトは、いくつかの「for」ループを使用して行列と 2 つのベクトルを作成し、例として次のように返されます。

K =

  1.0e+006 *

    1.2409    0.6250    0.8153    0.1250
    0.6250    3.6591   -0.1250    3.5375
    0.8153   -0.1250    1.2409   -0.6250
    0.1250    3.5375   -0.6250    3.6591

F =

  1.0e+006 *

    0.1733
    1.3533
   -0.1066
    1.3371

U =

 u3
 v3
 u4
 v4

ご覧のとおり、'U'ベクトルは変数のセットであり、 に'K*U=F'含まれる変数について解く必要があります'U'

linsolveまたはを使用してそれを実行しようとするsolveと、予期しない結果と、逆行列が特異に近いというメッセージが表示されます。

ただし、別のスクリプトを作成して同じマトリックスとベクトルを手作業で配置すると、すべて正常に機能し、何が問題なのかわかりません。

これは、MATLAB がループ関数によって作成された行列を格納する方法に何らかの関係があり、ループの後に行列の状態を何かに変更する必要がありますか?

また、マトリックスを手で配置すると、その1.0e+006前に乗数なしで表示されます。

K11 =

     1240900      625000      815300      125000
      625000     3659100     -125000     3537500
      815300     -125000     1240900     -625000
      125000     3537500     -625000     3659100

それは関係できますか??

前もって感謝します。

4

2 に答える 2

2

前の議論から、行列が特異であることは明らかです。これは、方程式が線形独立していないことを意味します。これが発生した場合、2 つの可能性があります。システムに一貫性がない(過度に制約されている) 可能性があります。この場合、ソリューションは存在しません。または、方程式の制約が不十分であることを意味する場合もあります。この場合、解のセットは無限にあります。

どちらの場合であるかを判断するには、 rrefを使用して行列の「行削減エシュロン形式」を取得できます。これは次のように行います。

 KF = [K,F]
 rref(KF)

最後の行が完全にゼロになると、制約が不足しており、縮小された行列からソリューション セット (ただし、一意のソリューションではない) を抽出できます。

ただし、この場合、[0 0 0 0 1] の行を取得します。これにより、システムが過度に制約され、解決策がなくなります。

于 2013-04-23T17:42:26.197 に答える