solving linear equations using matrices in MATLAB

1 回表示 (過去 30 日間)
Vitaly
Vitaly 2013 年 4 月 23 日
Hi,
my script creates a matrix and 2 vectors using several 'for' loops and as an example they are returned as follows:
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
As can be seen, the 'U' vector is a set of variables and I need to solve 'K*U=F' for variables contained in 'U'.
When I try to do that using 'linsolve' or 'solve' I get unexpected results and a message that the inverse of my matrix is close to singular.
HOWEVER, when I make another script and put in the SAME matrix and vectors but BY HANDS it all works fine and I can't figure out what's wrong. I use the same commands 'linsolve' or 'solve' and the only difference is that the matrix in a script is calculated automatically.
Is that somehow related to the way MATLAB stores matrices created by loop functions and I need to change the state of the matrix to something after the loop?
Also, when I put the matrix by hands it displays it without the 1.0e+006 multiplier in front of it:
K11 =
1240900 625000 815300 125000
625000 3659100 -125000 3537500
815300 -125000 1240900 -625000
125000 3537500 -625000 3659100
can that be related??
Thanks in advance.

採用された回答

Shashank Prasanna
Shashank Prasanna 2013 年 4 月 23 日
What you see on the command line may not be all of the data to the last precision.
Try
>> format longg
And then run your previous code that generated K etc. All this does is increase the precision that is shown on the commandline (doesn't affect the data itself.)
I would trust linprog or solve. When you manually put in the values you may only be considering only few significant digits which may be well conditioned but is actually ill conditioned.
  1 件のコメント
Vitaly
Vitaly 2013 年 4 月 24 日
I solved this problem yesterday and forgot to close the question here. The 'manual' matrix was rounded up and the inverse of that does exist, however, the original matrix was close to singular and that caused me problems.

サインインしてコメントする。

その他の回答 (1 件)

Kye Taylor
Kye Taylor 2013 年 4 月 23 日
編集済み: Kye Taylor 2013 年 4 月 24 日
If you're trying to solve for U in the expression K*U = F, don't use linprog or solve... use mldivide (the backslash operator)
U = K\F;
If you want better feedback, can you provide the comments that created the matrices?
  1 件のコメント
Vitaly
Vitaly 2013 年 4 月 24 日
Thanks, the problem is solved (see comments above). Different people recommend me different solvers and they all give me different results. I think this problem occurs because the problem is over-defined, i.e. more than one solution exists.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSolver Outputs and Iterative Display についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by