【发布时间】:2019-12-05 00:28:25
【问题描述】:
我从 excel 文件中读取 b 的 10 个数据。我试图通过替换矩阵 [1 0 0; 来获得 10 (3x3) 个旋转矩阵。 0 cos(a) -sin(a); 0 sin(a) cos(a)]。但是,我的代码生成 (30x3) 矩阵。我可以直接生成 10 个 3x3 矩阵还是有办法将三个连续的行连接在一起以从 (30x3) 矩阵中生成 10 个 3x3 矩阵?
syms a b
b = xlsread('C:\Desktop\Data.xlsx');
r = subs([1 0 0 0 cos(a) -sin(a) 0 sin(a) cos(a)], b)
rx = vec2mat(r,3)
进一步展开答案得到最终的旋转矩阵,将上述结构重复三次,如下所示
syms a b c d rx ry rz rm
b = xlsread('C:\Desktop\Data.xlsx','A1:A10');
c = xlsread('C:\Desktop\Data.xlsx','B1:B10');
d = xlsread('C:\Desktop\Data.xlsx','C1:C10');
rx = reshape(vec2mat(subs([1 0 0 0 cosd(a) -sind(a) 0 sind(a) cosd(a)], b), 3).',3,3,numel(b));
ry = reshape(vec2mat(subs([cosd(a) 0 sind(a) 0 1 0 -sind(a) 0 cosd(a)], c), 3).',3,3,numel(b));
rz = reshape(vec2mat(subs([cosd(a) -sind(a) 0 sind(a) cosd(a) 0 0 0 1], d), 3).',3,3,numel(b));
rm = rx.*ry.*rz;
对于以度为单位的角度 (34, 0, 100) 角度,算法给出的答案正确如下
[-cos((4*pi)/9), 0 , 0]
[0, -cos((4*pi)/9*cos((17*pi)/90), 0]
[0, 0, cos((17*pi)/90)]
而不是
rm =
0.8623 0 0
0 -0.7317 0
0 0 -0.8486
我正在寻找具有十进制值的单个矩阵解决方案(不是以 pi 表示)。
【问题讨论】:
标签: matlab math multiple-columns rows rotational-matrices