如果我有一个函数f(x,y),我想知道如何定义另一个函数(比如g),其中g(x)= f(x,y),其中y已经预先定义,要么明确定义或作为另一个功能的输入。
我知道这可能很简单,但我的代码似乎不起作用,我在文档中找不到解决方案。
答案 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
声明作为函数的第一行通常是一种很好的做法。