This file is indexed.

/usr/share/octave/packages/interval-1.4.1/ctc_intersect.m is in octave-interval 1.4.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
## Copyright 2015-2016 Oliver Heimlich
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, see <http://www.gnu.org/licenses/>.

## -*- texinfo -*-
## @documentencoding utf-8
## @defun ctc_intersect (@var{C1}, @var{Y1}, @var{C2}, @var{Y2})
## @defunx ctc_intersect (@var{C1}, @var{C2})
##
## Return a contractor function for the intersection of two sets.
##
## Functions @var{C1} and @var{C2} define two sets @code{S1 = @{@var{x} |
## @var{C1} (@var{x}) ∈ @var{Y1}@}} and @code{S2 = @{@var{x} |
## @var{C2} (@var{x}) ∈ @var{Y2}@}}.  The return value is a contractor function
## for the set @code{S1 ∩ S2 = @{@var{x} | @var{C1} (@var{x}) ∈ @var{Y1} and
## @var{C2} (@var{x}) ∈ @var{Y2}@}}.
##
## Parameters @var{C1} and @var{C2} must be function handles and must accept
## the same number of parameters.  See @command{@@infsup/fsolve} for how to
## define contractor functions.  The user manual also contains an example on
## how to use this function.
##
## Instead of solving @code{@var{C1} (@var{x}) ∈ @var{Y1}} and
## @code{@var{C2} (@var{x}) ∈ @var{Y2}} separately and then compute an
## intersection of the result, you can solve
## @code{ctc_intersect (@var{C1}, @var{Y1}, @var{C2}, @var{Y2}) = 0}.
##
## @seealso{@@infsup/fsolve, ctc_union}
## @end defun

## Author: Oliver Heimlich
## Keywords: interval
## Created: 2015-12-20

function c = ctc_intersect (ctc1, y1, ctc2, y2)

## Reorder parameters
switch (nargin)
    case 2
        ctc2 = y1;
        y1 = y2 = 0;
    case 3
        if (is_function_handle (y1))
            y2 = ctc2;
            ctc2 = y1;
            y1 = 0;
        else
            y2 = 0;
        endif
    case 4
        ...
    otherwise
        print_usage ();
endswitch

## Check parameters
if (not (isa (y1, "infsup")))
    y1 = infsup (y1);
endif
if (not (isa (y2, "infsup")))
    y2 = infsup (y2);
endif

if (not (is_function_handle (ctc1)) && not (ischar (ctc1)))
    error ("interval:InvalidOperand", ...
           "ctc_intersect: Parameter C1 is no function handle")
endif
if (not (is_function_handle (ctc2)) && not (ischar (ctc2)))
    error ("interval:InvalidOperand", ...
           "ctc_intersect: Parameter C2 is no function handle")
endif

c = @(varargin) ctc_intersect_eval (ctc1, y1, ctc2, y2, varargin{:});

endfunction


function varargout = ctc_intersect_eval (ctc1, y1, ctc2, y2, varargin)

y = varargin{1};
x = varargin(2 : end);

## Evaluate each contractor function
fval_and_contractions1 = nthargout (1 : nargout, ctc1, y1, x{:});
fval_and_contractions2 = nthargout (1 : nargout, ctc2, y2, x{:});

## Compute fval = y if either function value is inside of its constraints
fval1 = fval_and_contractions1{1};
fval2 = fval_and_contractions2{1};
fval1 = y + y_dist (y1, fval1);
fval2 = y + y_dist (y2, fval2);
varargout{1} = union (fval1, fval2);
## Both contractors must produce a subset of y.
varargout{1}(disjoint (fval1, y) | disjoint (fval2, y)) = infsup ();

## Combine the contractions
for i = 2 : nargout
    varargout{i} = intersect (fval_and_contractions1{i}, ...
                              fval_and_contractions2{i});
endfor

endfunction


function d = y_dist (y, fval)
d = infsup (idist (y, fval), hdist (y, fval));
d(subset (fval, y) & not (isempty (fval))) = 0;
if (columns (y) == 1)
    d = sum (d, 1);
elseif (rows (y) == 1)
    d = sum (d, 2);
else
    d = sum (sum (d));
endif
endfunction