how to solve system of linear equations with unorganized unknowns?
    11 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Omidreza Ghafarinejad
 il 23 Mar 2015
  
    
    
    
    
    Modificato: Omidreza Ghafarinejad
 il 24 Mar 2015
            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 Commenti
Risposta accettata
  John D'Errico
      
      
 il 23 Mar 2015
        
      Modificato: John D'Errico
      
      
 il 23 Mar 2015
  
      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 Commenti
  John D'Errico
      
      
 il 23 Mar 2015
				
      Modificato: John D'Errico
      
      
 il 23 Mar 2015
  
			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.
Più risposte (1)
  Omidreza Ghafarinejad
 il 24 Mar 2015
        2 Commenti
  John D'Errico
      
      
 il 24 Mar 2015
				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.
  Omidreza Ghafarinejad
 il 24 Mar 2015
				
      Modificato: Omidreza Ghafarinejad
 il 24 Mar 2015
  
			
		Vedere anche
Categorie
				Scopri di più su Operating on Diagonal Matrices in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!