- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下脚本来使用 odeint 计算 dRho。
P_r = 10e5
rho_r = 900
L = 750
H = 10
W = 150
A = H * W
V = A * L
fi = 0.17
k = 1.2e-13
c = 12.8e-9
mu = 2e-3
N = 50
dV = V/N
dx = L/N
P_in = P_r
rho_in = rho_r
P_w = 1e5
rho_w = rho_r* np.exp(c*(P_w-P_r))
# init initial case
P = np.empty(N+1)*10e5
Q = np.ones(N+1)
out = np.empty(N+1)
P[0] = P_w
Q[0] = 0
out[0] = 0
def dRho(rho_y, t, N):
P[1:N] = P_r + (1/c) * np.log(rho_y[1:N]/rho_r)
P[N] = P_r + (1/c) * np.log(rho_y[N]/rho_r)
Q[1:N] = (-A*k/mu)*((P[1-1:N-1] - P[1:N])/dx)
Q[N] = (-A*k/mu)*((P[N]-P_r)/dx)
out[1:N] = ((Q[1+1:N+1]*rho_y[1+1:N+1] - Q[1:N]*rho_y[1:N])/dV)
out[N] = 0
return out
t0 = np.linspace(0,1e9, int(1e9/200))
rho0 = np.ones(N+1)*900
ti = time.time()
solve = odeint(dRho, rho0, t0, args=(N,))
plt.plot(t0,solve[:,1:len(rho0)], '-', label='dRho')
plt.legend(loc='upper right')
plt.show()
P 和 Q 在函数 dRho 中计算,它们 P 充当 Q 的输入,P、Q 和 rho_y 充当 out 的输入。该函数返回“out”。我可以毫无问题地绘制出来,但是,我也有兴趣绘制 P 和 Q。
我尝试了多种方法来实现这一点,例如:在积分方法之后重新计算 P 和 Q,但这会增加脚本的运行时间。因此,由于计算是在 dRho 内完成的,我想知道是否以及如何从外部访问它来绘制它。
我还尝试将 P 和 Q 与 rho0 一起添加为 odeint 的输入,但 P 和 Q 都被用于集成,这导致函数返回时出现错误结果。
简化版:
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
def dY(y, x):
a = 0.001
yin = 1
C = 0.01
N = 1
dC = C/N
b1 = 0
y_diff = -np.copy(y)
y_diff[0] += yin
y_diff[1:] += y[:-1]
print(y)
return (a/dC)*y_diff+b1*dC
x = np.linspace(0,20,1000)
y0 = np.zeros(4)
res = odeint(dY, y0, x)
print(res)
plt.plot(x,res, '-')
plt.show()
在这个简化的示例中,我想创建一个额外的 ydiff 图。
这里是另一个简单的例子:
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint
def func(z,t):
x, y=z
xnew = x*2
print(xnew)
ynew = y*0.5
# print y
return [x, y]
z0=[1,3]
t = np.linspace(0,10)
xx=odeint(func, z0, t)
plt.plot(t, xx[:,0],t,xx[:,1])
plt.show()
我有兴趣绘制所有 xnew 和 ynew 值。
另一个例子:
xarr = np.ones(4)
def dY(y, x):
a = 0.001
yin = 1
C = 0.01
N = 1
dC = C/N
b1 = 0
xarr[0] = 0.25
xarr[1:] = 2
mult = xarr*2
out = mult * y
print(mult)
return out
x = np.linspace(0,20,1000)
y0 = np.zeros(4)+1.25
res = odeint(dY, y0, x)
dif = np.array([dY(y,x) for y in res])
print(dif)
plt.plot(x,res, '-')
plt.show()
我想根据 x 绘制多个值
最佳答案
以下可能是您想要的。您可以将中间值存储在列表中,然后绘制该列表。这也需要存储 x 值。
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
xs = []
yd = []
def dY(y, x):
a = 0.001
yin = 1
C = 0.01
N = 1
dC = C/N
b1 = 0
y_diff = -np.copy(y)
y_diff[0] += yin
y_diff[1:] += y[:-1]
xs.append(x)
yd.append(y_diff)
return (a/dC)*y_diff+b1*dC
x = np.linspace(0,20,1000)
y0 = np.zeros(4)
res = odeint(dY, y0, x)
plt.plot(x,res, '-')
plt.gca().set_prop_cycle(plt.rcParams['axes.prop_cycle'])
plt.plot(np.array(xs),np.array(yd), '-.')
plt.show()
虚线是相同颜色的 res
解决方案各自的 y_diff
值。
关于python - 从 odeint scipy python 使用的函数中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46812671/
我正在通过 odeint 集成生化常微分方程(见下图),但是主输入函数似乎在调用时用奇怪的数字重新设置(或替换)输入参数。尽管参数“iu”(v 的感应率,应在整个过程中保持恒定)和“v”(结果之一,应
我一直在努力使用新版本的 boost。我正在使用多精度的 odeint。下面这段代码可以用boost version 1.67.0编译成功。但是,自 1.68.0 及更新版本以来,我无法再编译。在版本
我最近偶然发现了 boost.odeint 库,我对可能性和可配置性的数量感到惊讶。但是,在广泛使用 scipy.integrate.odeint(它本质上是 Fortran 中 ODEPACK 的包
我刚开始使用 Boost Odeint 来集成一个 ODE 系统。为方便起见,我想将它与 Armadillo 一起使用,因为两者都是具有方便 API 的现代 C++ 库。但是,如果我指定 arma::
我想使用 scipy 的 odeint 函数求解具有 15 个时间相关系数的 7 个常微分方程 (ODE) 系统。 我将系数存储在字典中,以便可以通过我定义为与 odeint() 一起使用的函数 (f
我尝试在 Mac OS X 10.9.2 g++ 5.1 上的 boost_1_55_0 中运行 [odeint 复杂状态类型示例代码。 下面的代码是网站上解决 Stuart-Landau 振荡器的拷
所以我试图求解一个包含三个 ODE 的系统,并开发了以下代码来使用 ODEint 求解它们。但是当我运行时,ODEint 在调用我的方程组函数时出现问题。 from scipy.integrate i
我有以下 odeint 程序: #include #include using namespace std; typedef boost::array state_type; void eqsys
我有一个使用“odeint”模拟种群动态的程序。我想设置一个 if 条件来禁止我的颂歌的结果为负。这是我的代码摘要: class Communities { public : type
我正在尝试求解一个简单的方程:dM/dr = r*p(r) 在 python 中。 我在 r 的某些值处有 p 的值: p(0)=1, p(1)=3, p(2)=5, p( 3)=7, p(4)=9,
我正在尝试使用 scipy 的 odeint 来求解一些常微分方程。唯一的问题是我只想定义一个参数,看来要组成一个元组,你至少需要两个值。 我的代码是这样的: def system(state, t,
我正在尝试用 odeint 求解微分方程。这里一些常量参数是固定的,一些在列表中。 from scipy.integrate import odeint import matplotl
使用Python 2.7.8。 我正在使用的微分方程是 x'=2-3*x。没那么难。正确的解是 y 截距为 2/3 的衰减指数。运动有三个初始条件。还必须在同一地 block 上有一个带有解决方案的斜
我想将 scipy 的 odeint 与一个函数一起使用 def func(y,t,a=123,b=456) 然后将其用作 odeint(func,y0,t) 如果我想使用 args 改变值 a 和
我对使用隐式方案使用 odeint 库求解 ODE 系统很感兴趣,但我很难实现一个简单的 implicit_euler 示例。 查看文档,我设法使工作显式步进器、自适应步进器以及 rosenbrock
我刚刚实现了一组耦合 ODE 的数值积分来自使用 odeint C++ 库的离散 PDE。它很好用并且快如闪电,但有一个问题: 我的 ODE 系统具有所谓的吸收边界条件:时间我的状态变量 n 的导数,
运行以下代码: #include #include using namespace std; using namespace boost::numeric::odeint; class CSyst
显然,getting a non-negative solution from an ODE solver is non-trivial .在 Matlab 中,有 NonNegative optio
我在使用受控错误步进器和复杂状态类型的 odeint 库时遇到了问题。我对具有复杂斯图尔特朗道方程的示例中的代码进行了修改,使其包含自适应积分器。代码现在看起来像这样: #include #incl
有一些使用 arbitrary precision 的例子和 matrices在 boost.odeint( boost 常微分方程求解器)中。 我想在不同类型的坐标(笛卡尔、极坐标或作用角)中使用
我是一名优秀的程序员,十分优秀!