在写一个数值优化库tau, 这是一个很小的改动,却事关系全局,是一个有意义的改动
template <typename T>
class function
{
public:
//array1d<real> x0(2, 1.0f);
//function(x0,g0), 检测不出 x0 与 eval中的dim 是否一致
T operator()(const array1d<T>& x, array1d<T>& g)const
{
size_t N=x.size();
g.resize(N);
assert(g.data());
assert(x.data());
return eval(x.size(), x.data(), g.data());
}
virtual T eval(size_t dim, const T *x, T *g) const =0;
};
修正后:
template <typename T>
class function
{
public:
T operator()(const array1d<T>& x, array1d<T>& g)const
{
size_t N=x.size();
if(N!=dim())
throw tau::dimension_exception("dimensions mismatch!");
g.resize(N);
assert(g.data());
assert(x.data());
return eval(x.data(), g.data());
}
virtual size_t dim() const =0;
virtual T eval(const T *x, T *g) const =0;
virtual ::std::string functionName()const { return "f(x)"; }
virtual ::std::string gradientName()const { return "f'(x)"; }
};
本文介绍了一次对数值优化库TAU的小幅但重要的改进。修正了函数调用中维度不匹配的问题,并增强了异常处理机制,确保了计算过程中输入向量与期望维度的一致性。

被折叠的 条评论
为什么被折叠?



