Ejemplo n.º 1
0
ExtArray ExtArray::deriv(value_t dt) const
{
    if (isconst()) return const_array(0.0);
    if (data_size_ == 1) {
        const value_t dx = (last_ - data_.get()[0]) / (2 * dt);
        value_t* x = new value_t[2];
        x[0] = dx;   /* left and right finite differences */
        x[1] = dx;
        return ExtArray(shared_owner(x), 0.0, 2);
    } else {
        const value_t dt2 = 2 * dt;
        value_t* x = new value_t[data_size_ + 1];
        /* left/right finite difference for edges, otherwise central diff */
        x[0] = (data_.get()[1] - data_.get()[0]) / dt;
        for (size_t i = 1; i < data_size_-1; ++i)
            x[i] = (data_.get()[i + 1] - data_.get()[i - 1]) / dt2;
        if (data_size_ >= 3)
            x[data_size_ - 1] = (last_ - data_.get()[data_size_ - 2]) / dt2;
        x[data_size_] = (last_ - data_.get()[data_size_-1]) / dt;
        return ExtArray(shared_owner(x), 0.0, data_size_ + 1);
    }
}
Ejemplo n.º 2
0
 constexpr
 std::pair<const_array, const_array> cut(size_t o) const
 {
     return {const_array(d, o), const_array(d + o, n - o)};
 }