MATLAB:根据另一个函数定义函数

时间:2018-01-09 01:19:49

标签: matlab

如果我有一个函数f(x,y),我想知道如何定义另一个函数(比如g),其中g(x)= f(x,y),其中y已经预先定义,要么明确定义或作为另一个功能的输入。

我知道这可能很简单,但我的代码似乎不起作用,我在文档中找不到解决方案。

2 个答案:

答案 0 :(得分:1)

f = @(a,b) a^2 + b^2;
y = 4;
g = @(x) f(x,y);
g(2)

ans = 20

答案 1 :(得分:1)

您可能正在寻找anonymous functions

一个非常常见的用例是最小化。您经常需要在单个参数中最小化多个变量的函数。这使您无需为其余参数传入常量。

g的匿名定义如下所示:

g = @(x) f(x, y)

y必须是当前工作空间中定义的变量。 y的值永久绑定到函数。无论您是clear y还是为其指定了不同的值,y中使用的g的值都将是您第一次创建function handle时的值。

另一个,现在删除,回答提到,您可以使用更加丑陋的方法来使用global变量。

缺点是您的代码难以阅读和维护。变量的值可以在许多地方改变。最后,在nested functions这样的MATLAB的现代版本中,有更好的方法可以实现,即使匿名函数由于某种原因不适合你。

优点是你可以使g成为一个简单的独立功能。与匿名版本不同,如果更改基础工作区中y的值,则会得到不同的结果,只需注意不要清除它。

使用全局变量要记住的主要事项是,希望共享值的每个函数/工作空间必须声明全局名称(在分配给它之前以避免警告)。

在基础工作区中:

global y
y = ...

g.m

function [z] = g(x)

global y;
z = f(x, y);

我并不是特别推荐这种技巧,但如果您无法将g表达为单一陈述,则有助于了解它。

关于警告的说明。匿名函数和全局变量都会警告您分配给已存在的变量。这就是为什么将global声明作为函数的第一行通常是一种很好的做法。