2014-03-06 64 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,考虑检查更新的版本。你可能会发现一些有用的信息! –

相关问题