我有一个脚本,它使用单独的C++可执行文件的输出,并创建结果数据的散点图/分叉图。应用背景是通过迭代驱动力的多个值来查看角度值与驱动力的关系,以获得结果角度并频闪采样结果,这是一个关于计算物理课程中非线性阻尼驱动摆的问题
import os
import sys
import numpy as np
import matplotlib.pyplot as plt
gbl = 1.0
kappa = 0.5
T_D = 9.424778
ic_ang = 0.1
ic_avel = 0.0
t_final = 200
Nstep = 7500
method = "runge_kutta"
ic_ang = 0.1
Fmin = 0.8
Fmax = 1.6
F_D = float(Fmin)
tstep = T_D/(t_final/Nstep)
Nrep = 3 * tstep
select =[]
step = 0.01
Nite = (Fmax-Fmin)/step
rng = int(Nite-1)
for i in range(rng):
pfile= open('param.dat','w')
pfile.write('%f %f %f %f\n' %(gbl,kappa,F_D,T_D))
pfile.write('%f %f %f\n'%(ic_ang,ic_avel,t_final))
pfile.write('%d %s\n'%(Nstep,method))
pfile.close()
os.system('./a.out > bif.log')
with open("data.out",'r') as datafile:
data=datafile.readlines()
select=data[-Nrep:Nstep:int(tstep)]
for j in select:
plt.plot(F_D, j, "o", color='b', markersize=0.3)
print(F_D,j)
F_D += step
plt.xlabel(r'$F_D$')
plt.ylabel(r'$\theta_{repeat}$')
#plt.xticks([])
plt.yticks([])
plt.show()
但是,当我尝试运行脚本时
Traceback (most recent call last):
File "bif.py", line 45, in <module>
plt.plot(F_D, j, "o", color='b',markersize=0.3)
File"/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/pyt hon/matplotlib/pyplot.py", line 2987, in plot
ret = ax.plot(*args, **kwargs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/matplotlib/axes.py", line 4138, in plot
self.add_line(line)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/matplotlib/axes.py", line 1497, in add_line
self._update_line_limits(line)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/matplotlib/axes.py", line 1508, in
_update_line_limits
path = line.get_path()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/matplotlib/lines.py", line 743, in get_path
self.recache()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/matplotlib/lines.py", line 429, in recache
y = np.asarray(yconv, np.float_)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/
Extras/lib/python/numpy/core/numeric.py", line 460, in asarray
return array(a, dtype, copy=False, order=order)
ValueError: invalid literal for float(): 0 0.1 0 0.004995834722
修改某些值以尝试调试脚本会引发一个单独的异常
Traceback (most recent call last):
File "bif.py", line 24, in <module>
tstep = T_D/(t_final/Nstep)
ZeroDivisionError: float division by zero
我对Python非常陌生,所以这些异常对我来说都没有多大意义。但是,由于Nstep
、t_final
和T_D
都有有限的值,所以没有理由(我无论如何都能看到)出现被零除的错误。你知道吗
我也看到了ValueError
可能的错误,因为第1列和第3列中的输出(时间和角速度)不是应该的浮点值。但是,我不知道为什么这些值没有被转换成应该的浮点值。你知道吗
任何帮助都将不胜感激。你知道吗
编辑:本期已解决
我想你在问两个问题,正如我看到的,最后一个关于0除的问题是比较容易的。也就是说,现在代码中的表达式
t_final/Nstep
是an integer division expression,结果是0
。所以这条线除以零。你知道吗
第二个问题是为什么
matplotlib
抱怨数据。要真正诊断这个问题,我们需要查看程序读取的数据文件的内容。但是,我认为问题源于您试图将文本(Python字符串)传递给需要数字数据类型的函数。当你readlines()
输入文件时,我认为你没有做任何转换。结果,一段文本字符串被传递给plt.plot
,matplotlib
并试图从这个表示形式构造一个数字数据类型。如果读取数据,根据文件格式和分析逻辑进行适当的转换,效果会更好。如果您处理的是文本数据文件,那么您可能需要查看numpy.loadtxt
。你知道吗相关问题 更多 >
编程相关推荐