c++ - 在 C++ 中解决 3 个方程依赖变量的问题
问题描述
方程在这里 嗨!我尝试使用 C++ 中的 FD 方法求解 3 个 pde 方程,但我不知道为什么我总是得到一半的准确答案。这些方程是依赖变量。我对 g(x,y) 和 g(y,x) 有疑问。当我在 eq 3 中删除 g(y,x) 时,结果不会改变。但是当我删除 g(x,y) 时,我得到了零,所以我认为我们需要为依赖变量做一些事情。我不知道。我希望得到帮助
if(g[i][k][j]!=g[k][i][j] && i!=k)
u[i][k][j+1]=u[i][k][j]*(1.0 - 2.0*dt)
+(dt/(dx*dx))*(g[i+1][k][j]- 2.0*g[i][k][j]+g[i-1][k][j])
+(dt/(dx*dx))*(g[k+1][i][j]- 2.0*g[k][i][j]+g[k-1][i][j])
+(dt/(dy*dy))*(g[i][k+1][j]-2.0*g[i][k][j]+g[i][k-1][j])
+(dt/(dy*dy))*(g[k][i+1][j]-2.0*g[k][i][j]+g[k][i-1][j]); //(eq 1)
g[i][k][j+1]=g[i][k][j]*(1 - dt)
+dt*u[i][k][j]
+(dt/(dy*dy))*(v[i][k+1][j]-2*v[i][k][j]+v[i][k-1][j])
+(dt/(dx*dx))*(v[i+1][k][j]-2*v[i][k][j]+v[i-1][k][j]); //(eq 2)
v[i][k][j+1]=v[i][k][j]+(g[k][i][j] + g[i][k][j])*dt; //(eq 3)
解决方案
从您的图片和代码猜测,我认为您可能缺少一对大括号
if(i!=k && g[i][k][j]!=g[k][i][j]) {
u[i][k][j+1] = ...;
g[i][k][j+1] = ...;
v[i][k][j+1] = ...;
}
另请注意,g[i][k][j]!=g[k][i][j]
如果类型为float
or double
(或complext<float>
等complex<double>
),则比较可能会失败,请参阅这篇文章。
推荐阅读
- arangodb - arangodb kill 查询不起作用 require("org/arangodb/aql/queries").kill("2418")
- java - JSON 属性的自定义命名 - JAX-RS 解组
- sql-server - 使用 SSIS 进行数据迁移(64 位 oracle)
- node.js - mocha, chai 测试 nodejs 中的帖子
- react-native - 在 react-native-maps 上显示自定义图像作为标记
- ios - 如何设置自动布局约束,使 UIImageView 的高度等于父视图的高度?
- django - 是否可以从 Chrome 扩展程序进行重定向 + POST
- scala - 在 Spark 中按 RDD 的一列排序
- ruby-on-rails - Rspec before(:each) 有效,但 before(:all) 无效
- java - 码头服务器中的 jboss-deployment-structure.xml 等效项