Matlab的subs不评估符号贝塞尔函数

时间:2017-07-21 08:09:24

标签: matlab symbolic-math

我在Matlab中遇到了一个使用函数subs和内置besselj的奇怪行为:

syms x
f = besselj(1,x)
subs(f,1)

返回

besselj(1, 1)

即使文档说明

  

subs(s,new)会返回s的副本,将s中所有出现的默认变量替换为新的,然后评估s

默认变量由symvar定义。

所以我希望subs(f,1)的输出为0.4401eval(subs(f,1))生成0.4401的正确输出。有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:2)

我觉得你在尝试定义anonymous function,这里不需要subseval,只需使用f作为实际功能。

% No need to use symbolic math toolbox for x or f 
f = @(x) besselj(1,x);  % Define f as an anonymous function of x
f(1)                    % Evaulate f at a given point, say x = 1
>> ans = 0.4401

旁注:如果由于某种原因你真的开始使用符号变量(这里看起来有点过分)那么你可能只想使用eval函数和符号函数句柄而不是{{1} }。

subs

回答你的问题,为什么syms f(x) % Defines f as a symfun and x as a sym variable f(x) = besselj(1,x); % Define the function eval(f(1)) % Evaluate at x=1 >> ans = 0.4401 在使用subs时没有“评估”答案...这可能是因为subs(f, 1)函数的性质。因为您使用的是symvars,所以您使用的是符号数学包的besselj函数(而不是同名的核心包函数)。

这意味着当使用besselj时,符号表达式将显示在命令窗口中,与显示任何其他符号表达式的方式相同,无需进行评估 - 即它们可以简化< / em>但不要运行其他功能。

这就是您需要运行subs评估简化符号表达式的原因。