python - 用于 PDE 离散化的矩阵与循环
问题描述
我正在尝试使用 diffeqpy 通过空间维度的离散化来求解 PDE,而我将时间维度视为一组常微分方程。我设法使用 for 循环解决了一个非常简单的问题。但是,当我尝试使用矩阵来扩大问题时,求解器会提供错误的答案。
以下代码有效:
from diffeqpy import de
import numpy as np
def f(du,u,p,t):
#define shape of matrix
s = (6,7)
cc = np.matrix((np.zeros(s)))
for j in range(0,6):
for i in range(0,6):
if (j == i):
cc[j,i] = -1.0
cc[j,i+1] = 1.0
for j in range(0,6):
du[j] = cc[j,0]*u[0] + cc[j,1]*u[1] + cc[j,2]*u[2] + cc[j,3]*u[3] + cc[j,4]*u[4] + cc[j,5]*u[5] + cc[j,6]*u[6]
u0 = [0.1,0.0,0.0,0.0,0.0,0.0,1.0]
tspan = (0., 20.)
prob = de.ODEProblem(f, u0, tspan)
sol = de.solve(prob)
此代码类似于以下同样有效的代码:
from diffeqpy import de
def f(du,u,p,t):
du[0] = -u[0]+u[1]
du[1] = -u[1]+u[2]
du[2] = -u[2]+u[3]
du[3] = -u[3]+u[4]
du[4] = -u[4]+u[5]
du[5] = -u[5]+u[6]
u0 = [0.1,0.0,0.0,0.0,0.0,0.0,1.0]
tspan = (0., 20.)
prob = de.ODEProblem(f, u0, tspan)
sol = de.solve(prob)
但是,当我尝试使用矩阵运算时,问题并没有正确解决。我没有计算机科学背景。不过,我想了解更多。为什么以下代码不起作用?它与可变对象与不可变对象有关吗?如何利用矩阵使这个问题扩展到更大的离散化步骤?
from diffeqpy import de
import numpy as np
def f(du,u,p,t):
#define shape of matrix
s = (6,7)
cc = np.matrix((np.zeros(s)))
for j in range(0,6):
for i in range(0,6):
if (j == i):
cc[j,i] = -1.0
cc[j,i+1] = 1.0
x = np.matrix(u).T
du = (cc*x).T
u0 = [0.1,0.0,0.0,0.0,0.0,0.0,1.0]
tspan = (0., 20.)
prob = de.ODEProblem(f, u0, tspan)
sol = de.solve(prob)
我将不胜感激有关此问题的任何指导。
解决方案
如果您不进行就地修改,请使用 3 参数形式:
from diffeqpy import de
import numpy as np
def f(u,p,t):
#define shape of matrix
s = (6,7)
cc = np.matrix((np.zeros(s)))
for j in range(0,6):
for i in range(0,6):
if (j == i):
cc[j,i] = -1.0
cc[j,i+1] = 1.0
x = np.matrix(u).T
du = (cc*x).T
u0 = [0.1,0.0,0.0,0.0,0.0,0.0,1.0]
tspan = (0., 20.)
prob = de.ODEProblem(f, u0, tspan)
sol = de.solve(prob)
推荐阅读
- wordpress - Wordpress:在 page.php 上显示 Sticky Post
- javascript - 搜索按钮目标= _blank jquery 变量
- javascript - 如何限制输入字段的值?
- python - 如何显示带有我使用 Dash 上传组件上传的文件的 pandas 数据框?
- asp.net - 如何为特定的 IIS 应用程序设置环境变量?
- c++ - 进程以 -1073741571 状态终止(0 分钟,3 秒)
- python - tf.convert_to_tensor(pred_labels) - ValueError: Argument must be a dense tensor: got shape [2, 436, 1024, 2],但想要 [2]
- python - Python collections.Mapping:__iter__ 和 __contains__ 尚未提供的 dict_keys 的使用
- c# - 如何在 Visual Studio 中以特定方向加载图像?
- python - 使用触摸事件获取小部件中图像的像素坐标