- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在不同时间绘制这个方程。那么时间应该是恒定的,x应该变化,然后绘制y?该方程是 transient 扩散方程的解析解。
到目前为止我的代码:
import numpy as np
from scipy.sparse import diags
import scipy as sp
import scipy.sparse
from scipy import special
import matplotlib.pyplot as plt
def Canalytical(intervals, D=1):
points = 1000
x=np.linspace(0, 1, intervals+1)
t=1
c=np.ones([intervals+1])
sm = 0
pos = 0
for xi in x:
for i in range(points):
sm+=sp.special.erfc((1-xi+2*i)/(2*np.sqrt(D*t))) +
sp.special.erfc((1+xi+2*i)/(2*np.sqrt(D*t)))
c[pos] = sm
pos += 1
sm = 0
return c, x
c, xi = Canalytical(intervals=1000)
plt.plot(xi, c)
plt.show()
最佳答案
图中的方程是错误的。将 x = 0 代入其中,您会发现它不为零。第二个erfc函数前面的符号应该是-
。
时间t
应作为参数传递给 Canalytical,因此该函数可用于 t 的多个值。
使用 1000 项求和是过多的,因为 erfc
在无穷大处衰减得非常快。 erfc(10)
大约是 2e-45
,远远超出了机器精度,更不用说绘图的分辨率了。
此外,在使用 NumPy 评估函数时,请考虑使用向量化。整个数组 x 可以立即传递给函数,从而消除循环。剩下的就是:
import numpy as np
from scipy import special
import matplotlib.pyplot as plt
def Canalytical(intervals, t=1, D=1):
points = 1000
x = np.linspace(0, 1, intervals+1)
c = np.zeros_like(x)
for i in range(points):
c += special.erfc((1-x+2*i)/(2*np.sqrt(D*t))) - special.erfc((1+x+2*i)/(2*np.sqrt(D*t)))
return x, c
plt.plot(*Canalytical(intervals=1000, t=1))
plt.plot(*Canalytical(intervals=1000, t=0.1))
plt.plot(*Canalytical(intervals=1000, t=0.01))
plt.plot(*Canalytical(intervals=1000, t=0.001))
plt.show()
与输出
关于python - 使用 SciPy 多次绘制扩散方程的解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49437126/
这是一个相当奇怪的问题。我正在集成测试 Grails 服务和关联的域类。该域类的一个属性是一个包含 JSON 的 String。数据库字段也是 json 并且有一个自定义的 Hibernate 值类型
假设我想创建一个包集合,比如与 cooking 相关的包。 我将有一个名为 cooking 的核心包,然后我想要多个 cooking 包: cooking -墨西哥 cooking 印度 厨泰 每个人
我正在努力解决以下二阶边界值问题: y'' + 2/x*y' + k**2.0*F(y) = 0 y(x=1)=1, y'(x=0)=0 F(y) = -y or F(y) = -y*exp(AB*
我有一个简单的 Controller ,例如 @Controller public class FooController { @Autowired private BarServic
我是一名优秀的程序员,十分优秀!