问题描述
在我的情况下,这是哈勃常数H,应随H〜1 / t减小。
这次,“ t”与我的odeint用于求解耦合ODE的时间完全相同。 (我想在一个扩展的宇宙中求解运动方程,并希望H在odeint之外确定)
我如何告诉odeint我希望H随odeint计算的每个步骤而减小?
我代码中的相关行是(这里,H是一个常数(H = 1),但我希望它是H = 1 / t):
def func(X,t,parameters):
theta,alpha,phi,beta = X # unpack current values of X
Lambda,fa,H = parameters # unpack parameters
derivs = [alpha,-2*beta/phi*alpha - 3*H*alpha,beta,-3*H*beta + alpha**2 *phi -Lambda**2 *phi**3 + fa**2 * phi] # list of derivatives
return derivs
# Set initial (angle,angularvelo,radius,radialvelo) & bundle them to pass to odeint
theta0,alpha0,phi0,beta0 = np.pi,30,4,100
X0 = [theta0,beta0]
# Set time & stepsize. T should be time for 1 Period in the future.
T = 5 tmax,dt = 1*T,T/10000
t = np.arange(0,tmax,dt)
# Set Parameters & bundle them to pass to odeint
H = 1
Lambda = 30
fa=1.5
parameters = [Lambda,H]
# Call the ODE solver
(solution,restoffulloutput) = odeint(func,X0,args=(parameters,),full_output=True)
解决方法
我认为最干净的方法是为每个时间步长递减的值创建一个类。
class MagicValue:
def __init__(self,initial_value):
self._value = initial_value
@property
def next_value(self):
# modify self._value here
return self._value
@property
def value(self):
return self._value
现在修改您的函数以使用MagicValue并根据需要使用属性。
,我找到了一种可以正常工作的解决方案。
这就像在odeint函数中定义函数一样简单,因为odeint迭代是“ t”。
numberOfSwaps = bubSort(numList)
print(numList)
print(numberOfSwaps)