MATLAB定义函数
1. 常见问题
与主流高级语言的区别
MATLAB没有函数指针这种玩意
所以MATLAB中定义函数必须在.m文件中定义, 不能跟主脚本定义在一起
比如下面这样是不允许的
% nonlcon函数定义
function [g, h] = nonlcon(x)
g = [-x(1)^2 + x(2) - x(3)^2, x(1) + x(2)^2 + x(3)^2 - 20];
h = [-x(1) - x(2)^2 + 2, x(2) + 2 * x(3)^2 - 3];
end
% fun函数定义
function res = fun(x)
res = sum(x.^2) + 8;
end
[x, fval] = fmincon('fun', rand(3, 1), [], [], [], [], zeros(3, 1), [], 'nonlcon', [])
会报错 “Function might be unused”
解决办法
MATLAB只支持在.m文件中定义函数
创建.m文件, File->New->Function
创建一个新的文件
在文件中定义函数
2. 如何定义
MATLAB只支持在.m文件中定义函数
首先创建.m文件, File->New->Function
创建一个新的文件
2.1语法
function 返回值 = 函数名(参数)
函数体
end
2.2举例
function [g, h] = nonlcon(x)
g = [-x(1)^2 + x(2) - x(3)^2, x(1) + x(2)^2 + x(3)^2 - 20];
h = [-x(1) - x(2)^2 + 2, x(2) + 2 * x(3)^2 - 3];
end
- 返回值[g, h]
- 函数名nonlcon
- 参数可以多个, 这里参数是x
3. 如何使用
记得把定义的函数保存并且跟主脚本放在一个目录, 或者添加到路径
3.1 得到返回值
假设函数名为fun
且已经定义
res = fun(x)
3.2 将定义的函数作为参数传递给其他函数(函数指针)
假设函数名为fun
且已经定义
另一个函数func
需要将函数 fun
作为参数传递进去
res = func('fun') % 用字符串的形式引用函数名作为参数