如何从函数 2 中替换/修改对函数 1 的调用中的某些内容(两者都在单独的文件中)



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

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

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

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

bpt = matok(P);

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

bpt = matok(P);

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

忽略此行:

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不等于 BA,那么我最后不能简单地与 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

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

matok(inv(D) * Ps)

相关内容

最新更新