Matrix division problem on adding condition

I have a math model, the math is A*B=C
A is a 1*m matrix; B is m*n matrix and C is a 1*n matrix.
B has condition is the sum of each row must ==1.
I wrote a test code to test it:
A=[100 230 30]
B=[1 0 0;1 0 0;0 0 1]
C=A*B
D=A\C
but unfortuatly, the result D is not equal to B. I have no idea how could I add the condition of B, and how to write the correct code. and also why D~=B ?
thank you

 Respuesta aceptada

David Goodmanson
David Goodmanson el 28 de En. de 2020
Editada: David Goodmanson el 1 de Feb. de 2020
Hi David,
MODIFIED
the solution is not immediate, but you did ask …
Take the example
A = [1 2 3]
C = [5 2 -1]
B = the matrix you provided
Consider first the possible solutions for B without the restriction that the rows of B each add up to 1.
A*B = C
B0 = A\C
You would like B0 = B but instead,
B0 = 0 0 0
0 0 0
1.6667 0.6667 -0.3333
A*B = C consists of three equations but B has nine unknowns, so B is far from unique. The B that you provided is one solution, and so is B0.
The range of possibilities is determined by the null space of A. In this case the null space consists of two columns
N = null(A)
N =
-0.5345 -0.8018
0.7745 -0.3382
-0.3382 0.4927
and by the definition of null space, A*(either of these columns) = 0, or equivalently A*N = 0. You can add any linear combination of these two columns to any column of B0 (different columns can have different linear combinations) and still have a solution. The most general solution is
B = B0 + N*[c1 c2 c3; c4 c5 c6] where [ … ] is 2x3 [1]
and c1 … c6 are arbitrary parameters. Then
A*B0 = C and A*N = 0 --> A*B = C
The most general B has six arbitrary parameters.
The restriction that the rows of B each add up to 1 complicates matters a bit. To begin with, there are going to be restrictions on A vs C.
In matrix form the condition that each row of B sums to 1 is
B*[1;1;1] = [1;1;1]
which is slightly confusing because the [1;1;1] on the left produces the sum of each row and the [1;1;1] on the right says that the row sums, are 1,1, and 1. Anyway,
A*B = C
A*B*[1;1;1] = C*[1;1;1]
A*[1;1;1] = C*[1;1;1]
so the sum of the elements of A has to equal the sum of the elements of C. If not, there is no solution. Suppose the sums are equal, as they are in the example. Multiplying [1] on the right by [1;1;1] leads to the requirement
[s1;s4] = N\( [1;1;1]-B0*[1;1;1] )
where s1 is the sum of c1,c2,c3 and s4 is the sum of c4,c5,c6.
That’s two more conditions, so the most general B has four independent parameters. That still leaves a lot of room to roam within B. With the appropriately chosen parameters, B will equal your original matrix B. The code below gives a solution for four randomly chosen parameters.
onz = [1 1 1]';
A = [1 2 3];
C = [5 2 -1];
B = [1 0 0; 1 0 0; 0 0 1];
B0 = A\C
N = null(A)
s14 = N\(onz - B0*onz) % this is [s1;s4]
r = randn(2,2);
c = [r (-sum(r,2)+s14)]
B = B0 + N*c
A*B % should equal C
B*onz % row sums of B, should equal [1 1 1]'

5 comentarios

David Han
David Han el 28 de En. de 2020
Editada: David Han el 28 de En. de 2020
Thank you David,
I understand D will not has only one solution, it should be a set. As my original thought, I want to have all the solutions of D, then using a filter matrix
F=[1;1;1]
if sum(D,2)= F, then D is the matrix I need, if not, then goes to next D solution.
I have no idea why Matlab only provides one solution, and how to get the whole set of solutions.
David Goodmanson
David Goodmanson el 28 de En. de 2020
Hi David,
I may have misinterpreted your original question. Is it the case that both A and C are known, and you are looking for a matrix B such that A*B = C and the sum of each row of B = 1?
David Han
David Han el 28 de En. de 2020
Yes, David A and C are known, and I want to calculate matrix B How can I get the correct B solution?
David Goodmanson
David Goodmanson el 1 de Feb. de 2020
Hi David, after I got a clearer idea of what is happening I modified the answer above.
David Han
David Han el 1 de Feb. de 2020
Thank you David,
This is the best answer and really a good solution, I will use your way to modify my model.
Really appreciate your time!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Preguntada:

el 27 de En. de 2020

Comentada:

el 1 de Feb. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by