将行添加到矩阵matlab中

时间:2013-12-27 07:02:41

标签: arrays matlab matrix vectorization

我之前问了一个关于我试图绘制的函数的问题。我无法得到一个有效的解决方案,所以我试图以不同的方式看待它。

我有一个函数A,它为输入t和d返回一个3x1矩阵。

我想制作一个3xn矩阵K,其中包含输入t和d的函数A的所有可能答案,分别为0:1:3600:0.05:0.75

所以换句话说,我想从函数A向矩阵K添加一个新行,它是根据t和d的值计算的。

因此对于A的两个解决方案,它将是:

K=[1,2,3;3,4,5]或类似的东西。

如何制作这样的矩阵K?

编辑:包含功能

function [ X ] = type1b(t,d)
%UNTITLED2 Summary of this function goes here
%   Detailed explanation goes here

%Definition of variables (most will be variable)
qr1=[0,0,1]; %Axis of rotation of link 1 (v)
qr2=[0,0,1]; %Axis of rotation of link 2 (v)
H1=[1,0,0]; % Link 1 (v?)
H2=[1,0,0]; % Link 2 (v?)
U1=[cos(t/2),sin(t/2)*qr1]; %quaternion rotor for link 1
U2=[cos(t/2),sin(t/2)*qr2]; %quaternion rotor for link 2
Ug=U1; %Globalising Quaternion (v)


H2g=quatrotate(Ug,H2); %Globalised H2
X=quatrotate(U1,H1)+ quatrotate(U2,H2g)+d;

2 个答案:

答案 0 :(得分:4)

假设无法对函数f进行矢量化,则可以使用嵌套循环:

all_t = 0:1:360;
all_d = 0:.05:.75;
K = zeros( numel(all_t)*numel(all_d), 3 ); % pre allocate - very important
ii = 1;
for t = all_t
    for d = all_d
        K(ii,:) = f( t, d ); % one line
        ii = ii+1;
    end
end

另一方面,如果f可以进行矢量化,即接受几对td并返回相应的多行K,那么这应该效率更高:

[t d] = ndgrid( all_t, all_d );
K = f( t(:), d(:) );

答案 1 :(得分:2)

要向量化您的函数,只需将函数的最后一行编辑为:

X=quatrotate(U1,H1)+ quatrotate(U2,H2g)+repmat(d,[1 3]);

然后你可以使用

[t d] = ndgrid( 0:360, 0:0.05:0.75);
type1b(t(:),d(:))