Matlab的潜艇不计算符号贝塞尔函数

问题描述:

我经历了一个奇怪的现象在Matlab与功能subs和内置besseljMatlab的潜艇不计算符号贝塞尔函数

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

回报

besselj(1, 1) 

即使文档指出

subs(s,new)”返回的副本用新的替换s中所有出现的默认变量,然后评估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(f, 1)subs不“评估”的答案的问题...这可能是因为besselj函数的性质。因为你使用的是symvars,所以你正在使用符号数学包的besselj函数(与核心包函数相反)。

这意味着,当使用subs符号表达式被显示给命令窗口,以同样的方式,任何其它符号表达式被显示,而不需要进行评估 - 即,它们可以是简化但不运行其他功能。

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

+0

感谢您的回答!我正在使用符号变量,因为我让Matlab为我获得它们的衍生物。感谢您指出我实际上可以使用符号函数句柄。 – TheodorBecker

+0

不用担心,很高兴这回答了你的问题:) – Wolfie