【发布时间】:2014-11-29 18:55:16
【问题描述】:
我正在尝试根据预定义矩阵中包含的数据创建一系列矩阵。
我编写了一些代码,要求用户指定 4 列矩阵的行数。
然后用户将为他们指定的每一行输入 4 个元素,从而创建一个 k x 4 矩阵。
即如果用户选择 3 行,那么他们将在第 1 行输入 x1,x2,x3,x4,然后在第 2 行输入 y1,y2,y3,y3,然后在第三行输入 z1,z2,z3,z4,因此创建的矩阵变为:
J = [x1,x2,x3,x4;y1,y2,y3,y3;z1,z2,z3,z4].
我的问题是,我需要从矩阵 J 中取出数据来创建一系列新矩阵。新矩阵的数量取决于矩阵 J 所包含的行数,即如果矩阵 J 有 5 行,那么我需要从矩阵 J 中包含的数据创建 5 个新矩阵,例如 T1、T2、T3、T4、 T5。
新创建的矩阵 (T) 需要来自 J 矩阵的元素,如下所示:
T1 = [cos(J(1,1)), -cos(J(1,4))*sin(x(1,1)), sin(J(1,4))*sin(J(1,1)),J(1,3)*cos(J(1,1));
sin(J(1,1)), cos(J(1,4))*cos(J(1,1)), -sin(J(1,4))*cos(J(1,1)),J(1,3)*sin(J(1,1));
0,sin(J(1,4)),cos(J(1,4)),J(1,2);
0,0,0,1];
然后,
T2 = [cos(J(2,1)), -cos(J(2,4))*sin(x(2,1)), sin(J(2,4))*sin(J(2,1)),J(2,3)*cos(J(2,1));
sin(J(2,1)), cos(J(2,4))*cos(J(2,1)), -sin(J(2,4))*cos(J(2,1)),J(2,3)*sin(J(2,1));
0,sin(J(2,4)),cos(J(2,4)),J(2,2);
0,0,0,1];
这个过程一直持续到所有 T 矩阵都被创建为止。
这是我目前的代码:
function EE582_ASSIGNMENT2_Q4()
k = input('Enter the number of link and joint parameters, k: ');
x = zeros(k,4);
for n = 1:k
disp(['Row: ', num2str(n)])
fprintf('Arrange the Kinematic Parameters in the following syntax: [theta_%d,d_%d,l_%d,alpha_%d]\n',n,n,n,n);
x(n,:) = input('Enter the Parameters: ');
for v = 1:k
T{v} = [cos(x(v,1)), -cos(x(v,4))*sin(x(v,1)), sin(x(v,4))*sin(x(v,1)),x(v,3)*cos(x(v,1));
sin(x(v,1)), cos(x(v,4))*cos(x(v,1)), -sin(x(v,4))*cos(x(v,1)),x(v,3)*sin(x(v,1));
0,sin(x(v,4)),cos(x(v,4)),x(v,2);
0,0,0,1]
end
end
【问题讨论】:
-
你的代码有什么问题?你得到什么错误?
-
好吧,当我运行代码时,我会在命令窗口中获得以下输出:
>> EE582_ASSIGNMENT2_Q4 Enter the number of link and joint parameters, k: 1 Row: 1 Arrange the Kinematic Parameters in the following syntax: [theta_1,d_1,l_1,alpha_1] Enter the Parameters: [45,60,0,pi/2] T = [4x4 double] >>因此似乎创建了一个 4x4 "T" 矩阵,但我不知道里面有什么.但是,我已经修改了我的代码,这似乎可以通过使用 EVAL 函数来工作,但似乎没有一种直接的方法可以稍后将“T”矩阵用于不同的操作 -
我之前评论末尾提到的修改代码在这里:
function test_q() k = input('Enter the number of link and joint parameters, k: '); x = zeros(k,4); T = zeros(); for n = 1:k disp(['Row: ', num2str(n)]) fprintf('Arrange the Kinematic Parameters in the following syntax: [theta_%d,d_%d,l_%d,alpha_%d]\n',n,n,n,n); x(n,:) = input('Enter the Parameters: '); end for n = 1:k eval(sprintf('T%d = [cos(x(n,1)*(pi/180)), .....', n)); end end -
你检查答案了吗?
标签: matlab matrix extraction