How do you get a general solution of and underdetermined system?

26 Ansichten (letzte 30 Tage)
How can you obtain the general solution of an underdetermined system? What I have now is:
A=[1 2 3;-2 -1 0;0 2 4];
b=[5;-1;6];
x=A\b
but this gives me the answer x =
NaN
NaN
NaN
hope someone can help me

Akzeptierte Antwort

Star Strider
Star Strider am 29 Dez. 2015
I would use the pseudo-inverse pinv function:
x = pinv(A)*b
x =
166.6667e-003
666.6667e-003
1.1667e+000
There may be other options, such as the sparse matrix lsqr funciton, which gives the same result:
x = lsqr(A,b)
  2 Kommentare
John D'Errico
John D'Errico am 31 Dez. 2015
What Star has NOT explained is that this is NOT in fact the general solution!
When you have a singular problem, there will be issues. First of all, there may be no exact solution at all. If we change b slightly, than that would happen.
A=[1 2 3;-2 -1 0;0 2 4];
b=[5;-1;6];
x = pinv(A)*b
x =
0.16667
0.66667
1.1667
A*x
ans =
5
-1
6
bhat = b;
bhat(3) = 5
bhat =
5
-1
5
xhat = pinv(A)*bhat
xhat =
0.28161
0.64368
1.0057
Is the solution now exact? No.
A*xhat
ans =
4.5862
-1.2069
5.3103
In fact, NO exact solution exists to the modified problem, where b was perturbed slightly.
A*xhat = bhat
As we saw in the first case, the solution for b was exact. But is it the unique solution? When A is a singular matrix, the solution will not be unique. Lets see what the true solution is. There will be an undetermined coefficient, that we can vary arbitrarily. I'll call it k here. The general solution for the case of A is given by what I call xtrue, since A is a 3x3 matrix that is of rank 2.
syms k
xtrue = pinv(A)*b + k*null(A)
xtrue =
(6^(1/2)*k)/6 + 1/6
2/3 - (2^(1/2)*3^(1/2)*k)/3
(6^(½)*k)/6 + 7/6
Yes, I know this looks a bit messy, but we can pick a specific, arbitrary value of k, and get this:
vpa(subs(xtrue,k,3))
ans =
1.3914115380582557157653087040196
-1.7828230761165114315306174080392
2.3914115380582557157653087040196
A*ans
ans =
5.0
-1.0
6.0
In fact, we can always pick ANY value for k, and get a different solution, which is equally valid.
simplify(A*xtrue)
ans =
5
-1
6
So when you asked for the general solution, Star misled you, telling you it was obtainable from pinv. In fact, that was NOT the general solution.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Descriptive Statistics finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by