function [fk, Fk] = sine_f(k, xk, params)
    n      = size(xk, 1);
    index  = params.sine_f_index;
    offset = params.sine_f_offset;
    if (size(index, 1) ~= 2) | (size(index, 2) ~= 1)
        size_index_1 = size(index, 1)
        size_index_2 = size(index, 2)
        error('sine_f: index is not a column vector with two elements')
    end
    if (size(offset, 1) ~= 2) | (size(offset, 2) ~= 1)
        size_offset_1 = size(offset, 1)
        size_offset_2 = size(offset, 2)
        error('sine_f: offset is not a column vector with two elements')
    end
    if (max(index) > n) | (min(index) < 1)
        max_index = max(index)
        min_index = min(index)
        error('sine_f: max(index) > size(xk, 1) or min(index) < 1')
    end
    fk = xk( index(2) ) - sin( xk( index(1) + offset(1) ) ) - offset(2);
    Fk           = zeros(1, n);
    Fk(index(2)) = 1;
    Fk(index(1)) = Fk(index(1)) - cos( xk( index(1) + offset(1) ) );
    return
end