1. 程式人生 > >matlab知識整理(二)

matlab知識整理(二)

3、迴圈結構

For迴圈

在for和end語句之間的{commands}按陣列中的每一列執行一次。在每一次迭代中,x被指定為陣列的下一列,即在第n次迴圈中,x=array(:, n)。

>> x = zeros(2,6); % x是一個16的零矩陣
>> for i = 1:6,
x(i)=i;
end
>> x
x =
     1     3     5     0     0     0
     2     4     6     0     0     0
>> for n=1:10,
x(n)=sin(n*pi/10);
end

當有一個等效的陣列方法來解給定的問題時,應避免用For迴圈。例如,上面的例子可被重寫為

>>n=1:10;
>>x=sin(n*pi/10)

第二種方式執行速度更快。

為了得到最大的速度,在For迴圈(While迴圈)被執行之前,應預先分配陣列。

While迴圈
>> x = zeros(2,6); % x是一個16的零矩陣
>> i = 1;
>> while i <= 12,
x(i) = i;
i = i+1;
end
>> x
x =
     1     3     5     7     9    11
     2     4     6     8    10    12

4、控制結構

if-else判斷

a = input('請輸入係數a:');
b = input('請輸入係數b:');
c = input('請輸入係數c:');
delt = b^2-4*a*c;
if (delt>0)
    fprintf('該方程有兩個不同實根:\n');
    x1=(-b+sqrt(delt))/(2*a);
    x2=(-b-sqrt(delt))/(2*a);
    fprintf('x1=%f \t x2=%f\n',x1,x2);
elseif(delt==0)
    fprintf('該方程有兩個相同實根:\n');
    x1=-b/(2*a);
    fprintf('x1=x2=%f\n',x1);
else
    fprintf('該方程有兩個不同複數根:\n');
    realpart=-b/(2*a);
    imagepart=sqrt(abs(delt))/(2*a);
    fprintf('x1=%f+%fi \t x2=%f-%fi\n',realpart,imagepart,realpart,imagepart);
end