2013-04-24 284 views
0

我的問題類似於this question,但我相信它更一般。
我用Matlab的符號數學工具箱來求解方程:將符號數學(sym)的輸出轉換爲浮點數

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 - 不包含任何象徵性的表達 - 以浮動,以便我可以稍後在我的代碼中訪問它們?

回答

2

Matlab的符號數學工具箱包含一個名爲double的函數。
該函數將solve函數的結果 - 其是sym - 爲雙:

double(a) 

ans = 

     5.98921078320145 
    0.834834535131742 
1

double雖然是正確的,它被限制爲64位浮點精度。如果需要更高的精度,則使用vpa

>> vpa(a) 

ans = 

    5.9892107832014511063435699584181 
0.83483453513174202459587915406938 

>> digits(99) 

>> vpa(a) 

ans = 

    5.98921078320145110634356995841813862213621375395128614574627036653958858547362556353272837962692249 
0.834834535131742024595879154069378868157531819123064337100994463734092031618244369410214559292265698