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.4401
。 eval(subs(f,1))
产生 0.4401
的正确输出。有谁知道为什么会这样吗?
我感觉你是想定义一个anonymous function,这里不需要subs
或eval
,只需使用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
,以 评估 简化的符号表达式。
我在 Matlab 中使用函数 subs
和内置 besselj
:
syms x
f = besselj(1,x)
subs(f,1)
returns
besselj(1, 1)
即使文档说明
"
subs(s,new)
returns a copy ofs
replacing all occurrences of the default variable ins
with new, and then evaluatings
.
默认变量由 symvar 定义。
所以我希望 subs(f,1)
的输出是 0.4401
。 eval(subs(f,1))
产生 0.4401
的正确输出。有谁知道为什么会这样吗?
我感觉你是想定义一个anonymous function,这里不需要subs
或eval
,只需使用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
,以 评估 简化的符号表达式。