我目前正在使用Sympy
来帮助我进行数学计算。现在,我正在尝试执行数值积分,但每次运行脚本时都会出现错误。脚本如下:
from sympy import *
cst = { 'qe':1.60217646*10**-19, 'm0':N(1.25663706*10**-6) }
d = 3.6*10**-2
l = 20.3*10**-2
n = 217.0
I = 10.2
# Circum of loops
circ = l/n;
# Radius
r = N( circ/(2*pi) )
# Flux through a ring a distance R from the ceter
def flux(rad, I, loopRad):
distFromWire = loopRad - rad
bPoint = cst['m0']*I/(2*pi*distFromWire)
return ( bPoint*2*pi*rad )
# Integrate from r=0 to r=wireRad
x = Symbol('x')
ig = Symbol('ig')
ig = flux(x, I, r)
print(ig)
integrate(ig*x,x)
我确信实际的物理/数学可能有问题,但现在我只想让它整合起来。以下是我运行脚本时得到的输出:
^{pr2}$编辑: 好吧,我把程序使用的数字取出来,放到wolfram alpha中。结果是积分不收敛。我想这只是个数学错误。在
使用符号库进行数值计算是一个非常糟糕的主意。只需使用scipy/numpy。也就是说,对于这样一个简单的积分,你可以用sympy。但是,您应该实际使用sympy表达式,而不是将所有内容转储到不透明函数中。在
首先,了解python中的变量是如何工作的:
在这个操作之后,
ig
不再是一个符号,它只是flux
的返回值。在定义你所有的符号,然后用它们来表达。积分足够简单,sympy可以处理它。在
最后,像您这样简单的积分应该手工完成,而不是浪费在软件上。在
[编辑]:我已经彻底重写了它,但是由于一个bug,sympy仍然没有正确地集成。你可以在邮件列表或问题追踪器上报告,他们会努力改正的。也就是说,这个表达式非常简单,可以用手来整合。在
[编辑2]:
^{pr2}$相关问题 更多 >
编程相关推荐