This file is indexed.

/usr/share/octave/packages/control-2.6.2/__dss2ss__.m is in octave-control 2.6.2-1build1.

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
## Copyright (C) 2009-2014   Lukas F. Reichlin
##
## This file is part of LTI Syncope.
##
## LTI Syncope 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.
##
## LTI Syncope 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 LTI Syncope.  If not, see <http://www.gnu.org/licenses/>.

## -*- texinfo -*-
## Convert descriptor state-space system into regular state-space form.

## Author: Lukas Reichlin <lukas.reichlin@gmail.com>
## Created: September 2011
## Version: 0.2

function [a, b, c, d, e] = __dss2ss__ (a, b, c, d, e)

  if (isempty (e))
    return;
  elseif (rcond (e) < eps)  # check for singularity
    ## check whether regular state-space representation is possible
    [~, ~, ~, ~, ranke, rnka22] = __sl_tg01fd__ (a, e, b, c, false, 0);
    if (ranke+rnka22 < rows (a))
      error ("ss: dss2ss: this descriptor system cannot be converted to regular state-space form");
    endif
  endif

  [a, b, c, d] = __sl_sb10jd__ (a, b, c, d, e);
  e = [];

endfunction


## Test from SLICOT TG01FD
%!shared a, b, c, e, ranke, rnka22, q, z, a_exp, b_exp, c_exp, e_exp, q_exp, z_exp
%! 
%! e = [1, 2, 0, 0; 0, 1, 0, 1; 3, 9, 6, 3; 0, 0, 2, 0];
%! a = [-1, 0, 0, 3; 0, 0, 1, 2; 1, 1, 0, 4; 0, 0, 0, 0];
%! b = [1, 0; 0, 0; 0, 1; 1, 1];
%! c = [-1, 0, 1, 0; 0, 1, -1, 1];
%! 
%! [a, e, b, c, ranke, rnka22, q, z] = __sl_tg01fd__ (a, e, b, c, true, 0.0);
%! 
%! e_exp = [10.1587   5.8230   1.3021   0.0000;
%!           0.0000  -2.4684  -0.1896   0.0000;
%!           0.0000   0.0000   1.0338   0.0000;
%!           0.0000   0.0000   0.0000   0.0000];
%! 
%! a_exp = [ 2.0278   0.1078   3.9062  -2.1571;
%!          -0.0980   0.2544   1.6053  -0.1269;
%!           0.2713   0.7760  -0.3692  -0.4853;
%!           0.0690  -0.5669  -2.1974   0.3086];
%! 
%! b_exp = [-0.2157  -0.9705;
%!           0.3015   0.9516;
%!           0.7595   0.0991;
%!           1.1339   0.3780];
%! 
%! c_exp = [ 0.3651  -1.0000  -0.4472  -0.8165;
%!          -1.0954   1.0000  -0.8944   0.0000];
%! 
%! q_exp = [-0.2157  -0.5088   0.6109   0.5669;
%!          -0.1078  -0.2544  -0.7760   0.5669;
%!          -0.9705   0.1413  -0.0495  -0.1890;
%!           0.0000   0.8102   0.1486   0.5669];
%! 
%! z_exp = [-0.3651   0.0000   0.4472   0.8165;
%!          -0.9129   0.0000   0.0000  -0.4082;
%!           0.0000  -1.0000   0.0000   0.0000;
%!          -0.1826   0.0000  -0.8944   0.4082];
%! 
%!assert (a, a_exp, 1e-4);
%!assert (e, e_exp, 1e-4);
%!assert (b, b_exp, 1e-4);
%!assert (c, c_exp, 1e-4);
%!assert (q, q_exp, 1e-4);
%!assert (z, z_exp, 1e-4);
%!assert (ranke, 3);
%!assert (rnka22, 1);

## test error
%!shared mms
%! 
%! mm = tf([3, 5, 0], [4, 1]);
%! mms = ss (mm);
%!error (__dss2ss__ (mms.a, mms.b, mms.c, mms.d, mms.e));

## Realizable descriptor system with singular E matrix
%!test
%! A = [1 0; 0 1];
%! B = [1; 0];
%! C = [1 0];
%! D = 0;
%! E = [1 0; 0 0];
%! 
%! sys = dss (A, B, C, D, E);
%! [Ao, Bo, Co, Do] = ssdata (sys);
%!
%! assert (Ao, 1, 1e-4);
%! assert (Bo, 1, 1e-4);
%! assert (Co, 1, 1e-4);
%! assert (Do, 0, 1e-4);