how to solve system of linear equations with unorganized unknowns?
조회 수: 4 (최근 30일)
이전 댓글 표시
hi everybody. I have a system of n equations n unknowns and there are two forms of this system. in the first form the system of equations is in the form of A*X=Y. in the second form the system of equations is in the form of A*X=B*Y. A and B are the matrix of constant factors. some of the unknowns are in the matrix X and the others are in the matrix Y(X and Y are columns). so the problem is that unknowns are not in one matrix so they are unorganized. i can define unknowns as zero. if there is another way to define unknowns, please let me know. so how can i solve these systems? please guide me how to solve these systems and how to define unknowns? there are several ways to organize unknowns and put them in just one matrix but i want to know if there is any way to solve the system without organizing unknowns. if all the unknowns were in one matrix then it would be easy to solve the system with linsolve in matlab.
댓글 수: 0
채택된 답변
John D'Errico
2015년 3월 23일
편집: John D'Errico
2015년 3월 23일
Just move all of the unknowns to the left hand side.
A*X - B*Y = 0
Think of it like
[A,-B]*[X;Y] = 0
Any knowns in that set among the a and y variables, you move to the right hand side and sum them up. They are all constants. I fail to see the problem. How would you solve it using pencil and paper? (Answer: Exactly the same way.)
My guess is you are getting confused because you think you have TWO sets of unknowns, mixed in with knowns, in both X and Y. In fact, you can do the entire procedure in only several lines of code, fully vectorized. TRY IT! You might surprise yourself. (Take a shot and try it. REALLY. See how it goes. If you still get confused, then just comment here and I'll show you how.)
댓글 수: 5
John D'Errico
2015년 3월 23일
편집: John D'Errico
2015년 3월 23일
In the example I just gave, here is my solution...
AB = [A,-B];
XY(unknowns) = AB(:,unknowns)\(-AB(:,knowns)*XY(knowns))
XY =
1
14.625
-2.5
4.875
7
10
(As I said, two lines of code.)
As a test to confirm this is indeed a solution...
A*XY(1:3) - B*XY(4:6)
ans =
0
0
0
In the other case, where you have
A*X = Y
with some elements of both X and Y unknown, this is IDENTICAl to the above more general problem, except that here we have B=eye(numel(Y)). No penalty functions are needed. That is simply a bad idea when the solution is so trivial. Honestly, this really is not hard to do. I call it trivial, but I've been writing the linear algebra code for things like this for years now. No matter what, it is still easy.
추가 답변 (1개)
Omidreza Ghafarinejad
2015년 3월 24일
댓글 수: 2
John D'Errico
2015년 3월 24일
Errors on that order of magnitude are often the result of how you input the data. That is, if you entered the numbers to that precision, expect errors in the last digit or so, since the true numbers that were stored in MATLAB were not exactly those values.
As I said above, for the A*X=Y problem, just use B as an identity matrix, then you can solve it the same way.
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!