How to solve the following homogenous equation?

2 visualizaciones (últimos 30 días)
Subaharan Rajenthirakumar
Subaharan Rajenthirakumar el 15 de Abr. de 2022
Editada: John D'Errico el 15 de Abr. de 2022
I want to solve the following homogenous equation AX = 0, where my A is as follows,
A =
1.0e+08 *
-3.1265 -1.0000 0
-1.0000 -4.5841 -1.0000
0 -1.0000 -0.2345
Rank of this matrix is 1. I want to solve such that X = [x1,x2,x3], and assuming x3 = 1.
Is there any other way in which I could solve other than going for dynamic variable? Please help!
Thank you in advance

Respuesta aceptada

John D'Errico
John D'Errico el 15 de Abr. de 2022
Editada: John D'Errico el 15 de Abr. de 2022
A =1.0e+08 *[ -3.1265 -1.0000 0
-1.0000 -4.5841 -1.0000
0 -1.0000 -0.2345];
First, let me verify your claim.
rank(A)
ans = 3
So you are wrong. The rank is actually 3, NOT 1. Is it at least close to being rank deficient?
format long g
svd(A)
ans = 3×1
1.0e+00 * 525349097.530803 269161622.121456 719.652258357894
And that suggsts it is not in fact even that close to being rank deficient. The third singular vlaue is small, but not that close to zero. However, then I need to consider if your matrix is REALLY what you claim it is. So very likely, you have provided only approximate values for the elements of the matrix. What they are more accurately, we can have no idea.
If your matrix is not rank deficient, then you CANNOT find any non-zero solution to the problem. And this matrix is not even remotely close to being rank 1, as you claim. You could make an argument that it MIGHT be close to a rank 2 matrix. But rank 1? You would be dreaming.
What is the smallest perturbation to A, such that it is even rank deficient, thus rank 2?
[U,S,V] = svd(A);
Adel = U(:,3)*S(3,3)*V(:,3)'
Adel = 3×3
3.81730227540681 -11.9348230353614 50.893205890217 -11.9348230353614 37.314310109281 -159.117974469869 50.893205890217 -159.117974469869 678.520645973206
Ahat = A - Adel
Ahat = 3×3
1.0e+00 * -312650003.817302 -99999988.065177 -50.893205890217 -99999988.065177 -458410037.31431 -99999840.8820255 -50.893205890217 -99999840.8820255 -23450678.520646
rank(Ahat)
ans =
2
As you can see, I had to make some significant changes to A even to find a matrix that was singular. And that is the SMALLEST such perturbation possible.
Again, unless A is rank deficient, there is NO non-zero solution.
But suppose you wanted to find the solutino to the perturbed problem? That is, solve for x such that Ahat*x = 0, with x(3)==1? That part is now trivial.
x = null(Ahat);
x = x/x(3)
x = 3×1
0.075006127215511 -0.234507196522584 1
Does this solve the problem? Of course it does.
Ahat*x
ans = 3×1
1.0e+00 * 2.07764117021725e-09 0 -3.72529029846191e-09
And to within floating point trash for this particular probem, that is what we see. (Remember that the elements of Ahat were pretty large. So trash on the order of 1e-9 is about correct here.)
  4 comentarios
Subaharan Rajenthirakumar
Subaharan Rajenthirakumar el 15 de Abr. de 2022
Yes, I got that.
Thank you for the guidance and learnt a lot!
John D'Errico
John D'Errico el 15 de Abr. de 2022
Editada: John D'Errico el 15 de Abr. de 2022
I almost forgot to say. You can scale the vector x that comes out, because it is not unique. Clearly if x is a solution to the problem
A*x = 0
then
A*(x*k) = 0
is also a solution. And that means you can scale x by dividing by the last element to make it 1, as long as that element was not exactly zero in the solution. If that were the case, then no solution would exist with x(3) == 1, since you would need to divide by zero.

Iniciar sesión para comentar.

Más respuestas (0)

Productos


Versión

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by