为什么"pi"在MATLAB中成为象征性的?

use*_*632 2 matlab symbolic-math

在Matlab命令窗口中输入:

syms f;
s = 2*pi*f*j;
s
Run Code Online (Sandbox Code Playgroud)

返回

s =

pi*f*2*j
Run Code Online (Sandbox Code Playgroud)

为什么pi不计算为3.141592 ...?我输入命令窗口的代码出了什么问题?

hor*_*ler 5

欢迎使用符号数学,您可以获得精确答案而不是浮点近似值.如果您只想"获取数字",则可以使用非符号函数和操作,也可以将符号结果转换回浮点数.

例如:

syms f
s = pi*f*2*j
s2 = subs(s,f,2)
s3 = double(s2)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用变量精度算术表示pi符号表达式中指定级别的十进制近似值:

syms f
s = vpa(pi)*f*j
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅文档vpa.您还可以使用该sym功能来实现类似的功能.

但是,如果过早转换为十进制或浮点表示,则可能会失去符号数学的某些功能.例如,比较以下表达式之间的差异:

sin(pi)      % 1.224646799147353e-16
sin(vpa(pi)) % -3.2101083013100396069547145883568e-40
sin(sym(pi)) % 0, sin(sym(1)*pi) and sin(sym(pi,'r')) also return zero
Run Code Online (Sandbox Code Playgroud)

只有最后一个将从表达式中完全取消,从而简化了它.