1

The given task is to call a function from within another function, where both functions are handling matrices.

Now lets call this function 1 which is in its own file:

A = (1/dot(v,v))*(Ps'*Ps);

Function 1 is called with the command:

bpt = matok(P);

Now in another file in the same folder where function 1 is located (matok.m) we make another file containing function 2 that calls function 1:

bpt = matok(P);

What I wish B to do technically, is to return the result of the following (where D is a diagonal matrix):

IGNORE THIS LINE: B = (1/dot(v,v))*(Ps'*inv(D)*Ps*inv(D);

EDIT: this is the correct B = (1/dot(v,v))*(Ps*inv(D))'*Ps*inv(D);

But B should not "re-code" what has allready been written in function 1, the challenge/task is to call function 1 within function 2, and within function 2 we use the output of function 1 to end up with the result that B gives us. Also cause in the matrix world, AB is not equal to BA, then I can't simply multiply with inv(D) twice in the end. Now since Im not allowed to write B as is shown above, I was thinking of replacing (without altering function 1, doing the manipulation within function 2):

(Ps'*Ps)

with

(Ps'*inv(D)*Ps*inv(D)

which in some way I imagine should be possible, but since Im new to Matlab have no idea how to do or where even to start. Any ideas on how to achieve the desired result?

A small detail I missed:

The transpose shouldn't be of Ps in this:

B = (1/dot(v,v))*(Ps'*inv(D))*Ps*inv(D);

But rather the transpose of Ps and inv(D):

B = (1/dot(v,v))*(Ps*inv(D))'*Ps*inv(D);

I found this solution, but it might not be as compressed as it could've been and it seems a bit unelegant in my eyes, maybe there is an even shorter way?:

C = pinv(Ps') * A
E = (Ps*inv(D))' * C

1 Answers1

1

Since (A*B)' = B'*A', you probably just need to call

matok(inv(D) * Ps)
G.J
  • 795
  • 1
  • 6
  • 12
  • Didn't work, adding that returned the error. Also tried, which I think would be more correct in order to reflect the order in B: matok(Ps*inv(D)), which returned the same errror: Error using * Inner matrix dimensions must agree. – BoroBorooooooooooooooooooooooo Mar 14 '15 at 14:24
  • Found out why it didn't work, cause inner dim didn't match between Ps' and D, which was a small overlooked detail: A small detail I missed (updated in main post): The transpose shouldn't be of Ps in this ``B = (1/dot(v,v))*(Ps'*inv(D))*Ps*inv(D);` But rather the transpose of both Ps and inv(D) 'B = (1/dot(v,v))*(Ps*inv(D))'*Ps*inv(D);' I found this solution, but it might not be as compressed as it could've been and it seems a bit unelegant in my eyes, maybe there is an even shorter version?: 'C = pinv(Ps') * A' 'E = (Ps*inv(D))' * C' – BoroBorooooooooooooooooooooooo Mar 14 '15 at 19:37