首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将具有虚幂的渐近聚mpc转换为mpc

将具有虚幂的渐近聚mpc转换为mpc
EN

Stack Overflow用户
提问于 2018-03-10 17:21:47
回答 2查看 342关注 0票数 0

我有一个同情的多面体,看起来像:

代码语言:javascript
复制
Poly(0.764635937801645*I**4 + 7.14650839258644*I**3 - 0.667712176660315*I**2 - 2.81663805543677*I - 0.623299856233272, I, domain='RR')

我使用以下代码转换为mpc:

代码语言:javascript
复制
a = val.subs('I',1.0j)
b = sy.re(a)
c = sy.im(a)
d = mpmath.mpc(b,c)

有两个问题。

  1. 假设我的mpc和渐近类型具有相同的精度(例如100 dps),那么使用这种从ad的转换会有精度损失吗?
  2. 有没有更好的转换方式?

旁白:同情似乎把我当成了这里的象征。如何得到简化多项式的渐近性?

编辑:我还注意到下面的工作代替了上面的a

代码语言:javascript
复制
a = val.args[0]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-10 19:10:20

字符串和表达式

这个问题的根本原因出现在val.subs('I', 1.0j)中--您似乎将字符串作为参数传递给SymPy函数。这有一些有效的用途(比如创建高精度的浮点数),但是当涉及到符号时,使用字符串会导致混乱。字符串'I‘被隐式转换为SymPy表达式Symbol('I'),这与SymPy表达式I不同。所以答案是

如何得到简化多项式的渐近性?

就是重新审视这个多项式的创建过程,并修正它。如果确实需要从字符串创建它,请使用locals参数:

代码语言:javascript
复制
>>> S('3.3*I**2 + 2*I', locals={'I': I})
-3.3 + 2*I

多项式与表达式

如果不需要聚类结构,则用聚类的as_expr()方法得到表达式。

转换为数学和精度损失

使用从a到d的转换是否会导致精度损失?

是的,分裂成真实的和想象的,然后重新组合会导致精度损失。如果您知道SymPy对象是一个复数,则直接将它传递给mpc。或者mpmathify,如果你想要数学来决定它应该有什么样的类型。举个例子:

代码语言:javascript
复制
>>> val = S('1.111111111111111111111111111111111111111111111111')*I**3 - 2 
>>> val
-2 - 1.111111111111111111111111111111111111111111111111*I
>>> import mpmath
>>> mpmath.mp.dps = 40
>>> mpmath.mpc(val)
mpc(real='-2.0', imag='-1.111111111111111111111111111111111111111111')
>>> mpmath.mpmathify(val)
mpc(real='-2.0', imag='-1.111111111111111111111111111111111111111111')
>>> mpmath.mpc(re(val), im(val))
mpc(real='-2.0', imag='-1.111111111111111111111111111111111111111114')

意见:

  • 当我是实际的假想单位时,I**3计算-I,你不需要做任何事情就会发生。
  • 在SymPy中使用高精度十进制的字符串表示来创建这样的浮点数.在这里,S代表sympify。您也可以更直接地使用Float('1.1111111111111111111111111')
  • 将一个SymPy复数直接转换为一个拼音复数比在实/复和重组中分裂更好。

结论

上面的大部分只是讨论XY问题。你和我的表情不是你想的那样,所以你试图做一些不需要的奇怪的事情,而我的回答大多是浪费时间。

票数 1
EN

Stack Overflow用户

发布于 2018-03-10 21:26:18

我在这里添加我自己的答案,因为FTP的回答虽然相关而且非常有用,但并没有(直接)解决我的问题(tbh的问题并不那么明确)。当我在他的示例中运行代码时,我得到了以下内容:

代码语言:javascript
复制
>>> from sympy import *
>>> import mpmath
>>> val = S('1.111111111111111111111111111111111111111111111111')*I**3 - 2
>>> val
-2 - 1.111111111111111111111111111111111111111111111111*I
>>> mpmath.mp.dps = 40
>>> mpmath.mpc(val)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\mpmath\ctx_mp_python.py", line 373, in __new__
    real = cls.context.mpf(real)
  File "C:\Python27\lib\site-packages\mpmath\ctx_mp_python.py", line 77, in __new__
    v._mpf_ = mpf_pos(cls.mpf_convert_arg(val, prec, rounding), prec, rounding)
  File "C:\Python27\lib\site-packages\mpmath\ctx_mp_python.py", line 96, in mpf_convert_arg
    raise TypeError("cannot create mpf from " + repr(x))
TypeError: cannot create mpf from -2 - 1.111111111111111111111111111111111111111111111111*I
>>> mpmath.mpmathify(val)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\mpmath\ctx_mp_python.py", line 662, in convert
    return ctx._convert_fallback(x, strings)
  File "C:\Python27\lib\site-packages\mpmath\ctx_mp.py", line 614, in _convert_fallback
    raise TypeError("cannot create mpf from " + repr(x))
TypeError: cannot create mpf from -2 - 1.111111111111111111111111111111111111111111111111*I
>>> mpmath.mpc(re(val), im(val))
mpc(real='-2.0', imag='-1.111111111111111111111111111111111111111114')
>>> mpmath.mpmathify(val)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\mpmath\ctx_mp_python.py", line 662, in convert
    return ctx._convert_fallback(x, strings)
  File "C:\Python27\lib\site-packages\mpmath\ctx_mp.py", line 614, in _convert_fallback
    raise TypeError("cannot create mpf from " + repr(x))
TypeError: cannot create mpf from -2 - 1.111111111111111111111111111111111111111111111111*I

更新我的渐近性(1.0->1.1.1)和mpmath (0.19->1.0.0)修正了异常。我没有测试这些升级中的哪一个真正解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49211887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档