2016-05-02 2 views
0
function f = flower(f) 
t = (0:2*pi/100:2*pi); 
x =((1+cos(5*t)).*(cos(t))); 
y = (((x)).*(sin(t))); 
A = [x,y]; 
G = [cos(45),-sin(45); sin(45),cos(45)]; 
if (f == 1) 
plot(x,y,'-g') 
elseif (f == 2) 
b = zeros(1,101); 
z = zeros(1,101); 
for i = 1:101 
    b(1,i) = 2; 
    z(1,i) = -3; 
end 
x = x+b; 
y = y+z; 
plot(x,y,'-g') 
elseif (f == 3) 
    A = A'*G; 
    plot(A(1,:),A(2,:),'-') 
else 
disp('input a number from 1-4') 
end 

(с использованием Matlab) У меня возникает проблема с умножением матрицы на поворот изображения на 45 градусов по часовой стрелке. Блок кода начинается с elseif (f == 3). Я получаю измерение внутренней матрицы, должен соглашаться с ошибкой. Как я могу умножить матрицу A [x, y] на матрицу G?Matlab Matrix Rotation, размеры

ответ

1

Если вы на самом деле смотреть на размер A, вы поймете, что вместо того, что будучи 2 x 101, как это кажется, что вы ожидаете, следующее заявление

A = [x, y]; 

фактически делает его 1 x 202, который, очевидно, может умножить на матрицу вращения 2 x 2 (G).

Это потому, что x и y являются обоими векторами строк и объединяют их по второму размеру (с использованием [ , ]), что делает их еще более длинными векторными строками. Вместо этого вы можете объединить их в первом измерении, используя ; в качестве разделителя в пределах [].

A = [x; y]; 
A.' * G; 

Или вы могли бы объединить их во втором измерении, но гарантировать, что они являются векторы-столбцы первого (с использованием (:)).

A = [x(:), y(:)]; 
A * G; 
+0

Конечно, я вижу ошибку, которую я совершил. Спасибо. –