2014-11-29 2 views
1

Я пытаюсь создать серию матриц из данных, содержащихся в заданной матрице.Создайте серию матриц из данных, содержащихся в одной матрице

Я написал код, который просит пользователя указать количество строк из 4-х столбчатой ​​матрицы.

Затем пользователь должен ввести 4 элемента для каждой строки, которые они указали, что создаст таким образом матрицу k x 4.

Т.е. если пользователь выбирает 3 строки, то они будут вводить x1, x2, x3, x4 для строки 1, а затем y1, y2, y3, y3 для строки 2, а затем z1, z2, z3, z4 для строки три, поэтому созданная матрица становится: J = [x1,x2,x3,x4;y1,y2,y3,y3;z1,z2,z3,z4].

Моя проблема заключается в том, что мне нужно получить данные из матрицы J, чтобы создать серию новых матриц. Число новых матриц зависит от количества строк, из которых состоит матрица J, т. Е. Если матрица J имеет 5 строк, тогда мне нужно создать 5 новых матриц из данных, содержащихся в матрице J, например 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]; 

Эта процедура продолжается до тех пор, пока не созданы все матрицы Т.

Это мой код до сих пор:

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 
+0

В чем проблема с кодом? Какие ошибки вы получаете? – Trojanian

+0

Ну, когда я запустить код, я получить следующий вывод в окне команды: '>> EE582_ASSIGNMENT2_Q4 Введите номер канала связи и совместных параметров, к: 1 Row: 1 Arrange кинематических параметров в следующем синтаксисе : [theta_1, d_1, l_1, alpha_1] Введите параметры: [45,60,0, пи/2] T = [4x4 двойной] >> ' поэтому, казалось бы, 4х4 Создана матрица «Т», но я не знаю, что в ней. Однако, я адаптировал свой код, который, похоже, работает с использованием функции EVAL, но, похоже, нет прямого метода использования матриц «T» позже для разных операций. –

+0

Модифицированный код, который я упомянул в конце мой предыдущий комментарий здесь: 'function test_q() k = ввод ('Введите количество параметров соединения и соединения, k:'); x = нули (k, 4); T = нули(); при п = 1: K DISP ([ 'Ряд:', num2str (п)]) fprintf ('Arrange кинематических параметров в следующий синтаксис: [theta_% д, D_% д, L_% д, alpha_% d] \ п», п, п, п, п); x (n, :) = ввод ('Введите параметры:'); конец для n = 1: k eval (sprintf ('T% d = [cos (x (n, 1) * (pi/180)), .....', n)); конец конец ' –

ответ

0

Я бы, наверное, идти об этом совсем по-другому - почему бы не иметь свой x в качестве входного параметра функции? Затем позвоните T = {FUNCTION NAME}(x)?

Но после маршрута, это должно работать:

function [T] = 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: '); 
end 
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 

Ваши проблемы были с сквозными переменными. Ситакс, необходимый для вызова этой функции: T = EE582_ASSIGNMENT2_Q4, где T может быть любым переменным именем, которое вы хотите.

 Смежные вопросы

  • Нет связанных вопросов^_^