C++库研究笔记—— 对function类定义的修正

在写一个数值优化库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)"; }
};




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值