利用条件找到想象和真实的部分

时间:2016-12-16 05:14:15

标签: wolfram-mathematica mathematica-8

我使用Solve在Mathematica中找到方程的解(我在这里发布的原因是没有人能在mathematica堆栈中回答我的问题。)解决方案被称为s并且它是两个变量的函数v和ro。我想找到s的虚构和真实部分,我想使用v和ro是真实的信息,它们在下面的区间内:

$ 0.02< ro< 1, 40

我使用的代码如下:

ClearAll["Global`*"]
d = 1; l = 100; k = 0.001; kk = 0.001;ke = 0.0014;dd = 0.5 ; dr = 0.06; dc = 1000; p = Sqrt[8 (ro l /2 - 1)]/l^2;

m = (4 dr + ke^2 (d + dd)/2) (-k^2 + kk^2) (1 - l ro/2) (d - dd)/4 - 
I v p k l (4 dr + ke^2 (d + dd)/2)/4 - v^2 ke^2/4 + I v k dr l p/4;
xr = 0.06/n; 
tr = d/n;

dp = (x (v I kk/2 (4 dr + ke^2 (d + dd)/2) - I v kk ke^2 (d - dd)/8 - dr l p k kk (d - dd)/4) + y ((xr I kk (ro - 1/l) (4 dr + ke^2 (d + dd)/2)) - I v kk tr ke^2 (1/l - ro/2) + I dr xr 4 kk (1/l - ro/2)))/m;
a = -I v k dp/4 - I xr y kk p/2 + l ke^2 dp p (d + dd)/8 + (-d + dd)/4 k kk x + dr l p dp;
aa = -v I kk dp/4 + xr I y k p/2 - tr y ke^2 (1/l - ro/2) - (d - dd) x kk^2/4 + ke^2 x (d - dd)/8;
ca = CoefficientArrays[{x (s + ke^2 (d + dd)/2) + 
  dp (v I kk - l (d - dd) k p kk/2) + y (tr ro ke^2) - (d - 
     dd) ((-kk^2 + k^2) aa - 2 k kk a)/(4 dr + ke^2 (d + dd)/2) == 0, y (s + dc ke^2) + n x == 0}, {x, y}];
mat = Normal[ca];
matt = Last@mat;
sha = Solve[Det[matt] == 0, s];
shaa = Assuming[v < 100 && v > 40 && ro < 1 && ro > 0.03,Simplify[%]];
reals = Re[shaa];
ims = Im[shaa];
Solve[reals == 0, ro]

但它没有回答。有人可以帮忙吗?我真的很感激这个问题的任何解决方案。

1 个答案:

答案 0 :(得分:1)

我将代码运行到这一点

mat = Normal[ca]

并查看结果。

有许多非常微小的浮点系数,这么小,我怀疑它们中的大多数现在只是浮点噪声。 Mathematica认为0.1只有1位有效数字的精确度,而你的mat结果现在可能只有零正确数字。

我一直到现在为止

sha = Solve[Det[matt] == 0, s]

如果你看看沙的价值,你会发现它是s-&gt;东西,我认为这根本不是你认为的。 Mathematica从Solve返回“规则”,而不仅仅是表达式。

如果我将该行更改为

sha = s/.Solve[Det[matt] == 0, s]

然后我猜这更接近你想象的那样。

我继续

shaa = Assuming[40<v<100 && .03<ro<1, Simplify[sha]];
reals = Re[shaa]

而我反而使用,因为你假设v和ro是真实的,因为ComplexExpand通常非常有助于Re提供所需的结果,

reals=Re[ComplexExpand[shaa]]

然后点击Show ALL查看完整展开的值。那是大约32个满是你表情的大屏幕。

那是数百个

Arg[-1. + 50. ro]

如果我理解你的意图,我相信所有这些都简化为0.如果这是正确的那么

reals=reals/.Arg[-1. + 50. ro]->0

将实数减少到大约20个大屏幕。

但是仍有数百个Sqrt [( - 1. + 50。ro)^ 2]和((-1。+ 50.ro)^ 2)^(1/4)的例子组成了你的实数。不幸的是,我期待你的巨大表达太大,并且对于Simplify来说需要太长的时间,并且假设能够实际有效。

也许有额外的替代品可以哄骗它大大简化你的实体而不会犯任何关于Real和Complex的错误,但你必须非常小心这些事情,因为在处理复杂的数字和根时,用户犯错是很常见的和权力和功能,并最终得出不正确的结果,可能会将你的问题降到可能的地步

Solve[reals == 0, ro]

给你一个有意义的答案。

这应该为您提供一些关于您需要仔细思考和工作的想法。