2014-03-06 67 views
1

假設在求解某個方程後需要選擇真實的解。什麼是選擇真實解決方案的正確方法?

這是做到這一點的正確和最佳方式,還是有更好的方法呢?

restart; 
mu := 3.986*10^5; T:= 8*60*60: 
eq := T = 2*Pi*sqrt(a^3/mu): 
sol := solve(eq,a); 

select(x->type(x,'realcons'),[sol]); 

我找不到real作爲類型。所以我用realcons。起初,我這樣做:

select(x->not(type(x,'complex')),[sol]); 

,沒有有楓5工作,因爲被認爲是complex!所以最終沒有解決方案。

type(5,'complex'); 
(* true *) 

另外我找不到isreal()函數類型。 (除非我錯過了)

有沒有更好的方法來做到這一點,應該使用?

更新: 要回答下面的評論約5不應該在楓樹複雜。

restart; 
type(5,complex); 
           true 
type(5,'complex'); 
           true 

interface(version); 
Standard Worksheet Interface, Maple 18.00, Windows 7, February 

從幫助

回答

2

您的解決方案sol都屬於complex(numeric)。您只能選擇與type,numeric即真實的。

restart;       
mu := 3.986*10^5: T:= 8*60*60: 
eq := T = 2*Pi*sqrt(a^3/mu): 
sol := solve(eq,a);    

     20307.39319, -10153.69659 + 17586.71839 I, -10153.69659 - 17586.71839 I 


select(type, [sol], numeric); 

          [20307.39319] 

通過使用多個參數調用select命令,我們可以在這裏避免使用運營商定製作爲第一個參數的形式。你不會注意到你的小例子,但它應該更有效率。其他命令(如map)的表現相似,以避免必須爲每個單獨的測試進行額外的函數調用。

numericcomplex(numeric)類型涵蓋真實和複雜的整數,有理數和浮點數。

realconscomplex(realcons)類型包括以前,但也允許在測試過程中完成應用evalf。因此Int(sin(x),x=1..3)Pisqrt(2)都是realcons型,因爲在應用evalf之後,它們變成numeric類型的浮子。

以上是關於類型。還有屬性需要考慮。類型是屬性,但不一定相反。有一個real屬性,但沒有real類型。 is命令可以測試一個屬性,雖然它經常用於假設下(符號上)的混合數字符號測試,但它也可以用於像您一樣的測試。

select(is, [sol], real); 

          [20307.39319] 

在您的示例中使用is效率較低。如果你知道你有一些(可能是非真實的)浮標,那麼type,numeric應該是一個有效的測試。

而且,只是爲了渾水...有一種類型nonreal

remove(type, [sol], nonreal); 

          [20307.39319] 
+0

我覺得'是'比較好。當我嘗試時:'r1:= Pi,-1 + 2 * I,-1-2 * I;'然後'select(type,[r1],numeric);'沒有選擇'Pi'。但是'選擇(是,[r1],真實);'做了。而且,因爲我基本上在尋找一種方法來從列表中選擇所有值或設置不復雜的值。因此,''''與'real'似乎是比使用'type'更好的解決方案 – Nasser

0

的一種可能性是計算髮生之前限制域。

下面是關於限制域中Maplesoft網站上的解釋: 4 Basic Computation

UPD:基本上,根據thisthat5不被認爲是楓樹複雜,所以可能會有一些bug /錯誤/錯誤(嘗試檢查可能存在錯誤的地方)。

例如,請嘗試將complex不帶引號。

根據this,你的方式似乎很合理。

UPD2:根據Maplesoft網站,所有類型檢查都使用type()函數完成,所以沒有isreal()函數。

+0

謝謝。但這不是我所要求的。假設這個列表是從除了解方程以外的東西中產生的?還有人想要選擇列表中的實際值?另外,人們可能不想限制解算器,只是稍後過濾結果。可能還想使用其他解決方案。所以這不能回答我的問題。但是,謝謝。 – Nasser

+0

@Nasser,考慮檢查更新的版本。你可能會發現一些有用的信息! –

相關問題