我试图通过 deSolve 求解这个常微分方程组,dX/dt = -X*a + (YX) b + c 和 dY/dt = -Y a + (XY)*b 时间为 [0,200],a=0.30 ,b=0.2,但时间 [50,70] 时 c 为 1,否则为 0。我一直使用的代码是,
time <- seq(0, 200, by=1)
parameters <- c(a=0.33, b=0.2, c=1)
state <- c(X = 0, Y = 0)
two_comp <- function(time, state, parameters){
with(as.list(c(state, parameters)), {
dX = -X*a + (Y-X)*b + c
dY = -Y*a + (X-Y)*b
return(list(c(dX, dY)))
})
}
out <- ode(y = state, times = time, func = two_comp, parms …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个图书馆来解决我的大学论文项目的ODE ......我想找到的图书馆必须具备以下功能:
事件微积分(类似于内部事件停止的连续微积分,如达到的约束和其他事件)
我正在使用C#4.0所以我认为任何库都可以
有很好的表现
没有$$ ^^"
我在matlab中编写了一个使用ode45和ode15s来解决系统的代码.我想知道我是否可以在我的脚本中使用多核(或并行代码)来提高代码的速度.
有人试过吗?
谢谢
我坚持申请scipy.integrate.odeint以下非常简单的ODE:
y(t)/dt = y(t) + t^2 and y(0) = 0
Run Code Online (Sandbox Code Playgroud)
由SciPy计算的解决方案不正确(很可能b/c我在这里混淆了一些东西) - 特别是解决方案不符合初始条件.
import numpy as np
import scipy.integrate
import matplotlib.pyplot as plt
import math
# the definition of the ODE equation
def f(y,t):
return [t**2 + y[0]]
# computing the solution
ts = np.linspace(-3,3,1000)
res = scipy.integrate.odeint(f, [0], ts)
# the solution computed by WolframAlpha [1]
def y(t):
return -t**2 - 2*t + 2*math.exp(t) - 2
fig = plt.figure(1, figsize=(8,8))
ax1 = fig.add_subplot(211)
ax1.plot(ts, res[:,0])
ax1.text(0.5, 0.95,'SciPy …Run Code Online (Sandbox Code Playgroud) 假设我们有一阶 ODE 系统有以下求解器:
% func.m
function dydt = func(t,y)
dydt = [y(2); (1-y(1)^2)*y(2)-y(1)];
Run Code Online (Sandbox Code Playgroud)
和主要代码:
% solver.m
tspan=0:1:10;
[t,y] = ode45(@func,tspan,[2; 0]);
Run Code Online (Sandbox Code Playgroud)
如何实时显示 ode45 执行的每个时间步 t (t=0,1,2,...,10) 的结果 y1(t) 和 y2(t),而无需等待整个过程代码要完成吗?
我正在使用该deSolve软件包绘制几个微分方程(如果感兴趣,请阅读http://www.maa.org/press/periodicals/loci/joma/the-sir-model-for-spread-of-disease-the-微分方程模型).
我最终的目标是创建一个迭代函数或过程(for循环)来绘制某些参数(beta和gamma)的变化将如何影响解决方案.首选输出是一个列表,其中包含ode循环中每个指定beta值的所有解决方案.我遇到了将循环集成到deSolve软件包所需的设置中的问题ode.
在下面的代码中,我试图绘制参数beta中值的范围(1到2的增量为0.1)将如何影响微分方程的图.
for(k in seq(1,2,by=0.1)){ #range of values for beta
init <- c(S=1-1e-6, I=1e-6, R=0) #initial conditions for odes
time <- seq(0,80,by=1) #time period
parameters <- c(beta=k, gamma=0.15) #parameters in ode
SIR <- function(time,state,parameters){ #function containing equaations
with(as.list(c(state,parameters)),{
dS <- -beta*S*I
dI <- beta*S*I-gamma*I
dR <- gamma*I
return(list(c(dS,dI,dR)))
})
}
ode(y=init,times=time,func=SIR()[beta],parms=parameters[k])}
}
Run Code Online (Sandbox Code Playgroud)
我得到的第一个错误表明缺少SIR函数中的参数参数
as.list中的错误(c(init,parameters)):缺少参数"parameters",没有默认值
我不明白为什么在我之前分配parameters的行中报告了这个错误.
我已经在 Julia 中解决了描述粒子运动的 ODE,并将坐标和各自的时间保存在一个数组中。我想用粒子沿着求解的轨迹创建一个绘图的动画 gif 图像,但要做到这一点(我提出的唯一方法)是使用 绘制粒子的位置scatter,并擦除 的先前位置每时每刻的粒子。但是我只知道scatter!哪个会向绘图中添加更多粒子,而不是显示粒子位置的变化。那么我怎样才能在每次迭代时擦除以前的图,或者有更聪明的方法来做到这一点?如果我想使用绘图标记更早时刻粒子的轨迹怎么办?
我正在研究 python 的有关 ode 数值积分的内容,特别是我发现了 scipy.integrate 函数solve_ipv。我尝试了scipy.integrate.solve_ipv 页面中显示的示例,但与 Lotka Volterra 示例相关的代码中可能存在错误:
def lotkavolterra(t, z, a, b, c, d):
x, y = z
return [a*x - b*x*y, -c*y + d*x*y]
sol = solve_ivp(lotkavolterra, [0, 15], [10, 5], args=(1.5, 1, 3, 1))
t = np.linspace(0, 15, 300)
z = sol.sol(t)
import matplotlib.pyplot as plt
plt.plot(t, z.T)
plt.xlabel('t')
plt.legend(['x', 'y'], shadow=True)
plt.title('Lotka-Volterra System')
plt.show()
Run Code Online (Sandbox Code Playgroud)
sol.sol(t)在此代码中没有任何意义。我们应该写什么?也许是一个元组z = sol.t, sol.y?
还清楚的是len(sol.y[0])=57和len(sol.y[1])=57whilet …
我正在尝试解决 ODE 问题(与 Julia 一起),该问题可以在满足特定条件时提前停止。
假设我有一个洛伦兹系统,如下所示
using DifferentialEquations
function lorenz!(du,u)
du[1] = 10.0*(u[2]-u[1]);
du[2] = u[1]*(28.0-u[3]) - u[2];
du[3] = u[1]*u[2] - (8/3)*u[3];
end
u0 = [1.0;0.0;0.0]
tspan = (0.0, 100.0)
prob = ODEProblem(lorenz!,u0, tspan);
sol = solve(prob);
Run Code Online (Sandbox Code Playgroud)
并且,例如,我想在 u[3] 高于 10 时停止 ODE 求解器,如下所示。
sol = solve(prob, stopcondition = u[3]>10);
Run Code Online (Sandbox Code Playgroud)
但我不确定是否有可能在给定条件下停止 ODE 求解器。
任何相关评论将不胜感激:)
我无法解决光学bloch方程,这是一个具有复数值的一阶ODE系统.我发现scipy可以解决这样的系统,但是他们的网页提供的信息太少而且我很难理解.
我有8个耦合的一阶ODE,我应该生成一个函数,如:
def derv(y):
compute the time dervative of elements in y
return answers as an array
Run Code Online (Sandbox Code Playgroud)
然后做 complex_ode(derv?
我的问题是:
complex_ode() 需要jacobian,我不知道如何开始构建一个它应该是什么类型?这是scipy的complex_ode链接:http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.complex_ode.html
任何人都可以向我提供更多信息,以便我可以学到更多.