“为什么?”;";在MATLAB中成为符号?

“为什么?”;";在MATLAB中成为符号?,matlab,symbolic-math,Matlab,Symbolic Math,在Matlab命令窗口中,输入: syms f; s = 2*pi*f*j; s 返回 s = pi*f*2*j 为什么pi没有计算为3.141592…?我在命令窗口中输入的代码有什么问题?欢迎使用符号数学,在这里您可以得到与浮点近似相反的精确答案。如果您只想“获取一个数字”,您可以使用非符号函数和操作,或者您可以将符号结果转换回浮点值 例如: syms f s = pi*f*2*j s2 = subs(s,f,2) s3 = double(s2) 或者,您可以使用可变精度算术将pi表示

在Matlab命令窗口中,输入:

syms f;
s = 2*pi*f*j;
s
返回

s =

pi*f*2*j

为什么
pi
没有计算为3.141592…?我在命令窗口中输入的代码有什么问题?

欢迎使用符号数学,在这里您可以得到与浮点近似相反的精确答案。如果您只想“获取一个数字”,您可以使用非符号函数和操作,或者您可以将符号结果转换回浮点值

例如:

syms f
s = pi*f*2*j
s2 = subs(s,f,2)
s3 = double(s2)
或者,您可以使用可变精度算术将
pi
表示为符号表达式中指定级别的十进制近似值:

syms f
s = vpa(pi)*f*j
有关更多详细信息,请参阅。您也可以使用该函数来实现类似的事情

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

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

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

因为3.141592不等于π。那么s就是s=π*f*2*j???如果我想将f、pi和get s设置为一个数字呢?确切地说,您应该使用
sym('pi')
,其中pi作为一个符号表达式传递给底层MuPAD引擎进行计算。将数字输入传递到
sym
时,转换浮点数时会出现一定程度的舍入错误(请阅读有关
sym(num,flag)
表单的说明)。默认情况下,
sym(pi)
相当于
sym(pi,'r')
,这种“有理”形式对于涉及pi的表达式是足够的。如果你尝试其他形式(
sym(pi,'d')
sym(pi,'e')
sym(pi,'f')
),你会得到不同的近似值