MATLAB入門基礎

預約義變量

>> format short e
>> RMAd = realmax('double')  %雙精度類型默認最大實數

RMAd =

  1.7977e+308

>> RMAs = realmax('single')  %單精度類型最大實數

RMAs =

  3.4028e+38
>> IMA64 = intmax('int64')   %int64整數類型最大正整數

IMA64 =

  9223372036854775807

>> IMA32 = intmax   %int32整數類型最大正整數

IMA32 =

  2147483647

>> IMA32 = intmax('int16') %int16整數類型最大正整數

IMA32 =

  32767
>> e1 =eps %雙精度類型相對精度

e1 =

   2.2204e-16

>> e2 = eps(2) %表達2時的相對精度

e2 =

   4.4409e-16  
>> pi

ans =

   3.1416e+00

面向複數設計的運算

>> z3 = 2*exp(i*pi/6);%運算符構成的極座標表示法
>> z1 = 4+3i;%運算符構成的直角座標表示法
>> z2 = 1+2*i;
>> z = z1*z2/z3;
>> z1

z1 =

   4.0000e+00 + 3.0000e+00i

>> z2

z2 =

   1.0000e+00 + 2.0000e+00i

>> z3

z3 =

   1.7321e+00 + 1.0000e+00i

>> z

z =

   1.8840e+00 + 5.2631e+00i

>> real_z = real(z)

real_z =

   1.8840e+00

>> image_z=imag(z)

image_z =

   5.2631e+00

>> magnitude_z = abs(z)

magnitude_z =

   5.5902e+00

>> angle_z_radian = angle(z)%弧度單位

angle_z_radian =

   1.2271e+00

>> angle_z_degree = angle(z)*180/pi%度數單位

angle_z_degree =

   7.0305e+01
>> z1 = 4+3*i; %指令後採用分號,使得運算結果不顯示
>> z2= 1+2*i;
>> z12 = z1+z2;
>> clf,hold on %clf清空圖形窗口,逗號用來分隔兩個指令
>> plot([0,z1,z12],'-b','LineWidth',3)
>> plot([0,z12],'-r','LineWidth',3)
>> plot([z1,z12],'ob','MarkerSize',8)
>> hold off, grid on
>> axis equal
>> axis([0,6,0,6])
>> text(3.5,2.3,'z1')
>> text(5,4.5,'z2')
>> text(2.5,3.5,'z12')
>> xlabel('real')
>> ylabel('image')
>> shg

求一個數的3次方根
shell

>> a = -8;
>> r_a = a^(1/3)

r_a =

   1.0000e+00 + 1.7321e+00i

>> p=[1,0,0,-a];%先構建一個多項式p(r)=r^3-a,p是多項式的係數向量
                %指令末尾的英文狀態分號使得該指令運行後不顯示結果
>> R = roots(p)

R =

  -2.0000e+00 + 0.0000e+00i
   1.0000e+00 + 1.7321e+00i
   1.0000e+00 - 1.7321e+00i
>>  t = 0:pi/20:2*pi;
>>  MR = abs(R(1))%計算複數根的模
>> x = MR*sin(t);
>> y = MR*cos(t);
>>  plot(x,y,'b:'),grid on
>>  hold on
>>  plot(R(2),'.','MarkerSize',30,'Color','r')
>>  plot(R([1,3]),'o','MarkerSize',15,'Color','b')
>> axis([-3,3,-3,3]),axis square %保證屏幕顯示真圓
>> hold off

面向數組設計的運算

>> AR = [1,3;2,4]

AR =

     1     3
     2     4
>> AI = [5,7    %回車用來分隔數組中的行
6,8]

AI =

     5     7
     6     8    
>> AR = [1,3;2,4];
>> AI = [5,7;6,8];
>> A = AR - AI*i
A =
   1.0000 - 5.0000i   3.0000 - 7.0000i
   2.0000 - 6.0000i   4.0000 - 8.0000i
>> A_real = real(A)
A_real =
     1     3
     2     4
>> A_image = imag(A)
A_image =
    -5    -7
    -6    -8 
>> for m =1:2 %循環法計算複數矩陣中各個元素的模和幅角
for n = 1:2
Am1(m,n)= abs(A(m,n));
Aa1(m,n) = angle(A(m,n))*180/pi;
end
end
>> Am2 = abs(A)%直接法求複數矩陣的各個元素的模和幅角
Am2 =
    5.0990    7.6158
    6.3246    8.9443
>> Aa2 = angle(A)*180/pi
Aa2 =
  -78.6901  -66.8014
  -71.5651  -63.4349

real,imag,abs,angle是同時、並行做用於數組的每一個元素的,對4個元素的運算所需的時間大體與對單個元素所需的時間相同。這有利於運行速度的提升。這是向量化運算的一種形式。循環法求各個元素的模和幅角的指令不是頗有效的計算方法。對於MATLAB以外的許多編程語言來講,應該儘可能摒棄循環處理,採用向量化的處理方式。編程

對於衰減振盪曲線y = e^(-t/3)*sin(3t),t= [0,4pi]數組

>> t = 0:pi/50:4*pi;%定義自變量t的取值數組
>> y = exp(-t/3).*sin(3*t);%計算與自變量相應的y數組,注意乘法運算符前面的小黑點
>> plot(t,y,'-r','LineWidth',2)%繪製曲線
>> axis([0,4*pi,-1,1])
>> xlabel('t'),ylabel('y')

.*符號表示的是在兩個數組的相同位置上的元素之間進行的乘法運算。即「數組乘」。數組乘的引入不但使得程序顯得簡潔天然,並且避免了耗費機器時間的循環運算。應當儘量的像第二條指令那樣採用「向量化」的運算形式。編程語言

>> B = [3+2i,2+6i;5+3*i,4-2*i]%複數數組的輸入方式
B =
   3.0000 + 2.0000i   2.0000 + 6.0000i
   5.0000 + 3.0000i   4.0000 - 2.0000i
>> C = A * B                  %矩陣乘法
C =
  49.0000 -39.0000i  30.0000 -38.0000i
  62.0000 -42.0000i  40.0000 -40.0000i

當數組具有變換的屬性時,二維數組就被稱爲矩陣。當兩個矩陣的「內維大小相等」時,矩陣乘法才能進行。矩陣A的列數和矩陣B的行數相等,因此能夠進行A乘以B的運算。在MATLAB中,矩陣相乘和標量相乘的格式同樣,而在其餘的編程語言中,矩陣的乘法不得不依賴循環進行。MATLAB的設計者之因此可以把矩陣運算表達的像「線性代數」那樣簡潔易讀,天然流暢,是由於MATLAB設計者採用了「面向對象」的編程技術。spa

相關文章
相關標籤/搜索