Input 如何从键盘上读取八度音阶的函数并在以后使用?

Input 如何从键盘上读取八度音阶的函数并在以后使用?,input,octave,Input,Octave,我正在用八度音阶写一个脚本来计算一个球如何在表面上反弹。但是曲面是由一个我必须从用户输入中读取的函数定义的。 我有一句话: funcInput = input("f(x,y) = ", "s") 将我在终端中写入的内容作为字符串保存到“funcInput”变量。到目前为止还不错。现在我需要用脚本中的其他变量替换函数中的“x”和“y”,然后计算函数的根。我不知道怎么做 稍后我要绘制一个曲面,以便: ezsurf(strcat('@(x, y) ', fun

我正在用八度音阶写一个脚本来计算一个球如何在表面上反弹。但是曲面是由一个我必须从用户输入中读取的函数定义的。 我有一句话:

funcInput = input("f(x,y) = ", "s")
将我在终端中写入的内容作为字符串保存到“funcInput”变量。到目前为止还不错。
现在我需要用脚本中的其他变量替换函数中的“x”和“y”,然后计算函数的根。我不知道怎么做

稍后我要绘制一个曲面,以便:

ezsurf(strcat('@(x, y) ', funcInput))
它会产生一个错误

error: isinf: not defined for function handle
我猜此函数不以字符串作为参数,因为当我这样做时:

ezsurf(@(x, y) (x.^2+y.^2)/10')

它就像一个符咒。所以我的问题是:我如何使它工作,或者我可以用什么其他方式从用户那里读取函数并在以后使用它?

您可以使用
eval
方法:

funcInput = input('f(x, y) = ', 's');
eval(['func = @(x, y) (' funcInput ');']);
% Now the variable func is a function handle to the input function from the user
例如:

>> funcInput = input('f(x, y) = ', 's');
f(x, y) = x+4*y^2-2*x*y % user input
>> eval(['func = @(x, y) (' funcInput ');']);
>> func
func =

@(x, y) (x + 4 * y ^ 2 - 2 * x * y)

>> func(2, 3)
ans = 26

希望它会有用

倍频程提供的
str2func
函数正是为了实现这一目的。
(还有与之类似的
inline
函数,但这将导致弃用)

例如:

话虽如此,
ezsurf
确实可以直接从
funcInput
工作。您所做的错误是,您试图将其转换为类似于匿名函数的字符串。不要,直接插入字符串即可:

funcInput = input("f(x,y) = ", "s")
ezsurf( funcInput, [ -10, 10 ] )

非常感谢,它帮助并解决了我的问题。:)听到这个消息我很高兴!
funcInput = input("f(x,y) = ", "s")
ezsurf( funcInput, [ -10, 10 ] )