2016-05-02 39 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)から始まります。内部行列の次元がエラーに同意しなければなりません。 Matrix A [x、y]にMatrix Gを乗算するにはどうすればよいですか?Matlab Matrix Rotation、Dimensions

答えて

1

あなたが実際にAの大きさを見れば、あなたはあなたが期待していると思われるように、それは2 x 101されるのではなくそれを実現するだろう、次の文

A = [x, y]; 

が実際にそれ明らかにすることができます1 x 202ます回転行列(G)を2 x 2と乗算します。

これは、xyが両方とも行ベクトルであり、2番目の次元([ , ]を使用)に沿ってそれらを連結すると、それらがさらに長い行ベクトルになるためです。代わりに[]の区切り文字として;を使用して、最初のディメンションでそれらを連結することができます。

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

それとも、二次元でそれらを連結しかし、彼らは((:)を使用して)最初の列ベクトルであることを確認できました。

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

私は間違いを犯しました。ありがとうございました。 –