符号矩阵求导对于一个向量

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)
PS:我已经尝试看看: 区分符号表达式或函数——MATLAB diff (mathworks.com) 但似乎没有工作,因为它给了我以下错误:
组件的第二个参数显式出现在第一个参数。
非常感谢你的帮助!

接受的答案

Bjorn Gustavsson
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
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))
…至少我得到了这是我认为你想要的格式输出……
快乐的帮助。

登录置评。

更多的答案(0)

s manbetx 845


释放

R2022b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!