编写MATLAB符号函数代入求值函数时触发报错该如何修复
报错原因
- 函数内部声明的
syms x仅在函数的局部作用域生效,你调用f(x^2-x,1)时,表达式x^2-x需要先在当前工作区解析后才会传入函数,此时工作区未定义符号变量x,因此会提前触发未定义报错,问题并不出在函数内部逻辑。
修复方案
你可以根据使用场景选择任意一种方案解决:
方案1:调用前先声明工作区符号变量
无需修改现有函数代码,每次调用前先在当前工作区定义符号变量x即可:
syms x % 先定义工作区的符号x f(x^2-x,1)
运行后可得到正确返回值0。
方案2:修改函数支持字符串表达式输入,无需提前定义符号变量
如果你不想每次调用前都声明符号变量,可以调整函数逻辑,支持直接传入字符串形式的表达式:
function value=f(funct_str,valuex) syms x; % 将输入的字符串转换为符号函数 funct = str2sym(funct_str); value=subs(funct,x,valuex); end
调整后直接传入表达式字符串即可调用,不需要提前定义x:
f('x^2-x',1)
注意事项
如果你提前将符号函数赋值给了变量,调用时也不会触发报错:
syms x my_funct = x^2 - x; f(my_funct, 1)
内容的提问来源于stack exchange,提问作者Ongky Denny Wijaya
相关产品推荐
相关产品推荐

