如果用真实函数替换输入,我的功能正常工作。但是,当我像下面那样更改它时,它会要求我输入大约十次的函数,然后输出答案。
我猜这与从用户接受匿名函数有关吗?我不太清楚发生了什么事。谢谢。这是我的代码:
f = @(x) input('Input a function');
A = [0 2];
z = myBisection(f,A);
将x.^2+3.*x-4
作为我的f
函数,答案为1.001
答案 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
文件中,然后运行此文件。它的行为应该与您期望的一样。