函数,函数,以及函数但是Matlab

文章介绍了数学中的函数概念,包括一元和多元函数,并提到在编程语言中的体现,尤其是Matlab中的函数定义和句柄使用。Matlab支持函数作为参数传递,具有函数式编程特性。同时,文章讨论了符号函数和表达式在Matlab中的处理方式。
摘要由CSDN通过智能技术生成

数学函数

函数描述因变量和自变量之间的映射关系。根据自变量的个数,可以分为多元函数和一元函数。

一元函数,忽略那些关于定义域空间特性的数学考量,简单可以写成:
x ↦ y x \mapsto y xy

多元函数可以定义为一元函数的叠加。唯一的区别是,从 x 1 x_1 x1并不是映射到一个值,而是映射到一个映射 x 2 ↦ y x_2 \mapsto y x2y。这个概念在函数编程语言(Haskell等)中有很好的表达。
( x 1 , x 2 ) ↦ y ≡ x 1 ↦ x 2 ↦ y (x_1, x_2) \mapsto y \equiv x_1 \mapsto x_2 \mapsto y (x1,x2)yx1x2y

总而言之,对于工程搬砖狗而言,给出几个数,总是可以得到一个数,这就是函数。

在不同的编程语言中,函数编程语言还是面向对象语言,函数总是一个很早就要学习的内容。比如C语言总会有一个:

int main(int argn, char**args){
   printf("Hello world!\n");
   return 0;
}

这也是一个函数,从一个整数、一组字符串映射到一个整数。只不过,C语言的函数的效果并不只是输出的那个值,通常还在于函数操作内存的过程。

对于函数式编程语言,例如Matlab,通常期待大部分函数只是做映射,函数参数 ↦ \mapsto 函数输出。有些更严格的函数式编程,对于有副作用的函数还必须特别申明。

符号函数

对于一个函数,数学入门但是没有完全入门的总喜欢把下面的形式称为函数:
y = sin ⁡ ( x ) + cos ⁡ ( x ) y = \sin(x) + \cos(x) y=sin(x)+cos(x)

这是一个有表达式的函数,有些编程语言中,例如Julia

y(x) = sin(x) + cos(x)

这是很合理的语法。

在Maple、Mathematics、Matlab等软件中,可以定义:

syms x 
y = sin(x) + cos(x)

这就定义一个符号变量x,一个符号表达式y。还能通过

double(subs(y, x, 0.1))

求得函数在0.1处的值(以浮点数的形式)。

实际上,这个功能还是很强大的,能够推导公式,进行积分、微分。

但是这个符号表达式、符号变量,并不是Matlab的函数。

函数,但是Matlab

Matlab类似于一个计算器,虽然新的版本添加了一大堆面向对象、面向连接的编程方式,但是编个函数始终是其核心工作。而且,在Matlab中,函数可以作为句柄赋值,并且可以作为函数的参数和返回值。从这个意义上,Matlab是一个函数式编程语言。

Matlab定义函数有两个方式:

  1. function关键词
  2. @标记

function关键词

function [ret1, ret2] = f(arg1, arg2)
% 
%
ret1 = ....
ret2 = ...
end

函数可以定义在函数内部,函数现在甚至能定义在脚本里面。但是最好的方式还是一个函数一个文件。当在一个单独的文件中定义一个函数时,最后的那个end可以省略。

@标记

这个标记有两个作用:

  1. 把函数编程函数句柄,FUNHANDLE=@FUNCTION_NAME;
  2. 定义匿名函数,返回句柄:FUNHANDLE=@(ARG1, ARG2)EXPRESSION;

通过这两种方式得到的函数句柄,可以作为参数传入其它函数,也能够作为返回值。

可以通过isa来判断h是否是一个函数句柄:

function trigPlot(h, val)
if isa(h, 'function_handle')
   A = h(a);
   plot(A)
end

在Matlab的海量工具箱里面,需要传入函数句柄参数的不可胜数。比如数值微分、数值积分、优化等,都需要自己定义函数,把句柄传入相应的函数进行计算。

总结

  1. 数学函数是映射;
  2. 数学表达式是一种函数定义方式;
  3. Matlab有一个数据类型叫function_handle。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大福是小强

除非你钱多烧得慌……

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值