如何 replace/modify 从函数 2 中调用函数 1 的某些内容(均在各自的文件中)
How to replace/modify something in a call to function 1 from within function 2 (both in their separate files)
给定的任务是从另一个函数中调用一个函数,其中两个函数都处理矩阵。
现在让我们调用这个函数 1,它在它自己的文件中:
A = (1/dot(v,v))*(Ps'*Ps);
函数 1 使用以下命令调用:
bpt = matok(P);
现在,在函数 1 所在的同一文件夹中的另一个文件中 (matok.m),我们创建另一个包含调用函数 1 的函数 2 的文件:
bpt = matok(P);
我希望 B 在技术上做的是 return 以下结果(其中 D 是对角矩阵):
忽略此行:B = (1/dot(v,v))*(Ps'*inv(D)*Ps*inv(D);
编辑:这是正确的 B = (1/dot(v,v))*(Ps*inv(D))'*Ps*inv(D);
但是B不应该"re-code"函数1中已经写好的,challenge/task是在函数2中调用函数1,在函数2中我们使用函数1的输出来最终得到 B 给我们的结果。也因为在矩阵世界中,AB 不等于 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)
给定的任务是从另一个函数中调用一个函数,其中两个函数都处理矩阵。
现在让我们调用这个函数 1,它在它自己的文件中:
A = (1/dot(v,v))*(Ps'*Ps);
函数 1 使用以下命令调用:
bpt = matok(P);
现在,在函数 1 所在的同一文件夹中的另一个文件中 (matok.m),我们创建另一个包含调用函数 1 的函数 2 的文件:
bpt = matok(P);
我希望 B 在技术上做的是 return 以下结果(其中 D 是对角矩阵):
忽略此行:B = (1/dot(v,v))*(Ps'*inv(D)*Ps*inv(D);
编辑:这是正确的 B = (1/dot(v,v))*(Ps*inv(D))'*Ps*inv(D);
但是B不应该"re-code"函数1中已经写好的,challenge/task是在函数2中调用函数1,在函数2中我们使用函数1的输出来最终得到 B 给我们的结果。也因为在矩阵世界中,AB 不等于 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)