MATLAB入門學習-#5-M文件(MATLAB)程序基礎

MATLAB入門學習-#5-M文件(MATLAB)程序基礎

正式開始之前,先來兩個學習中學到的小TIP:
1.matlab程序中,中括號內容一般都是可以省略的東西。
2.註釋快捷鍵Ctrl+2,取消註釋快捷鍵Ctrl+T

1.was ist M文件…

M文件就是MATLAB裏的程序文件,然後呢可以分成腳本文件Script File(也叫命令文件)和程序文件Function File這兩種。

  • 區別

1.命令文件沒有輸入,沒有返回;
2.命令文件可以對工作空間的變量操作,結果返回工作空間,而函數文件中的變量爲局部變量,函數執行完畢,變量被清除;
3.命令文件可以直接運行,函數文件見需要調用的形式運行(除了特殊的函數文件之外)。

2.程序控制結構

  • 數據輸入input:

This MATLAB function displays the prompt string(提示語) on the screen, waits for input
from the keyboard, evaluates any expressions in the input, and returns the
result.

result = input(prompt)
str = input(prompt,'s')
  • 數據顯示disp:(除此之外還有fprintf和sprintf)

disp這個命令用起來還是挺有意思的,但是基本上要輸出的東西里既有確定的字符串又有不確定的變量,那還是把它們的數據類型都轉成str,然後用例如**disp([‘str1’,‘str2’,num2str(a)])**這樣的來進行輸出。
下面是我使用時候的一些發現:

>> a=1996;
>> disp a      %這樣不帶括號的話就是輸出a這個str
a
>> disp(a)     %帶括號就是輸出變量a的內容,這個不限是數值型還是str
        1996

>> disp('hello')
hello
>> disp('hello',a)
錯誤使用 disp
輸入參數太多。
 
>> disp(['hello',a])
helloߌ
>> disp(['hello'],a)
錯誤使用 disp
輸入參數太多。
 
>> disp(['hello',num2str(a)])    %實際上把這種和下面那種記住就OK
hello1996
>> name=chang;
未定義函數或變量 'chang'。
 
>> name='chang';
>> disp(['hello ',name])
hello chang
  • 程序暫停pause
  • 分支結構

pls use IF or SWITCH or TRY

  • 循環結構

pls use WHILE or FOR

循環可以嵌套,但是在MATLAB中,循環的執行效率很低(爲什麼?)因此應該儘量避免使用循環,更要避免使用兩重以上的循環(根據自己的使用經驗,三重循環執行起來就已經非常慢了!)
怎樣避免使用循環和提高循環效率?
有些可以通過MATLAB的矢量化語言,通過矩陣或者向量操作完成;
有些可以通過MATLAB提供的一些特殊操作工具箱函數完成;
預分配的使用,會大大增加循環效率;

% 單分支條件
A = input('input A');
if A > 10
    disp(A);
end

% 雙分支if語句
x = input('x');
if x > 10
    y = log(x);
else
    y = cos(x);
end

% 多分支if語句
c = input('input a character', 's');
if c >= 'A' & c <= 'Z'
    disp(char(abs(c) + abs('a') - abs('A')));
    %abs(X)是求絕對值的,同時也能實現str到ASCII的轉換
    %abs(X)=sqrt(real(X).^2+imag(X).^2)
    %char能把ASCII碼轉回str,是一個和abs對應的命令
elseif c >= 'a' & c <= 'z'
    disp(char(abs(c) - abs('a') + abs('A')));
elseif c >= '0' & c <= '9'
    disp(c);
end

% switch分支
price = input('input price');
switch fix(price/100)    %fix是個四捨五入的命令
    case {0, 1}
        rate = 0;
    case {2, 3, 4}
        rate = 0.03;
    case {5, 6, 7, 8, 9}
        rate = 0.05;
    otherwise
        rate = 0.1;
end

% for循環
A = 1:100;
sumA = 0;
for k = 1:100
    sumA = sumA + A(k);
end

% while循環
while 1
    c = input('input a character', 's');
    if isempty(abs(c))     %isempty - 確定數組是否爲空,是空的返回1.
        break;
    end
end

3.函數文件!

在這裏插入圖片描述

此部分需要注意的是函數的基本結構和解決未知個數輸入和未知個數輸出的nargin,nargout,varargin,varargout,nargchk這幾個命令。
其實不難理解,用下面這一個代碼實例就可以解決了:

function re = add_var(a, b, varargin) 
%varargin代表不知道有幾個的變量輸入
% 這個實例裏面,varargin前面還有a和b
% 所以它的nargin其實等於2+varargin的個數
% (這個部分會 顯示在help add_var裏面)

error(nargchk(2, 4, nargin));
%nargcheck(min,max,num)就是看num在不在min和max之間
%判斷完若是不在範圍內會有信息告知輸出,在範圍內的話就輸出一個空矩陣
%error([])就什麼都不會發生
%error('str')則會報錯,同時顯示str
if nargin == 2
    re = a + b;
elseif nargin == 3
    c = varargin{1};
    re = a + b + c;
elseif nargin == 4
    c = varargin{1};
    d = varargin{2};
    re = a + b + c + d;
else
    error('wrong');
end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章