【发布时间】:2011-11-29 13:24:58
【问题描述】:
这是一个关于人们认为针对我的问题布置班级结构的最佳方式的问题。我正在做一些数值分析,需要整合某些“元素”。所以我像这样创建了一个名为“BoundaryElement”的类
class BoundaryElement
{
/* private members */
public:
integrate(Point& pt);
};
关键功能是“整合”,我需要针对各种不同的点进行评估。发生的情况是,根据点,我需要使用不同数量的积分点和权重,它们基本上是数字的向量。为了找到这些,我有一个这样的课程:
class GaussPtsWts
{
int numPts;
double* gaussPts;
double* gaussWts;
public:
GaussPtsWts(const int n);
GaussPtsWts(const GaussPtsWts& rhs);
~GaussPtsWts();
GaussPtsWts& operator=(const GaussPtsWts& rhs);
inline double gwt(const unsigned int i)
{
return gaussWts[i];
}
inline double gpt(const unsigned int i)
{
return gaussPts[i];
}
inline int numberGPs()
{
return numGPs;
}
};
使用这个,理论上我可以为每次调用集成函数创建一个 GaussPtsWts 实例。但我知道我可能多次使用相同数量的高斯点,所以我想缓存这些数据。我对如何做到这一点不是很有信心——可能是一个 std::map ,它是 BoundaryElement 类的静态成员?如果人们能对此有所了解,我将不胜感激。谢谢!
【问题讨论】:
-
为什么不直接创建一个
vector<GaussPtsWts>,其中索引对应于构造函数中n的点数?然后只需在integrate的每个调用中引用您需要的那个。
标签: c++ caching integration numerical