【问题标题】:Trouble accepting input in MATLAB for anonymous functions无法在 MATLAB 中接受匿名函数的输入
【发布时间】:2014-08-12 01:43:16
【问题描述】:

如果用真实函数替换我的输入,我的函数就可以工作了。但是,当我像下面这样更改它时,它要求我输入一个函数大约十次,然后输出答案。

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

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

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    这是因为您没有采用正确的方法来接受来自input 的输入。你实际上对f 所做的是你正在创建一个匿名函数,如果你运行它,它会询问你用户的输入。如果您实际上使用 f 变量原样输入此语句,则 nothing 将发生。只有当你输入f()(或者从技术上讲,f 可以是任何输入,但因为匿名函数的输入变量没有用于你指定它的方式时,才会发生某些事情,我们可以不指定 no输入)在命令提示符下调用此函数,然后按 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 文件中,然后运行这个文件。它的行为应该与您预期的一样。

    【讨论】:

    • 哦,我明白了。所以输入命令不能直接接受函数作为匿名函数。
    • @user3509716 - 正确。它只能接受算术表达式,然后将其转换为数字,或者您必须将输入作为字符串接受,然后将其转换为匿名函数。
    • @raryeng 关于你的修复,我试过了,它返回“未定义的函数或变量'x'”另外,它仍然不断要求我输入几次你知道如何解决这个问题吗?
    • @user3509716 - 你看到我的编辑了吗?我忘记将's' 作为附加参数包含在内。请查看我的编辑。此外,将其直接复制并粘贴到您的 MATLAB 命令提示符中。这应该有效。
    • @user3509716 - 没问题。我现在才注意到我的错误!
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2013-03-05
    相关资源
    最近更新 更多