Matlab 将输出从符号数学(sym)转换为浮点

Matlab 将输出从符号数学(sym)转换为浮点,matlab,double,symbolic-math,Matlab,Double,Symbolic Math,我的问题与类似,但我认为更一般。 我使用Matlab的符号数学工具箱来解一个方程: MAZ = 0.5; MAU = 1.0; XI = 1.0; ALPHA = 2.0; DRG = 0.5; SRG = 1.0; PHI = 1 / (2 * MAU); syms L; f = 1 - DRG - sqrt(1 + (ALPHA * XI - L / (2 * XI * PHI) ) ^ 2 ) / ... sqrt(1 + (ALPHA * XI) ^ 2) + L / (

我的问题与类似,但我认为更一般。
我使用Matlab的符号数学工具箱来解一个方程:

MAZ = 0.5;
MAU = 1.0;
XI = 1.0;
ALPHA = 2.0;

DRG = 0.5;
SRG = 1.0;

PHI = 1 / (2 * MAU);

syms L;

f = 1 - DRG - sqrt(1 + (ALPHA * XI - L / (2 * XI * PHI) ) ^ 2 ) / ...
    sqrt(1 + (ALPHA * XI) ^ 2) + L / (4 * PHI * SRG * sqrt(1 + (ALPHA * XI)^2));

a = solve(f,L,'Real',true);
答案是:

a =
5^(1/2)/3 + (10*((4*5^(1/2))/25 + 6/25)^(1/2))/3 + 8/3
5^(1/2)/3 - (10*((4*5^(1/2))/25 + 6/25)^(1/2))/3 + 8/3  

如何将
a
的这些表达式(不包含任何符号表达式)自动转换为浮点数,以便稍后在代码中访问它们?

Matlab的符号数学工具箱包含一个名为的函数。
此函数将
solve
函数(即
sym
)的结果转换为双精度:

double(a)

ans =

      5.98921078320145
     0.834834535131742

Matlab的符号数学工具箱包含一个名为的函数。
此函数将
solve
函数(即
sym
)的结果转换为双精度:

double(a)

ans =

      5.98921078320145
     0.834834535131742

虽然
double
是正确的,但它仅限于64位浮点的精度。如果需要更高的精度,请使用
vpa

>> vpa(a)

ans =

  5.9892107832014511063435699584181
 0.83483453513174202459587915406938

>> digits(99)

>> vpa(a)

ans =

  5.98921078320145110634356995841813862213621375395128614574627036653958858547362556353272837962692249
 0.834834535131742024595879154069378868157531819123064337100994463734092031618244369410214559292265698

虽然
double
是正确的,但它仅限于64位浮点的精度。如果需要更高的精度,请使用
vpa

>> vpa(a)

ans =

  5.9892107832014511063435699584181
 0.83483453513174202459587915406938

>> digits(99)

>> vpa(a)

ans =

  5.98921078320145110634356995841813862213621375395128614574627036653958858547362556353272837962692249
 0.834834535131742024595879154069378868157531819123064337100994463734092031618244369410214559292265698