无法在MATLAB中接受匿名函数的输入

时间:2014-08-12 01:43:16

标签: matlab

如果用真实函数替换输入,我的功能正常工作。但是,当我像下面那样更改它时,它会要求我输入大约十次的函数,然后输出答案。

我猜这与从用户接受匿名函数有关吗?我不太清楚发生了什么事。谢谢。这是我的代码:

f = @(x) input('Input a function');
A = [0 2];
z = myBisection(f,A);

x.^2+3.*x-4作为我的f函数,答案为1.001

1 个答案:

答案 0 :(得分:1)

这是因为您没有采用正确的方法来接受来自input的输入。你在f实际做的是你正在创建一个匿名函数,如果你运行它,它会询问你输入用户。如果您实际使用f变量输入此声明,则会发生。如果你输入f()(或者技术上,f可以是任何输入,但是因为匿名函数的输入变量没有用于你如何指定它,我们可以获得在命令提示符下调用此函数,然后按 ENTER 。即使你这样做,这个函数的输出只会存储一个字符串,你需要使用它来创建一个匿名函数。

要解决这个问题,我要做的是使用input将函数存储为字符串。请注意,您需要为input添加第二个参数,这是一个字符串标记's'。如果没有这个,input会期待一个数字,这显然是行不通的。在此之后,使用str2func将其转换为匿名函数,然后运行您的二分法。 str2func接受一个字符串,然后将该字符串转换为实际的MATLAB函数,现在可以将其用于您的目的。通过将您的匿名函数作为字符串接受,您可以将任何您想要的运算符放在心脏的内容中,只要您放置它们的方式在语法上有效即可。此外,确保您的功能是根据x定义的,就像您帖子中的示例一样。

这样做:

funcString = input('Input a function: ', 's'); %// Make sure you specify 's'!
f = str2func(['@(x) ' funcString]);
A = [0 2];
z = myBisection(f, A);

将其放在.m文件中,然后运行此文件。它的行为应该与您期望的一样。