如何编写'for-loop'函数来访问用于重复数学运算的列和行



我有一个六列的 .mat 文件,每个列有一百个数据。我想编写一个函数,它将前三列 (B,C,D( 的每一行乘以 3 x 3 矩阵,其中矩阵以 sin 和 cos 值表示,后来包括第 4 行到第 6 行 (A、E、F( 作为矩阵的最后一列。但是,我没有得到所需的输出。

clear all
clc
[a] = xlsread('C:DesktopBook1.xlsx')
save data a;
matObj = matfile('data.mat');
B = matObj.a(:,1);
C = matObj.a(:,2);
D = matObj.a(:,3);
DX = matObj.a(:,4);
DY = matObj.a(:,5);
DZ = matObj.a(:,6);
rx = [1 0 0; 0 cos(B) -sin(B); 0 sin(B) cos(B)];
ry = [cos(C) 0 sin(C); 0 1 0; -sin(C) 0 cos(C)];
rz = [cos(D) -sin(D) 0; sin(D) cos(D) 0; 0 0 1];
for i = (matObj.a(2,:)):(matObj.a(99,:))
r(i) = (rx*B)+(ry*C)+(rz*D);
end
%t = [A; E; F];
%T = (r, t)

准确地说,当我想要一行数据的解决方案时,这提供了解决方案

B = 0;
C = pi/2;
D = 0;
rx = [1 0 0; 0 cos(B) -sin(B); 0 sin(B) cos(B)];
ry = [cos(C) 0 sin(C); 0 1 0; -sin(C) 0 cos(C)];
rz = [cos(D) -sin(D) 0; sin(D) cos(D) 0; 0 0 1];
r = rx*ry*rz

如果我有这三列(B,C,D(中的几行,我想知道如何进行。

让我弄清楚你的问题:你有六个 1x100 向量,你想用一个 3x3 矩阵相乘。(也许将来,您可以提供一个最小的工作示例。

好吧,无论如何,这是行不通的。不过,您可以做的是从矩阵[B,C,D]创建一个 3x1 向量,然后循环遍历它(我对你的 for 循环索引有点恼火。最好使用 length((/size(( 来确保返回一个整数(

mat = [B,C,D];
rst = NaN(size(mat,1),3); % allocate memory for speed, since Matlab stores variables coherent in your RAM
% loop over all rows
for i = 1:size(mat,1)
rst(i,:) = ( r * mat(:,i)' )'
end

好的,很难猜测您的结果rst应该是什么样子。现在的大小与mat相同。我假设r是大小为 3x3 的旋转矩阵。

最新更新