标签: ode

如何在 R 中求解具有时间相关参数的 ODE 系统?

我试图通过 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)

r ode equation-solving differential-equations desolve

5
推荐指数
1
解决办法
1132
查看次数

.net中最佳自由常微分方程库

我正在寻找一个图书馆来解决我的大学论文项目的ODE ......我想找到的图书馆必须具备以下功能:

  • 事件微积分(类似于内部事件停止的连续微积分,如达到的约束和其他事件)

  • 我正在使用C#4.0所以我认为任何库都可以

  • 有很好的表现

  • 没有$$ ^^"

c# equation solver ode

4
推荐指数
1
解决办法
5059
查看次数

是否有可能从matlab提高ODE求解器的速度?(ode45 ode15s等)

我在matlab中编写了一个使用ode45和ode15s来解决系统的代码.我想知道我是否可以在我的脚本中使用多核(或并行代码)来提高代码的速度.

有人试过吗?

谢谢

matlab ode

4
推荐指数
1
解决办法
5166
查看次数

用SciPy数值求解ODE

我坚持申请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)

python scipy ode differential-equations

4
推荐指数
1
解决办法
583
查看次数

如何实时显示Matlab的ode45结果?

假设我们有一阶 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),而无需等待整个过程代码要完成吗?

matlab real-time ode

4
推荐指数
1
解决办法
2301
查看次数

使用ODE中的循环以图形方式比较不同的参数R.

我正在使用该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的行中报告了这个错误.

r ode

4
推荐指数
1
解决办法
716
查看次数

在 Julia 中擦除以前的数据/图(Plots.jl,GR 后端)

我已经在 J​​ulia 中解决了描述粒子运动的 ODE,并将坐标和各自的时间保存在一个数组中。我想用粒子沿着求解的轨迹创建一个绘图的动画 gif 图像,但要做到这一点(我提出的唯一方法)是使用 绘制粒子的位置scatter,并擦除 的先前位置每时每刻的粒子。但是我只知道scatter!哪个会向绘图中添加更多粒子,而不是显示粒子位置的变化。那么我怎样才能在每次迭代时擦除以前的图,或者有更聪明的方法来做到这一点?如果我想使用绘图标记更早时刻粒子的轨迹怎么办?

plot animation gif ode julia

4
推荐指数
1
解决办法
558
查看次数

solve_ivp [scipy.integrate] 示例的问题

我正在研究 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)
  1. sol.sol(t)在此代码中没有任何意义。我们应该写什么?也许是一个元组z = sol.t, sol.y

  2. 还清楚的是len(sol.y[0])=57len(sol.y[1])=57whilet …

python scipy numerical-integration ode python-3.x

4
推荐指数
1
解决办法
4945
查看次数

有什么可能的方法来停止 ODE 求解器(使用 DifferentialEquations.jl)?

我正在尝试解决 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 求解器。

任何相关评论将不胜感激:)

ode julia

4
推荐指数
1
解决办法
370
查看次数

scipy中复杂的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?

我的问题是:

  1. 我的y不是一个列表而是一个矩阵,我如何给出一个适当的输出适合complex_ode()?
  2. complex_ode() 需要jacobian,我不知道如何开始构建一个它应该是什么类型?
  3. 我应该把正常的ode和time linspace中的初始条件放在哪里?

这是scipy的complex_ode链接:http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.complex_ode.html

任何人都可以向我提供更多信息,以便我可以学到更多.

python scipy ode

3
推荐指数
1
解决办法
5476
查看次数