Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB中匿名函数的字符串输入_Matlab_Function - Fatal编程技术网

MATLAB中匿名函数的字符串输入

MATLAB中匿名函数的字符串输入,matlab,function,Matlab,Function,在matlab中,我知道我可以使用str2func将字符串转换为匿名函数。 比如, s= '@(x) x.^2'; h= str2func(s); h(2) would be 4 但是如果我不知道未知的数字呢?假设这个程序的用户将输入许多函数来获得系统的数值解。当用户输入x^2时,我应该在其开头添加@(x),然后将其转换为函数。但在编程时,我不知道用户将输入多少函数,其中有多少未知函数@(x)可能应该是@(x,y)以及@(x,y,z)。如果用户输入未知数,我如何在运行时创建并添加必要的前缀 p

在matlab中,我知道我可以使用
str2func
将字符串转换为匿名函数。 比如,

s= '@(x) x.^2';
h= str2func(s);
h(2) would be 4
但是如果我不知道未知的数字呢?假设这个程序的用户将输入许多函数来获得系统的数值解。当用户输入
x^2
时,我应该在其开头添加
@(x)
,然后将其转换为函数。但在编程时,我不知道用户将输入多少函数,其中有多少未知函数<代码>@(x)可能应该是
@(x,y)
以及
@(x,y,z)
。如果用户输入未知数,我如何在运行时创建并添加必要的前缀

ps:未知数可以是任何整数。

  • 您不仅需要知道变量的数量,还需要知道它们的名称和顺序。表达式可以读取
    x(c)
    。即使您知道表达式中有两个变量,并且能够解析出
    x
    c
    ,您也无法判断用户是否打算定义类似
    @(x,c)x(c)
    @(c,x)x(c)
    ,甚至类似
    @(c,d)x(c)
    的内容,其中
    x
    实际上是一个函数
  • 解析表达式只是为了得到它们使用的名称,这是不必做的事情
  • 限制允许的变量名可能会很混乱。如果用户希望使用MATLAB语法,而您使用MATLAB进行解析,为什么要让您的生活更艰难?此外,当您引入一个限制(如仅限一个字母的变量名)时,您必须问问自己是否会出现需要超过27个变量的情况

让用户在函数之前列出他们计划使用的变量的名称会更安全,例如
(x,y,pi)pi*(x^2+y)
。现在,您所要做的就是预先编写
@
,而不必担心
pi
是内置的还是参数。在我看来,这个符号非常清晰。

问题不仅仅是检测用户输入了多少变量;您还需要检测它们的名称。有什么模式吗?用户是否可以输入类似于
cos(x)
的内容?变量名可以有多个字母吗?@ssovukluk。变量名非常重要。你最好不要在
@(x)
前面加上
y.^2
。这就是为什么对于用户来说,首先指定他们想要使用的名称要干净得多。也许您应该在
@
前面加上前缀。变量的顺序很重要
@(x,y)x.^y
@(y,x)x.^y
非常不同,我会使用
regexp
和一些
sprintf
。但是你如何判断用户所说的
x^2+y^3
是指
@(x,y)x^2+y^3
还是
@(y,x)x^2+y^3
?它们是不同的函数当你有一个27个变量的多项式(或者如果你数下划线的话是28个)时会发生什么?