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

猜你喜欢

转载自blog.csdn.net/StefanCharlie/article/details/83038298
今日推荐