我之前问了一个关于我试图绘制的函数的问题。我无法得到一个有效的解决方案,所以我试图以不同的方式看待它。
我有一个函数A,它为输入t和d返回一个3x1矩阵。
我想制作一个3xn矩阵K,其中包含输入t和d的函数A的所有可能答案,分别为0:1:360
和0: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;
答案 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
可以进行矢量化,即接受几对t
和d
并返回相应的多行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(:))