MATLAB函数输入的参数过多和缺少参数输入

MATLAB的一些函数,诸如ode45,ode15s,bvp4c等函数,部分输入需要为函数句柄,即@fun的形式,但是经常会出现“参数输入过多”或者“参数输入不足的问题”,主要原因是在于MATLAB自带的函数传递参数机制和规定的问题。

如果在函数输入较为简单的情况下,函数只有一个输入,为function y = fun(x)的形式,此时,可以直接写为@fun的形式,不会报错。
但是有些情况下,调用的函数(即前文提到的函数句柄)输入量较多,如下形式function y = fun(t,x,a,b),此时被调用不能写为@fun的形式,否则会报错,因为fun函数需要的参数没有输入。此时有两种方式解决此问题,第一种是将函数句柄写为@(t,x) fun(t,x,a,b)的形式,表明t,x是不用输入的参数;第二种是写为MATLABFun(@fun,a,b)的形式,来将参数a,b传入函数fun中。

第一种方式称为匿名函数(anonymous functions)方法,第二种方式称为通过尾参数(trailing arguments)传递参数的方式。建议使用第一种方式,因为有一些较新的函数(比如说bvp5c)不支持使用尾参数传递的形式。

参考自MATLAB社区问答

When using ODE45 (or similar functions), what is the benefit of using anonymous functions over passing additional parameters as trailing arguments?

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐