Matlab常用的知识点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laoxuan2011/article/details/52679054

Matlab常用的知识点

说明
本文通过网上资料,对matlab一些非常有用的知识点进行总结。

matlab结构体

  • 1使用直接引用方式定义结构
    建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。
    【例】 温室数据(包括温室名、容量、温度、湿度等)的创建与显示。

    green_house.name = '一号温室'; % 创建温室名字段 
    green_house.volume = '2000立方米'; % 创建温室容量字段
    green_house.parameter.temperature = [31.2 30.4 31.6 28.7 % 创建温室温度字段
    29.7 31.1 30.9 29.6];
    green_house.parameter.humidity = [62.1 59.5 57.7 61.5; % 创建温室湿度字段
    
  • 使用struct函数创建结构

     s = sturct('field1',values1,'field2',values2,…);
    

    该函数将生成一个具有指定字段名和相应数据的结构数组, 其包含的数据values1、valuese2等必须为具有相同维数的数据,数据的存放位置域其他结构位置一一对应的。

varargin

“Variable length input argument list”,varargin 提供了一种函数可变参数列表机制。
就是说, 使用了 “可变参数列表机制” 的函数允许调用者调用该函数时 根据需要改变输入参数 的个数。

function test(varargin)
disp(['nargin is ' num2str(nargin)]);
for v=1:numel(varargin)
  disp( [ 'varargin{' num2str(v) '} class is '      class(varargin{v}) ] ) ;
end

输出测试:

>> test()
nargin is 0
>> test(1,'a',uint8(32),'123456')
nargin is 4
varargin{1} class is double
varargin{2} class is char
varargin{3} class is uint8
varargin{4} class is char

表示用户输入了4个参数,第一个是double类型,第二个是char类型,第三个是uint8类型,第四个也是char类型。

也就是说,只要把函数的参数列表的最后一个参数写成varargin,就可以在函数内部以访问cell数组的方式来获取可变参数的信息。

nargin

nargin为“number of input arguments” 的缩写。 在matlab中定义一个函数时, 在函数体内部, nargin是用来判断输入变量个数的函数。

nargout

  函数功能: 返回输出参数数量。

  在函数内部使用时,nargin 和 nargout分别表明有输入和输出参数数量。若在函数外部使用, nargin 和nargout对给定的函数,表明输入和输出参数数量

numel 元素总数

size:获取数组的行数和列数
length:数组长度(即行数或列数中的较大值)
numel:元素总数。
n=numel(A)该语句返回数组中元素的总数。
n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数组,则返回0;如果A是一个向量则返回A的长度。
[r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。

函数句柄

函数句柄(function handle)是MATLAB中的一类特殊的数据结构,它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++),或者函数引用(Perl)。作用是将一个函数封装成一个变量,使其能够像其它变量一样在程序的不同部分传递。

%%%%%%%%% 函数句柄的创建 %%%%%%%%%%%
% 方式1 : 直接加@
% 语法:@函数名
fun1 = @sin;

% 方式2 : str2func函数
% 语法:str2fun('函数名')
fun2 = str2func('cos');

% 方式3 : 匿名函数
% 语法:@(参数列表)单行表达式
fun3 = @(x, y)x.^2 + y.^2; 

这里主要介绍将函数句柄作为函数参数
函数句柄是函数的数据抽象,能够作为其它函数的参数。善用它,将让程序更加优雅并具有更强的灵活性。
下面看代码,举个排序的例子:
目标:为一列未知类型的数组提供自定义的排序规则。
下面我将实现一个函数super_sort,接收两个参数,第一个参数为待排序的数组,第二个参数是一个对原始数据的变换函数。super_sort能够对原始数据按照变换后的结果进行排序,并返回排好序的原始数据。

%文件名:super_sort.m
%参数fh为函数句柄参数
function sorted = super_sort(arr, fh)
transformed = fh(arr);% 对原始数组进行变换
[~, index] = sort(transformed); % 获得排序后的原数组位置索引
sorted = arr(index); % 返回排序后的原数组
end

测试程序:

arr = round(randn(8, 1) * 10);
% 将arr按照其绝对值大小排序
super_sort(arr, @abs)
% 将arr按照sin(x)的结果排序
super_sort(arr, @sin)

猜你喜欢

转载自blog.csdn.net/laoxuan2011/article/details/52679054
今日推荐