符号矩阵求导对于一个向量
25日视图(30天)
显示旧的评论
嗨,社区,
我想计算一个矩阵的导数
对于一个向量
。都有
象征性的
组件。我不能用天真的“循环”的实现,因为矩阵是相当大的,更重要的是,
一般来说是相当复杂的三角函数(许多)。我在想如果有一个更快的矢量化的实现来执行此计算。
%的伪代码
% M =矩阵的函数(x)大小:[nxn]
% x矢量大小(资料片):
n =长度(x)
为i = 1: n
为j = 1: n
为k = 1: n
M_ij = M (i, j)
dM_dx (i, j, k) = diff (M_ij x (k))
结束
结束
结束
我想知道如果有一个方法来执行此计算没有for循环,如下:
%我希望的伪代码
dM_dx = diff (M, x)
组件的第二个参数显式出现在第一个参数。
非常感谢你的帮助!
0评论
接受的答案
Bjorn Gustavsson
2023年3月21日
编辑:Bjorn Gustavsson
2023年3月21日
你可能会足够近
雅可比矩阵
得到完整的输出:
信谊x y真实
%简单2 x 2的矩阵:
M = (sin (x + y) cos (x * y); cos (x / (x ^ 2 + y ^ 2)谭(x));
%应该返回:
% M =
%
% (sin (x + y), cos (x * y)]
% (cos (x / (x ^ 2 + y ^ 2)),谭(x))
%
%这将把2 x2矩阵M变成4 x1 column-array,雅可比矩阵
%可以处理:
J =雅可比矩阵(M (:), (x, y))
%应该返回
% J =
%
% (cos (x + y), cos (x + y)]
% (sin (x / (x ^ 2 + y ^ 2)) * (1 / (x ^ 2 + y ^ 2)——(2 * x ^ 2) / (x ^ 2 + y ^ 2) ^ 2)、- (2 * x * y * sin (x) / (x ^ 2 + y ^ 2))) / (x ^ 2 + y ^ 2) ^ 2]
% (- y * sin (x * y), - x * sin (x * y)]
% (tan (x) ^ 2 + 1, 0]
这里你得到所有4 x 2衍生品,你将不得不重新对行排序命令你期望。toy-model-example得到:
J3D =重塑(J [2 2 2]);
像你所说。在你的情况中这可能是一个相当大的数组的大小
n1 x x n_vars n2
——如果我理解你的问题。
HTH
2的评论
Bjorn Gustavsson
2023年3月22日
好,它解决了你的问题!
我突然明白了可以使用的(:)通过任务来避免麻烦与重塑雅可比矩阵:
信谊x y真实
手动%符号矩阵容易区分:
M = [x * y, y ^ 2 * x ^ 3 * y; x * y ^ 2, x ^ 2 * y ^ 2, x ^ 3 * y ^ 2);
%定义Jacobian-like数组的大小:
信谊JM [2 3 2]
%一举做! (?):
JM(:) =雅可比矩阵(M (:), (x, y))
…至少我得到了这是我认为你想要的格式输出……
快乐的帮助。