Matlab 如何书写';对于循环';用于访问列和行以重复数学操作的函数

Matlab 如何书写';对于循环';用于访问列和行以重复数学操作的函数,matlab,for-loop,math,multiple-columns,rows,Matlab,For Loop,Math,Multiple Columns,Rows,我有一个6列的.mat文件,每个列有100个数据。我想写一个函数,将前三列(B,C,D)的每一行乘以一个3x3矩阵,其中矩阵是以sin和cos值表示的,然后将第4行到第6行(a,E,F)作为矩阵的最后一列。但是,我没有得到所需的输出 clear all clc [a] = xlsread('C:Desktop\Book1.xlsx') save data a; matObj = matfile('data.mat'); B = matObj.a(:,1); C = matObj.a(:,2);

我有一个6列的.mat文件,每个列有100个数据。我想写一个函数,将前三列(B,C,D)的每一行乘以一个3x3矩阵,其中矩阵是以sin和cos值表示的,然后将第4行到第6行(a,E,F)作为矩阵的最后一列。但是,我没有得到所需的输出

clear all
clc
[a] = xlsread('C:Desktop\Book1.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
相同。我假设
r
是3x3大小的旋转矩阵。

请发布一些示例数据,例如文件的前十行。
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