小编kui*_*der的帖子

Python - Scipy:ode模块:启用求解器的步骤选项的问题

当我调用它时,我想存储求解器本身采用的不同集成步骤:

solver1.integrate(t_end)
Run Code Online (Sandbox Code Playgroud)

所以我做了一个while循环并启用了step选项,将其值设置为True:

while solver1.successful() and solver1.t < t0+dt:
    solver1.integrate(t_end,step=True)
    time.append(solver1.t)
Run Code Online (Sandbox Code Playgroud)

然后我绘制y,积分的结果,这是我的问题.我有不稳定性出现在一个位置区域:

y启用求解器的步骤选项

我认为这是因为循环或类似的东西,所以我检查结果删除step:

while solver1.successful() and solver1.t < t0+dt:
    solver1.integrate(t_end)
Run Code Online (Sandbox Code Playgroud)

并且惊讶......我有正确的结果:

y禁用解算器的步骤选项

这是一个非常奇怪的情况......如果你们中的某个人可以帮我解决这个问题,我将不胜感激.

编辑:

要设置求解器我做:

solver1 = ode(y_dot,jac).set_integrator('vode',with_jacobian=True)
solver1.set_initial_value(x0,t0)
Run Code Online (Sandbox Code Playgroud)

我使用存储结果 .append()

python scipy numerical-methods ode

6
推荐指数
1
解决办法
407
查看次数

OpenMP C++ - 如何并行化这个函数?

我想将这个功能并行化,但我是开放式mp的新手,如果有人能帮助我,我将不胜感激:

void my_function(float** A,int nbNeurons,int nbOutput, float* p, float* amp){
   float t=0;
   for(int r=0;r<nbNeurons;r++){
      t+=p[r];
   }

   for(int i=0;i<nbOutput;i++){
      float coef=0;
      for(int r=0;r<nbNeurons;r++){
       coef+=p[r]*A[r][i];
      }
   amp[i]=coef/t;
   }
}
Run Code Online (Sandbox Code Playgroud)

由于双循环,我不知道如何正确并行化它,目前,我只考虑做一个: #pragma omp parallel for reduction(+:t)

但我认为这不是通过openMp更快地实现计算的最佳方式.

预先感谢,

c++ parallel-processing openmp

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