MATLAB中匿名函数的字符串输入
在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
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个)时会发生什么?