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

Matlab's subs does not evaluate symbolic Bessel function

我在 Matlab 中使用函数 subs 和内置 besselj:

遇到了一个奇怪的行为
syms x
f = besselj(1,x)
subs(f,1)

returns

besselj(1, 1)

即使文档说明

"subs(s,new) returns a copy of s replacing all occurrences of the default variable in s with new, and then evaluating s.

默认变量由 symvar 定义。

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

我感觉你是想定义一个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 函数和一个符号函数句柄而不是 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) 时 "evaluate" 不是答案的问题的回答...这可能是因为 besselj 函数的性质.因为您使用的是 symvars,所以您使用的是符号数学包的 besselj 函数(与同名的核心包函数相反)。

这意味着当使用 subs 时,符号表达式将显示给命令 window,与显示任何其他符号表达式的方式相同,无需计算 - 即它们可以简化但不要运行其他功能。

这就是为什么您需要 运行 eval,以 评估 简化的符号表达式。