什么可能导致C,MPI程序使用在Gentoo Linux集群上运行的名为SUNDIALS/CVODE(一个数字ODE求解器)的库来重复Signal 15 received.?
该代码是由MPI,Sundials,Linux,C还是谁发布的?
请注意,我几乎是初学者,拥有以下技术:C,MPI,SUNDIALS/CVODE和Linux.
通过Google搜索消息,我找不到任何与之相关的内容.我甚至不知道从哪里开始看.(这是其中一个问题,其中"任何有用的"都是字面意思.)
(作为抛开/事后的想法,为什么Chrome的字典不能识别"google搜索"这个词?).
(简要)文档scipy.integrate.ode说两个方法(dopri5和dop853)具有逐步控制和密集输出.看一下示例和代码本身,我只能看到从集成器获取输出的一种非常简单的方法.也就是说,看起来你只是通过一些固定的dt向前推进积分器,得到当时的函数值,然后重复.
我的问题有很多可变的时间尺度,所以我想在需要评估的任何时间步长得到值,以达到所需的公差.也就是说,在早期,事情正在缓慢变化,因此输出时间步长可能很大.但随着事情变得有趣,输出时间步长必须更小.我实际上并不想要等间隔的密集输出,我只想要自适应函数使用的时间步长.
一个相关的概念(几乎相反)是"密集输出",其中所采取的步骤与步进器所采取的步骤一样大,但函数的值被插值(通常具有与步进器精度相当的精度)你要.fortran底层scipy.integrate.ode显然能够做到这一点,但ode没有界面. odeint另一方面,它基于不同的代码,并且显然确实执行密集输出.(您可以在每次调用右侧时输出以查看何时发生,并看到它与输出时间无关.)
所以我仍然可以利用自适应性,只要我能够提前确定我想要的输出时间步长.不幸的是,对于我最喜欢的系统,我甚至不知道大概的时间尺度是什么时间函数,直到我运行集成.因此,我必须将采用一个积分器步骤的想法与这种密集输出的概念结合起来.
显然,scipy 1.0.0通过新接口引入了对密集输出的支持.特别是,他们建议远离scipy.integrate.odeint和朝向scipy.integrate.solve_ivp,作为关键字dense_output.如果设置为True,则返回的对象具有sol可以使用数组调用的属性,然后在这些时间返回集成函数值.这仍然没有解决这个问题的问题,但在许多情况下它很有用.
我已经在这里阅读了这些文档,但它只是说odeint" 是一个基于来自ODEPACK的lsoda的简单接口的集成商 "
实际差异是什么?在什么情况下使用比另一个更合适的?
更具体地说,我对8阶Dormand-Prince嵌入式方法感兴趣,它基于Runge-Kutta和刚性方程.
我使用Numerical Recipes 3但我经常在编译它们的库时遇到问题.我想知道其他选择.
为了使用SciPy解决简单的ODE,我曾经使用odeint函数,其形式为:
scipy.integrate.odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0, ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0)[source]
Run Code Online (Sandbox Code Playgroud)
要集成的简单函数可以包含表单的其他参数:
def dy_dt(t, y, arg1, arg2):
# processing code here
Run Code Online (Sandbox Code Playgroud)
在SciPy 1.0中,似乎ode和odeint函数已被更新的solve_ivp方法所取代.
scipy.integrate.solve_ivp(fun, t_span, y0, method='RK45', t_eval=None, dense_output=False, events=None, vectorized=False, **options)
Run Code Online (Sandbox Code Playgroud)
但是,这似乎没有提供args参数,也没有提供文档中关于实现args传递的任何指示.
因此,我想知道是否可以使用新API进行arg传递,或者这是一个尚未添加的功能?(如果故意删除这些功能,对我来说似乎是一种疏忽?)
参考:https: //docs.scipy.org/doc/scipy/reference/integrate.html
我想在多个线程(每个CPU核心一个)中使用scipy.integrate.ode(或scipy.integrate.odeint)实例,以便一次解决多个IVP.然而文档说:" 这个集成器不是可重入的.你不能同时使用"vode"集成器的两个ode实例. "
(如果文档没有说明,odeint会在多次实例化时导致内部错误.)
知道可以做些什么吗?
我试图在java中创建一个简单的SIR-epidemics模型模拟程序.
基本上,SIR由三个微分方程组定义:
S'(t)= - l(t)*S(t)
I'(t)= l(t)*S(t) - g(t)*I(t)
R'(t)= g(t)*I(t)
S - 易感人群,我 - 感染了人,R - 恢复了人.
l(t)= [c*x*I(t)]/N(T)
c - 接触次数,x - 感染性(与病人接触后生病的概率),N(t) - 总人口(不变).
如何在Java中解决这些微分方程?我不认为我知道有任何有用的方法,所以我的实现会产生垃圾.
public class Main {
public static void main(String[] args) {
int tppl = 100;
double sppl = 1;
double hppl = 99;
double rppl = 0;
int numContacts = 50;
double infectiveness = 0.5;
double lamda = 0;
double duration = 0.5;
double gamma = 1 / duration;
for (int i = …Run Code Online (Sandbox Code Playgroud) 我正在实施一个非常简单的易感染感染恢复模型,该模型具有稳定的空闲侧项目 - 通常是一项非常简单的任务.但是我使用PysCeS或SciPy遇到了求解器错误,两者都使用lsoda作为它的底层求解器.这只发生在参数的特定值上,我很难理解为什么.我正在使用的代码如下:
import numpy as np
from pylab import *
import scipy.integrate as spi
#Parameter Values
S0 = 99.
I0 = 1.
R0 = 0.
PopIn= (S0, I0, R0)
beta= 0.50
gamma=1/10.
mu = 1/25550.
t_end = 15000.
t_start = 1.
t_step = 1.
t_interval = np.arange(t_start, t_end, t_step)
#Solving the differential equation. Solves over t for initial conditions PopIn
def eq_system(PopIn,t):
'''Defining SIR System of Equations'''
#Creating an array of equations
Eqs= np.zeros((3))
Eqs[0]= -beta * (PopIn[0]*PopIn[1]/(PopIn[0]+PopIn[1]+PopIn[2])) - …Run Code Online (Sandbox Code Playgroud) 如果有人可以帮助解决以下问题,我将不胜感激.我有以下ODE:
dr/dt = 4*exp(0.8*t) - 0.5*r ,r(0)=2, t[0,1] (1)
Run Code Online (Sandbox Code Playgroud)
我用两种不同的方式解决了(1).通过Runge-Kutta方法(第4顺序)和ode45Matlab中的方法.我将这两个结果与分析解决方案进行了比较,分析解决方案由下式给出:
r(t) = 4/1.3 (exp(0.8*t) - exp(-0.5*t)) + 2*exp(-0.5*t)
Run Code Online (Sandbox Code Playgroud)
当我根据确切的解决方案绘制每个方法的绝对误差时,我得到以下结果:
对于RK方法,我的代码是:
h=1/50;
x = 0:h:1;
y = zeros(1,length(x));
y(1) = 2;
F_xy = @(t,r) 4.*exp(0.8*t) - 0.5*r;
for i=1:(length(x)-1)
k_1 = F_xy(x(i),y(i));
k_2 = F_xy(x(i)+0.5*h,y(i)+0.5*h*k_1);
k_3 = F_xy((x(i)+0.5*h),(y(i)+0.5*h*k_2));
k_4 = F_xy((x(i)+h),(y(i)+k_3*h));
y(i+1) = y(i) + (1/6)*(k_1+2*k_2+2*k_3+k_4)*h; % main equation
end
Run Code Online (Sandbox Code Playgroud)

并为ode45:
tspan = 0:1/50:1;
x0 = 2;
f = @(t,r) 4.*exp(0.8*t) - 0.5*r;
[tid, y_ode45] …Run Code Online (Sandbox Code Playgroud) matlab numerical-integration ode differential-equations runge-kutta
最近斯坦已经添加了这种integrate_ode方法.不幸的是,我能找到的唯一文件是stan参考手册(第191页).我有一个需要一些驱动信号的模型.据我了解参数x_r,x_i应该用于此.
为了一个具体的例子,我们假设我想从文档中实现以下更改的示例:
real[] sho(real t,
real[] y,
real[] theta,
real[] x_r,
int[] x_i) {
real dydt[2];
real input_signal; // Change from here!!!
input_signal <- how_to(t, x_r, x_i);
dydt[1] <- y[2] + input_signal; // Change to here!!!
dydt[2] <- -y[1] - theta[1] * y[2];
return dydt;
}
Run Code Online (Sandbox Code Playgroud)
输入信号应该是输入的时间序列 - 假设我提交input_signal_vector <- sin(t) + rnorm(T, sd=0.1)(这应该是时间点的信号ts),我打算用于input_signal最接近的时间值.
我能想象的唯一方法是一个可以Concat的ts和input_signal_vector在x_r,然后这个数组中进行搜索.但我无法想象这是这些参数的预期用途.这也是非常低效的.
因此,如果有人能够证明这种情况应该如何解决,我将非常感激.