微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在mpmath python中评估函数的实部和虚部分开

如何解决在mpmath python中评估函数的实部和虚部分开

我正在mpmath中评估MeijerG函数,结果很复杂。我想将实部和虚部分开以将它们保存在数据框中,然后绘制它们。我收到错误消息

TypeError:无法从数组后跟一系列复数创建mpf。

任何人都有一种清晰的方法来分离和保存这些数据,以便用户可以以任何格式绘制它们。

from mpmath import *
import sympy
import numpy as np
import cmath
import math
import pandas as pd
import matplotlib.pyplot as plt

mp.dps = 5; mp.pretty = True
a = mpf(0.25)
b = mpf(0.25)
z = mpc(0.75)
frequency = np.arange(1,1e4,100)

def q():
  return (-j/frequency)*meijerg([[1,3/2],[]],[[1,1],[1/2,0]],j*frequency)

T=q()
Re_q = np.real.T
Im_q = np.imag.T

print(Re_q)
print(Im_q)

data = pd.DataFrame({
    'Frequency (Hz)': frequency,'Re': Re_q,'Im': Im_q
}
)
data.to_csv('C:\\Users\\T.csv')

解决方法

以这种方式将实部和虚部分开。

from mpmath import *
import numpy as np
import cmath
import math
import pandas as pd

mp.dps = 15; mp.pretty = True
a = mpf(0.25)
b = mpf(0.25)
z = mpf(0.75)
frequency = np.arange(1,50,10)  # frequeny range
bh = np.arange(10e-6,30e-6,10e-6) #10e-6 # width
print(bh)
D = 1e-6 #7.8e-4  # diffusivity
gamma = 0.5772 # Euler constant
v = []
w =[]
i = []
def q(frequency):
  for i in bh:
    # for f in frequency:
      omega = (((i ** 2) * 2 * math.pi * frequency) / D)  # depends on bh and frequency
      u = ((-j/(math.pi * omega))*meijerg([[1,3/2],[]],[[1,1],[0.5,0]],j*omega))
      v = np.real(u)
      w = np.imag(u)
      return i,frequency,v,w
#transpose arrays
T = np.vectorize(q)
print(T(frequency))
df = np.array(T(frequency)).T
print(df)
# create DataFrame
df1 = pd.DataFrame(data=df,columns=['bh','frequency','Re','Im'])
print(df1)
#save in .csv
df1.to_csv('C:\\Users\\Mohamed Boutchich\\PycharmProjects\\calculations\\T.csv')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。