Оператор  “:”

Простейшая запись инструкции с оператором " :" выглядит следующим обра­зом:

v =  i : j

где i - это минимальное, a j - максимальное значение индекса, причем i<j. В результате будет создан вектор v = (i; i + 1;…; j). Следующий пример де­монстрирует создание вектора, элементы которого пробегают значения от 2 до 4:

-->v = 2:4

v =

2.  3.  4.

Расширенный вариант записи оператора " :" позволяет указать приращение индекса, называемое также шагом:

v =  i   :   s   :   j

где i и j имеют тот же смысл, что и ранее, a s представляет собой шаг. Данная команда создает вектор v = (i; i + s;i + 2s; i + ns), где n - максимальное целое число, такое что i + ns ≤  j. Если (j — i) делится нацело на s, то максимальное значение индекса совпадает с j, в остальных случаях

i + ns < j. Величина шага s может быть как положительной, так и отрицательной,

В следующем примере создается вектор со значениями от 3 до 10 с шагом 2:

-->v = 3   :   2   : 10

v =

3.  5.  7.  9.

Последнее значение в данном случае равно 9, т.е. меньше j=10.

Следующий фрагмент иллюстрирует результат действия оператора " :" при отрицательном значении шага. В первом случае мы создаем вектор значений, убывающих от 10 до 4. Во втором случае результатом выполнения оператора становится пустая матрица, поскольку начальное значение меньше конечного.

 

-->v = 10  : -2    : 3

v =                   

10.  8.  6.    4.

-->v = 3 : -2 : 10

v =                   

      []           

Используя вектор значений индекса, можно обращаться к элементам мат­рицы в определенных диапазонах строк и столбцов, например,

A(i   :   j   ,  k  : 1)

где i, j, k ,1 - начальные и конечные значения индексов. Полный синтаксис

A(i : s : j ,k: t: 1) включает также задание шагов s и t.

Предположим, что А является матрицей размера 4 х 5. Пусть необходимо об­ратиться к элементам aij, причем i =1, 2, а j = 3, 4. В Scilab для этого потребу­ется всего одна инструкция, А(1:2,3:4), как показано в следущем фрагменте:

-->А =  testmatrix("hilb", 5)

A =

25.     -  300.        1050.        -1400.      630.

-   300.       4800.       -18900.    26880.      -12600.
1050.     -18900.       79380.        -117600.     56700.

-   1400.     26880.     -117600.   179200.    - 88200.
630.       -12600.      56700.          -88200.       44100.

-->A(1:2,   3 : 4)

ans =

1050.       -1400.

  -18900.            26880.

В некоторых случаях значения индексов должны вычисляться динамиче­ски (например, в рамках цикла). Полученные в результате векторы могут ис­пользоваться для адресации элементов матрицы точно так же, как числовые литералы:

A(vi,   vj ) ,

Данная запись выделяет элементы матрицы А, индексы которых принадлежат векторам vi и vj. Следующий пример иллюстрирует эту возможность:

-->А =  testmatrix("hilb", 5)

А =

25.     -  300.            1050.   -1400.               630.

                -300.   4800.         -18900.  26880.           -12600.
    1050.     -  18900.         79380.          -117600.      56700.

-   1400.     26880.       -117600.          179200.          -88200.
630.       -  12600.         56700.          -88200.        44100.

-->vi =1:2

vi =

1.      2.
-->vj =3:4

vj =

3.      4.
-->A(vi,   vj )

ans =

1050.       - 1400.

-   18900. 26880.

 -->vi  = vi  + 1

vi =

2.      3.
-->vj   = vj   + 1

vj =

4.      5.
-->A(vi,   vj )

ans =

26880.       - 12600.

-   117600.        56700.

Можно составить большое число комбинаций с использованием операто­ра “:”. Наиболее часто используемые варианты представлены на рис. 11.

Например, следующий фрагмент демонстрирует пример перестановки строк матрицы А посредством оператора " :":

А

матрица целиком

А(:,:)

матрица целиком

A(i:j,k)

элементы матрицы в k-ом столбце с i-ой по j-ую строку

ACi,j:k)

элементы матрицы в i-ой строке с j-oro по k-ый столбец

A(i,:)

i-ая строка матрицы

A(:,j)

j-ый столбец матрицы

 

Таблица 11: Различные варианты использования оператора " :" для доступа к элементам матрицы.


-->А =  testmatrix("hilb", 3)

 А =

9.       -  36. 30.

-   36.      192.     - 180.
30.     -  180. 180.

-->А([1  2] , :)   = А([2   1] , :)

А =

-   36.      192.     - 180.
9.       -  36. 30.
30.     -  180. 180.

Обменять местами столбцы матрицы А можно при помощи инструкции А (: , [3 1 2]).

В этом разделе нами были рассмотрены несколько важных с практической точки зрения вариантов использования оператора " :". Оператор " :" повсемест­но используется при написании программ, для которых скорость выполнения имеет решающее значение. Именно использованием оператора

" :" достигает­ся векторизация скриптов - одна из ключевых возможностей Scilab, которой уделено особое внимание и в настоящем документе.

© vse-o-scilab

Сделать бесплатный сайт с uCoz