如何在函数2中调用函数1来替换/修改某些东西(两者都在它们各自的文件中)

时间:2015-03-14 11:29:12

标签: matlab function matrix matrix-multiplication matrix-inverse

给定的任务是从另一个函数中调用一个函数,其中两个函数都在处理矩阵。

现在让我们调用这个函数1,它在自己的文件中:

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

使用以下命令调用函数1:

bpt = matok(P);

现在在函数1所在的同一文件夹中的另一个文件(matok.m)中,我们创建另一个包含函数2的文件,该函数调用函数1:

bpt = matok(P);

我希望B在技术上做的是返回以下结果(其中D是对角矩阵):

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

编辑:这是正确的B = (1/dot(v,v))*(Ps*inv(D))'*Ps*inv(D);

但是B不应该重新编码"已经在函数1中编写了什么,挑战/任务是在函数2中调用函数1,在函数2中我们使用函数1的输出来结束B给出的结果。同样在矩阵世界中,A B不等于B A,那么我不能简单地用inv(D)乘以两次。现在因为我不允许写B如上所示,我正在考虑替换(不改变函数1,在函数2中进行操作):

(Ps'*Ps)

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

这在某种程度上我认为应该是可能的,但是因为我是Matlab的新手,不知道该怎么做,甚至不知道从哪里开始。关于如何达到预期效果的任何想法?

我错过了一个小细节:

转置不应该是Ps:

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

而是Ps和inv(D)的转置:

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

我找到了这个解决方案,但它可能没有那么简单,我觉得它看起来有点不优,可能还有更短的路径?:

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

1 个答案:

答案 0 :(得分:1)

由于(A * B)' = B' * A',您可能只需要致电

matok(inv(D) * Ps)