在 C++ 中实现 PDE 积分器的周期性边界条件
Implementing periodic boundary conditions of PDE integrator in C++
我需要在 C++ 中实现偏微分方程的有限差分积分器。在Python中我使用了numpy.roll
的方法来滚动数组从而得到周期性的边界条件。
C 中是否有一个库可以提供这种方法?也就是说,当我访问长度为 n
的向量的位置 n+1
时,它将指向向量位置 0
处的单元格?
您可以使用mod运算符调整索引。
#include <vector>
using namespace std;
int roll(vector<int>& v, unsigned int n) {
return v[n % v.size()];
}
int main() {
vector<int> v;
for (int i=0; i<10; ++i) {
v.push_back(i);
}
return roll(v, 2);
}
要滚动整个向量,请使用此函数:
vector<int> rollVector(const vector<int>& v, unsigned int n) {
auto b = v.begin() + (n % v.size());
vector<int> ret(b, v.end());
ret.insert(ret.end(), v.begin(), b);
return ret;
}
我需要在 C++ 中实现偏微分方程的有限差分积分器。在Python中我使用了numpy.roll
的方法来滚动数组从而得到周期性的边界条件。
C 中是否有一个库可以提供这种方法?也就是说,当我访问长度为 n
的向量的位置 n+1
时,它将指向向量位置 0
处的单元格?
您可以使用mod运算符调整索引。
#include <vector>
using namespace std;
int roll(vector<int>& v, unsigned int n) {
return v[n % v.size()];
}
int main() {
vector<int> v;
for (int i=0; i<10; ++i) {
v.push_back(i);
}
return roll(v, 2);
}
要滚动整个向量,请使用此函数:
vector<int> rollVector(const vector<int>& v, unsigned int n) {
auto b = v.begin() + (n % v.size());
vector<int> ret(b, v.end());
ret.insert(ret.end(), v.begin(), b);
return ret;
}