С какого числа начинается индексация вектора scilab
Перейти к содержимому

С какого числа начинается индексация вектора scilab

  • автор:

vectorfind

Матрица или гиперматрица любого типа, возможно разрежённая: массив в котором будет идти поиск вектора.

Вектор, который надо искать в haystack , того же самого типа. Если haystack является разрежённой, то needle может быть неразрежённой. К тому же, если haystack является логической и используется joker , то needle должна быть числовой, а не логической. В этом случае любой её ненулевой элемент считается равным %T .

  • Десятичные числа, комплексные числа и кодированные целые числа считаются одним типом: числовым.
  • Значения %nan принимаются в needle . Они обрабатываются обычным способом, как и другие значения. Они совпадают только с %nan в haystack .

Направление внутри массива haystack вдоль которого идёт поиск вектора needle . Возможными значениями являются «r» или 1 (вдоль строк), «c» или 2 (вдоль столбцов) или для гиперматрицы любое целое значение, такое, что 2 < dimAlong dimAlong обязателен, когда определён joker или indType .

Одиночный элемент типа данных needle . Элементы needle , равные значению joker игнорируются (сопоставляются/принимаются любые значения из haystack ).

Когда haystack является логическим, то joker должно быть ненулевым числом.

Чтобы пропустить joker , укажите ..dimAlong, ,indType без значения joker .

Одиночное нечувствительное к регистру слово внутри кавычек «» (по умолчанию без текста), «headIJK» и «headN» : Определяет формат или индексы. Смотрите ниже описание переменной ind .

  • Если needle по размеру больше, чем haystack , в выбранной размерности dimAlong , и возвращается ind=[] .
  • Если длина needle соответствует по размеру haystack по выбранной размерности:
    • По умолчанию ( indType==»» ): ind является вектором-строкой, содержащей индексы совпавших строк и столбцов haystack . В случае гиперматрицы возвращаемые индексы совпавших диапазонов линеаризованы через все размерности кроме одной dimAlong (см. примеры).
    • indType=»headN»: ind является вектором-строкой линейных индексов в haystack первых элементов совпавших строк, столбцов и более высоких диапазонов.
    • indType=»headIJK»: ind является матрицей: каждая строка возвращает индексы [i j ..] в haystack первых элементов совпавших диапазонов (строки, столбцы или более высокие диапазоны). ind имеет столько строк, сколько совпавших диапазонов в haystack .

    Возвращаемые индексы сортированы в порядке возрастания.

    Когда используется matching выходная необязательная переменная matching является матрицей с типом данных, как у haystack , возвращающей фактические диапазоны совпадения: диапазон совпадения №i возвращается в строке matching(i,:) .

    Когда haystack является разрежённой, то матрица matching тоже является разрежённой.

    Описание

    vectorfind() ищет указанную последовательность значений needle (иголка) в массиве haystack (стог сена) по указанному прямому направлению/измерению: ширина (строки), высота (столбцы), толщина (подобно пикселям RGB) и т.д. Иголка needle может быть длиннее или короче, чем размер исследуемой стороны стога сена haystack .

    Может быть определено специальное значение, так называемый джокер. Тогда это значение работает, как символ универсальной подстановки там, где он встречается в векторе иглы needle . Поскольку это значение более нельзя выбирать, то — ЛЮБОЕ значение после совпадений в стогу сена haystack на своей позиции —, оно не может одновременно использоваться в игле needle в качестве выбираемого. На практике любое значение, не представленное в стоге сена haystack , обязательно требует хорошего джокера. Однако, это условие не является обязательным.

    Следовательно: когда стог сена haystack является логическим, то джокер — а также вектор иглы needle — должен быть числовым. Действительно, в противном случае было бы невозможно выбрать значение джокера из ограниченного множества значений .

    Когда такой символ универсальной подстановки используется, то фактические значения в совпавших диапазонах не фиксируются. Тогда можно получить их благодаря необязательной выходной переменной matching . В противном случае matching будет пустой (это тривиальный повтор вектора иглы needle ).

    Поиск в гиперматрицах
    • О значении направления dimAlong : Например, мы можем затем исследовать массив haystack по «толщине», то есть сквозь её следующие друг за другом слои haystack(. #. ) . Чтобы так сделать, мы определим здесь dimAlong = 3 . Как и для матриц, этот вид многомерного массива может быть просканирован вдоль его строк или столбцов. Подходящие значения dimAlong имеют некоторые исключения:
      • Поиск иглы как строки сканирует массив сквозь его столбцы. Следовательно, значение dimAlong = «r» должно быть эквивалентно значению dimAlong = 2 вместо 1!
      • Аналогично поиск иглы как столбцы сканирует массив сквозь его строки: Обычное значение dimAlong = «c» должно быть эквивалентно значению dimAlong = 1 вместо 2!

      Для того, чтобы не нарушать общую договорённость, о том что «r»1 и «c»2 используется везде в Scilab, vectorfind() придерживается и справляется с ним. Но нужно иметь в виду лежащий в основе переключатель, чтобы иметь чёткое понимание возвращаемых по умолчанию индексов, когда используются «r»,1 или «c»,2 .

      • С dimAlong = «r» = 1 : в haystack(:,1. )
      • С dimAlong = «c» = 2 : в haystack(1. )
      • С dimAlong = 3 : в haystack(. 1. )
      • С dimAlong = 4 : в haystack(. 1. ) .
      • и др.

      Примеры

      В матрице чисел:

      m = [ 1 0 1 2 2 1 2 2 0 1 0 2 0 2 %nan 2 1 2 2 %nan 1 0 1 2 ]; vectorfind(m,[2 0 1 1], "c") // => 5 vectorfind(m,[2 0 1 1], "c",,"headN") // => 17 vectorfind(m,[2 0 1 1], "c",,"headIJK") // [1 5] // С короткой иглой: vectorfind(m,[2 2]) // => [2 13] vectorfind(m,[2 2], "r",,"headN") // тот же выходной параметр vectorfind(m,[2 2], "r",,"headIJK") // => [2 1 ; 1 4] vectorfind(m,[2 %nan]) // => [4 7] // С символом универсальной подстановки в игле: // пример №1: все столбцы начинаются с 1 и заканчиваются 2: [n, ma] = vectorfind(m,[1 .3 .3 2], "c", .3) // => n = [1 6], ma = [1 2 0 2; 1 2 2 2] // пример №2: все строки, имеющие диапазон [2 * 2] (короткая игла с символом универсальной подстановки): [n, ma] = vectorfind(m,[2 .3 2], "r", .3) // => n = [7 15], ma = [2 %nan 2; 2 1 2] vectorfind(m,[2 .3 2], "r", .3, "headIJK") // => [3 2 ; 3 4] // Примечание: значение %nan соответствует *

      Логическая матрица:

      m = [0 0 0 1 1 0 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 1]==1 // m = // F F F T T F // F T T T F T // T T F T T T // T F T F F T vectorfind(m, [%F %T %T %F], "c") // => 2 vectorfind(m, [%T %T], "c") // => [3 6 13 14 22 23] vectorfind(m, [1 1], "c") // => ошибка: ожидался тот же тип // джокер => игла является числовой: [n, ma] = vectorfind(m, [0 %nan 0 %nan 1], "r", %nan) // => n=[1 8], ma=[F F F T T ; F T F F T]

      В маленьком 8-цветном RGB-изображении (трёхмерная гиперматрица целых чисел типа uint8):

      // Формирование массива яркости цвета: m = [1 1 1 1 1 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 0 1 1 0 0 1 0]; m = uint8(matrix(m,3,5,3)*255) // m = //(. 1) // Красный слой // 255 255 255 255 255 // 255 255 0 0 0 // 255 255 0 255 0 //(. 2) // Зелёный слой // 0 255 0 0 0 // 0 255 0 255 0 // 255 255 0 0 255 //(. 3) // Синий слой // 255 0 255 0 0 // 255 255 255 255 255 // 255 0 0 255 0 // Определяет позицию красных пикселей: vectorfind(m, [255 0 0], 3) // => [10 13] vectorfind(m, [255 0 0], 3,,"headIJK") // => [1 4 1 ; 1 5 1] // Пиксели с включённым зелёным и синим цветом, каким бы ни был их красный канал: // Мы можем использовать десятично-кодированную иглу (не uint8). // Тогда, %nan можно использовать в качестве джокера, который не может быт в изображении с типом uint8: vectorfind(m, [%nan 255 255], 3, %nan,"headIJK") // => [3 1 1; 2 2 1; 2 4 1] // Столбцы из 255: vectorfind(m, [255 255 255], "c") // => [1 2 7 11]

      В четырёхмерной текстовой гиперматрице:

      m = [ "U" "C" "G" "A" "A" "A" "U" "U" "A" "G" "A" "G" "A" "A" "A" "A" "C" "C" "U" "U" "C" "G" "G" "G" "A" "G" "A" "C" "G" "C" "C" "C" "G" "C" "A" "G" "C" "U" "G" "G" "G" "A" "A" "G" "C" "C" "C" "C" "C" "G" "G" "A" "A" "G" "U" "C" "A" "U" "G" "C" ]; m = matrix(m, 3, 5, 2, 2); // (. 1,1) // !U C A G A ! // !A C G G G ! // !A C U A G ! //(. 2,1) // !A G C A C ! // !A A G A A ! // !C A G C G ! //(. 1,2) // !U A U C G ! // !U U C A C ! // !C U G C A ! //(. 2,2) // !G C G G G ! // !G U A G C ! // !C A C G C ! vectorfind(m, ["A" "A" "C"], "c") // => [6 9] vectorfind(m, ["" "G" "G"], "c", "") // => [5 8 19] // Джокер [n, ma] = vectorfind(m, ["" "G" "G"], "c", "", "headN") // => n=[13 22 55], ma=[A G G; C G G; G G G] vectorfind(m, ["" "C" "C"], "c", "", "headIJK") // => [1 2 1 1 ; 1 5 2 2] // Короткая игла vectorfind(m, ["C" "C"], "c",,"headIJK") // => [1 2 1 1; 2 2 1 1; 2 5 2 2] // Короткая игла с джокером vectorfind(m, ["A" "" "A"],"r","","headIJK") // => [1 3 1 1 ; 2 2 2 1]

      Смотрите также

      • find — даёт индексы элементов с ненулевым значением или значением %T
      • members — count (and locate) in an array each element or row or column of another array
      • grep — поиск соответствий строки в векторе строк

      История

      • vectorfind(H,[]) теперь возвращает [] вместо ошибки.
      • Когда игла слишком длинная, теперь вместо ошибки возвращается [] .
      • Теперь может быть использована игла, короче, чем размер стога сена.
      • Значение символа универсальной подстановки, совпавшее с любым значением стога сена теперь может быть определён и использован в качестве иглы. Затем могут быть возвращены фактически совпадающие диапазоны: добавлены необязательные параметры joker и matching .
      • Любое значение %nan , встреченное в игле, теперь обрабатывается как любое иное регулярное значение: оно соответствует значению %nan в стоге сена. Оно ранее никогда не соответствовало.
      • Гиперматрицы могут теперь обрабатываться в качестве стога сена.
      • Исследуемое направление dimAlong теперь может быть числовым: 1, 2, ..
      • Добавлен необязательный параметр indType .

      gsort

      A Скаляр, вектор, матрица или гиперматрица логических значений, целых, вещественных или комплексных чисел, или строковых значений. Разрежённые матрицы вещественных чисел, комплексных чисел или логических значений также могут быть отсортированы.

      Разрешена перегрузка необрабатываемых типов.

      method Ключевое слово или индекс больше 0: метод сортировки:

      ‘g’ : Общая сортировка: сортируются все элементы в A (метод по умолчанию).
      ‘r’ или 1 : Сортируются строки в каждом столбце в A .
      ‘c’ или 2 : Сортируются столбцы в каждой строке в A .
      ‘lr’ : лексикографическая сортировка строк в A : Сортируются строки в соответствии со значениями в первом столбце. Если группа сортированных строк имеет то же значение, что и в столбце №1, то группа пересортировывается в соответствии со значениями в столбце №2, и так далее. Не применимо к гиперматрицам.
      ‘lc’ : лексикографическая сортировка столбцов в A (не для гиперматриц).

      direction направление сортировки: «d»: в порядке уменьшения (по умолчанию); «i»: в порядке увеличения.

      directions вектор символов «i» и «d», у которого столько же элементов, сколько элементов имеет rankFuncs . directions(k) используется для rankFuncs(k) .

      • идентификатор fun функции на языке Scilab, либо встроенной функции.
      • : двоеточие. Ставится для такой fun , для которой fun(A) возвращает A .
      • список list(fun, param1, param2. ) , в котором
        • fun — это идентификатор функции Scilab или встроенной функции.
        • param1, param2. — это параметры.
        • должны поддерживаться R=fun(A) или R=fun(A, param1, param2. ) .
        • fun должна работать поэлементно, то есть: size(R)==size(A) и R(k) по сути равно A(k)
        • R должен быть простым сортируемым типом: логические значения, целые числа, вещественные значения, строковое значение.

        Если A содержит комплексные числа, то можно определить обычные функции real, imag, abs, atan . Тогда atan(imag(A),real(A)) будет вызываться вместо atan(A) .

        B Сортированный массив того же типа, кодирования и размера, что и A .

        k Массив десятичных целых чисел размера size(A) : исходные индексы элементов B в A . Если A матрица, то в соответствии с выбранным методом

        «g» : k это матрица размером size(A) : k(i) — это линейный индекс элемента B(i) в A такой, что B(:) = A(k) .
        «r» : k это матрица размером size(A) : k(i,j) равна 1 ≤ index ≤ size(A,1) элемента B(i,j) в столбце A(:,j) .
        «c» : k это матрица размером size(A) : k(i,j) равна 1 ≤ index ≤ size(A,2) элемента B(i,j) в строке A(i,:) .
        «lr» : k — это столбец размером size(A,1) такой, что B = A(k,:) .
        «lc» : k — это строка размером size(A,2) такая, что B = A(:,k) .

        Описание

        Функция gsort выполняет «быструю сортировку» различных типов данных. По умолчанию сортировка выполняется в порядке убывания.

        Значения %nan считаются больше, чем %inf .

        Комплексные числа по умолчанию сортируются только в соответствии с их модулями. Полная сортировка может быть достигнута, используя многоуровневый режим, через аргументы rankFuncs и directions . Например:

        M = gsort(C, «g», [«i» «d»], list(real, imag))

        отсортирует массив C , сначала в порядке возрастания вещественных частей, и элементов у которых вещественные части равны, а затем в порядке убывания мнимых частей. Многоуровневый режим детально описан в соответствующем подразделе ниже.

        Тексты сортируются в алфавитном порядке, с учётом регистра. Поддерживаются расширенные UTF-символы. The empty text «» is considered «smaller» than any other text.

        Сортировка массивов логических значений главным образом полезна с помощью методов «r», «c», «lr» или «lc».

        Какой бы метод ни выбрали, алгоритм сохраняет относительный порядок элементов с равными значениями.

        Методы сортировки

        B = gsort(A,’g’, ..) сортирует все элементы в A и сохраняет сортированные элементы в первом столбце сверху вниз, а затем во втором столбце и т.д.

        B = gsort(A,’c’, ..) сортирует каждую строку в A . Каждый сортированный элемент находится в той же строке, что и в A , но возможно в другом столбце в соответствии с его рангом сортировки в строке.

        B = gsort(A,’r’, ..) сортирует каждый столбец в A . Каждый сортированный элемент находится в том же столбце, что и в A , но возможно в другой строке в соответствии с его рангом сортировки в строке.

        B = gsort(A,’lr’, ..) сортирует строки в A целиком в лексическом порядке. Две строки сравниваются и сортируются следующим образом. Сравниваются элементы их первых столбцов. Если их ранги не равны, то обе строки сортируются соответствующим образом. В противном случае сравниваются элементы их вторых столбцов, и т.д. вплоть до последнего столбца, если это потребуется.

        B = gsort(A,’lc’, ..) сортируются столбцы в A целиком, в лексикографическом порядке (см. выше).

        Многоуровневая сортировка

        Как отмечено выше, когда два сравниваемых элемента имеют одинаковые ранги, их исходный относительный порядок в A сохраняется в результирующей B .

        Однако, во многих случаях, выходящих за рамки, может быть полезна и затребована многоуровневая сортировка: после выполнения первой сортировки в соответствии с первым критерием и направлением сортировки, можно указать второй критерий и направление сортировки и применить их к одинаковым элементам 1-го ранга, собранным после первой сортировки.

        Если после двух первых сортировок некоторые элементы по-прежнему имеют одинаковый ранг, то можно определить и использовать третий уровень сортировки и т.д.

        1. Сортировка матрицы C комплексных чисел, сначала в порядке увеличения модуля, затем в порядке увеличения фазы: gsort(C, «g», [«i» «i»], list(abs, atan))
        2. Сортировка столбцов матрицы T строковых значений, сначала в порядке увеличения длины, затем в обратном алфавитном порядке: gsort(T, «c», [«i» «d»], list(length, :))
        3. Сортировка матрицы P полиномов, сначала в порядке увеличения степени, затем в порядке уменьшения значения постоянного коэффициента 0-й степени:

        function c = get_coef(p, i) // i: степень возвращаемого коэффициента c = matrix(coeff(p(:))(:,i+1), size(p)) endfunction gsort(P, "c", ["i" "d"], list(degree, list(get_coef,0)))
        function r = get_frac(numbers) r = numbers - int(numbers) endfunction gsort(D, "g", ["i" "d"], list(int, get_frac))

        Примеры

        Сортировка элементов в строках:

        m = [ 0. 2. 1. 2. 1. 0. 1. 1. 3. 1. 0. 3. 2. 3 3. 2. 1. 1. ]; [s, k] = gsort(m, "c")
        --> [s, k] = gsort(m, "c") s = 2. 2. 1. 1. 0. 0. 3. 3. 1. 1. 1. 0. 3. 3. 2. 2. 1. 1. k = 2. 4. 3. 5. 1. 6. 3. 6. 1. 2. 4. 5. 2. 3. 1. 4. 5. 6.

        Лексикографическая сортировка строк:

        v = ['Scilab' '3.1' 'xcos' '4.0' 'xcos' '3.1' 'Scilab' '2.7' 'xcos' '2.7' 'Scilab' '4.0']; [s, k] = gsort(v,'lr','i'); s, k'
        --> [s, k] = gsort(v,'lr','i'); s, k' s = "Scilab" "2.7" "Scilab" "3.1" "Scilab" "4.0" "xcos" "2.7" "xcos" "3.1" "xcos" "4.0" ans = 4. 1. 6. 5. 3. 2.

        Лексикографическая сортировка логических столбцов:

        m = [ 0 1 0 1 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 0 ]==1; m [s, k] = gsort(m, "lc") // сортировка столбцов в порядке убывания
        --> m m = F T F T T T F T F F T T T T F F F F T T F F F F --> [s, k] = gsort(m, "lc") s = T T T T T F F F T T T F F T F F T F F F F T F F k = 4. 5. 6. 2. 8. 3. 1. 7.
        Многоуровневая сортировка

        С некоторыми десятичными числами: Сначала сортировка в порядке возрастания целых частей, а затем в порядке убывания дробных частей.

        // Функция получения дробных частей function r=get_frac(d) r = d - int(d) endfunction // Несортированные данные d = [ 2.1 0.1 1.3 1.2 0.1 1.2 0.3 1.2 2.3 0.3 1.2 2.1 0.1 1.2 1.1 1.2 2.2 1.1 2.3 1.3 0.1 2.3 0.1 0.1 0.1 2.2 2.1 0.2 1.1 0.3 ]; // Сортировка [r, k] = gsort(d, "g", ["i" "d"], list(int, get_frac))
        r = 0.3 0.1 0.1 1.2 1.1 2.2 0.3 0.1 1.3 1.2 1.1 2.2 0.3 0.1 1.3 1.2 2.3 2.1 0.2 0.1 1.2 1.2 2.3 2.1 0.1 0.1 1.2 1.1 2.3 2.1 k = 2. 5. 29. 16. 25. 10. 17. 6. 9. 18. 28. 23. 30. 14. 11. 22. 4. 1. 20. 21. 7. 26. 12. 15. 3. 24. 8. 13. 19. 27.

        С комплексными числами: Сортировка сначала в порядке увеличения вещественных частей, затем в порядке увеличения мнимых частей.

        //c = [-1 1 ; -1 0; 0 2; 0 %nan; 0 -1; 0 %inf ; 0 1; 1 %nan ; 1 1; 1 -1 ; -1 %nan ; 1 -%inf] //c = matrix(squeeze(grand(1,"prm",complex(c(:,1), c(:,2)))), [3,4]) s = "complex([0,0,-1,-1;0,-1,1,1;1,1,0,0]," + .. "[%inf,2,%nan,1;-1,0,-1,%nan;1,-%inf,1,%nan])"; c = evstr(s) [r, k] = gsort(c, "g", ["i" "i"], list(real, imag))
        --> c = evstr(s) c = 0. + Infi 0. + 2.i -1. + Nani -1. + i 0. - i -1. + 0.i 1. - i 1. + Nani 1. + i 1. - Infi 0. + i 0. + Nani r = -1. + 0.i 0. - i 0. + Infi 1. - i -1. + i 0. + i 0. + Nani 1. + i -1. + Nani 0. + 2.i 1. - Infi 1. + Nani k = 5. 2. 1. 8. 10. 9. 12. 3. 7. 4. 6. 11.

        С некоторыми строковыми значениями: Сортировка строк в столбцах, сначала в порядке увеличения длины, затем в алфавитном порядке.

        t = [ "cc" "ca" "ab" "bbca" "b" "ccbc" "aab" "bca" "ac" "bba" "aba" "bb" "a" "cac" "b" "b" "aaaa" "ac" "b" "bbca" "bb" "bc" "aa" "ca" "c" "ba" "cbb" "a" "aab" "abbb" "ac" "c" "cbb" "b" "cabb" "bccc" "aba" "acb" "acb" "b" "cba" "cc" "a" "abbb" "ab" "cc" "bba" "caaa" ]; [r, k] = gsort(t, "r", ["i" "i"], list(length, :))
        --> [r, k] = gsort(t, "r", ["i" "i"], list(length, :)) r = "c" "b" "a" "a" "a" "bc" "b" "b" "ac" "ac" "b" "bb" "b" "cc" "aa" "b" "cc" "ba" "ab" "abbb" "ab" "acb" "ac" "c" "cba" "ca" "aba" "bbca" "bb" "cac" "aab" "ca" "cbb" "cc" "cbb" "bbca" "aab" "abbb" "acb" "bca" "aaaa" "bba" "cabb" "bccc" "aba" "ccbc" "bba" "caaa" k = 4. 5. 6. 4. 2. 3. 2. 2. 2. 3. 3. 2. 1. 6. 3. 5. 1. 4. 1. 6. 6. 5. 4. 4. 6. 1. 2. 1. 3. 2. 1. 3. 5. 6. 4. 3. 4. 4. 5. 1. 3. 2. 5. 5. 5. 1. 6. 6.

        С некоторыми полиномами: Сортировка сначала в порядке уменьшения значений x^0, затем в порядке увеличения степеней.

        function c=get_coef(p, d) // d : степени возвращаемых коэффициентов c = matrix(coeff(p(:))(:,d+1), size(p)) endfunction P = ["[-x,1-2*x,2+2*x,1-x,2,-1-x;" "1-x,-1+x,-1,x,1+2*x,2*x;" "-2+x,1,-2,2+x,-x,-1-x]"]; x = varn(%s,"x"); P = evstr(P) [r, k] = gsort(P, "g", ["d" "i"], list(list(get_coef, 0), degree))
        --> P = evstr(P) P = -x 1 -2x 2 +2x 1 -x 2 -1 -x 1 -x -1 +x -1 x 1 +2x 2x -2 +x 1 -2 2 +x -x -1 -x --> [r, k] = gsort(P, "g", ["d" "i"], list(list(get_coef, 0), degree)) r = 2 1 1 -x x -1 -1 -x 2 +2x 1 -x 1 +2x -x -1 +x -2 2 +x 1 -2x -x 2x -1 -x -2 +x k = 13. 6. 10. 11. 8. 18. 7. 2. 14. 15. 5. 9. 12. 4. 1. 17. 16. 3.
        С гиперматрицей

        Сортировка столбцов в каждой строке:

        h = matrix([9,7,9,0,2,9,4,2,0,9,5,8,5,2,0,0], [2,4,2]) [s, k] = gsort(h, "c", "i")
        --> h = matrix([9,7,9,0,2,9,4,2,0,9,5,8,5,2,0,0], [2,4,2]) h = (. 1) 9. 9. 2. 4. 7. 0. 9. 2. (. 2) 0. 5. 5. 0. 9. 8. 2. 0. --> [s, k] = gsort(h, "c", "i") s = (. 1) 2. 4. 9. 9. 0. 2. 7. 9. (. 2) 0. 0. 5. 5. 0. 2. 8. 9. k = (. 1) 3. 4. 1. 2. 2. 4. 1. 3. (. 2) 1. 4. 2. 3. 4. 3. 2. 1.

        Сортировка значений по страницам:

        h = matrix([9,7,9,0,2,9,4,2,0,9,5,8,5,2,0,0], [2,4,2]) [s, k] = gsort(h, 3, "i") // по третьей размерности = 'толщина' гиперматрицы
        --> h = matrix([9,7,9,0,2,9,4,2,0,9,5,8,5,2,0,0], [2,4,2]) h = (. 1) 9. 9. 2. 4. 7. 0. 9. 2. (. 2) 0. 5. 5. 0. 9. 8. 2. 0. --> [s, k] = gsort(h, 3, "i") s = (. 1) 0. 5. 2. 0. 7. 0. 2. 0. (. 2) 9. 9. 5. 4. 9. 8. 9. 2. k = (. 1) 2. 2. 1. 2. 1. 1. 2. 2. (. 2) 1. 1. 2. 1. 2. 2. 1. 1.

        Смотрите также

        • сравнение — операторы сравнения, отношения
        • strcmp — сравнение символьных строк
        • find — даёт индексы элементов с ненулевым значением или значением %T
        • перегрузка — возможности перегрузки отображения, функций и операторов

        Литература

        Quick sort algorithm from Bentley & McIlroy’s «Engineering a Sort Function». Software—Practice and Experience, 23(11):1249-1265

        История

        • Теперь можно сортировать логические значения.
        • Многоуровневая сортировка, добавленная с помощью опции rankFuncs.
        • Для разрежённого входа, gsort() ранее была ограничена вещественными или комплексными векторами и только методом ‘g’. Теперь она полностью способна к работе с разрежёнными векторами и двумерными матрицами логических, вещественных или комплексных чисел, всеми методами ‘g, r, c, lr, lc’. Многоуровневая сортировка возможна для всех типов разрежённых входных данных.
        • Теперь возможна сортировка вдоль размерности более 2.

        Практикум БСМП Scilab

        —> // Конец сессии второго задания =========================================== 3.2.5. Контрольные вопросы по теме 1) Способы создания векторов и матриц. 2) С использованием какой функции можно определить длину вектора? 3) С использованием каких функций можно определить в матрице число строк, число столбцов и общее количество элементов матрицы? 4) С какого числа начинается индексация вектора? 5) Какую матрицу создает операция ones ? 6) Каким образом в Scilab могут быть объединены две матрицы? 7) Назначение и формат функции cat ? 8) Каким образом создается вектор с постоянным шагом? 9) Можно ли создать матрицу, элементы строки которой изменяются с постоянным шагом? 10) Каким образом удалить из матрицы определенный столбец? 11) Что такое векторизация? 12) Стандартное индексирование векторов и матриц. 13) Что такое векторное индексирование матриц. 14) Что такое логическое индексирование матриц. 15) Что такое поэлементные действия (операции с точкой) и где они используются? 16) Каким образом можно транспонировать вектор или матрицу? 17) Требуется ли при работе с векторами и матрицами предварительное объявление их размера? 18) Какой символ используются для разделения элементов матрицы в строке, а какой для разделения ее строк? 19) Какие команды предназначены для заполнения матрицы случайными числами, распределенными по равномерному или нормальному закону распределения? 21

        20) Формат команд выбора минимального и максимального значения элемента матрицы. 22

        3.3. Лабораторная работа по теме «Построение двумерных и трехмерных графиков» 3.3.1. Вопросы , подлежащие изучению 1) Построение графиков функций одной переменной . 2) Средства инструментальной панели графических окон. 3) Построение трехмерных изображений с использованием функций Scilab mesh , plot3 , surf и controur . 3.3.2. Общее задание 12) Изучите материал учебника (п.1.4) . 13) Выберете вариант индивидуального задания из табл. 1.4-1 . 14) Выполните команды clear и clc для очистки окна Определителя данных и Командного окна . 15) Опишите функцию f1(x) . 16) Задайте диапазон изменения аргумента функции f1(x) и вычислить ее значения. 17) Задайте диапазон изменения аргумента функции f1(x) для построения графика. 18) Выполните функцию построения графиков plot для получения графика f1(x). 19) Опишите функцию f2(x). 20) Разместите графики функций f1(x) и f2(x) в одном окне, для чего после построения графика первой функции выполнить команду mtlb_hold(‘on’) . При построении графиков примените все возможности оформления линий, маркеров и окон, используя возможности графического редактора, измените толщину окон и величину шрифта . 21) Дополните графики необходимыми пояснениями: заголовок, имена осей, координатная сетка и легенда . 22) Задайте диапазоны изменения значений x и y для построения функции f3(x,y) и получите таблицы их значений. 23) Опишите функцию f3(x,y). 24) Получите таблицу значений функции f3(x,y ) . 25) Получите графики функции f3(x, y) с использованием функций построения графиков mesh(), plot3, surf и controur . 26) Сохраните текст рабочего окна на внешнем носителе 27) Предоставьте результаты работы преподавателю, ответьте на поставленные вопросы. 28) Оформите отчет по выполненной работе . 23

        3.3.3. Варианты индивидуальных заданий Таблица 1.4.3-1

        1 f1(x) Sin(1 0.2x 2 ) x
        f2(x) e x 2
        f 3( x , y ) x 2 y 2 8sin( x y ) cos( x y )
        2 f ( x ) x Sin (1 / x )
        f 2( x ) e x ln( x ) x
        f 3( x , y ) x 2 2 y 2 sin 2 ( x y ) 0.5 e x sin( y )
        3 f 1( x ) 1 x Sinx ln(1 x )
        f 2( x ) (1 x ) 1/ 2 Cos (1 x )
        f 3( x , y ) x 3 2 y 2 sin( x y ) cos( x y ) x 2 y
        4 f ( x ) Sinx 2 Cosx 2 10 x
        f 2( x ) x 2 ln(1 x ) 3
        f 3( x , y ) x 3 2 y 2 sin( x y ) cos( x y ) x 2 y
        5 f ( x ) Cos ( x / 2) ln( x 1)
        f 2( x ) Cos ( x / 5) (1 x ) 1/ 2 x
        f 3( x , y ) x 3 2 y 3 8sin( x y ) cos( x y ) 5 x
        6 f 1( x ) 3 x e x
        f 2( x ) 4(1 x 1/ 2 ) ln( x ) 10
        f 3( x , y ) 3 x 3 y 2 cos( x y ) x 2 x 9 xy
        7 f 1( x ) Sinx 3 1/ 2 Cosx 4 x 4
        f 2( x ) x 1 /(3 Sin (3.6 x ))
        f 3( x , y ) x 2 2 y 2 sin 2 ( x y ) 0.5 e x sin( y )
        8 f 1( x ) 0,25 x 3 Cos ( x / 4)
        f 2( x ) 2 x ln( x )
        f 3( x , y ) 3 x 3 y 2 cos( x y ) x 2 y 9 xy e x cos( y )
        9 f 1( x ) x 2 4 Sin ( x )
        f 2( x ) tg (0,36 x 0,4) x 2
        f 3( x , y ) 3 x 3 y 2 cos( x y ) x 2 y 9 xy e x cos( y )
        10 f 1( x ) 1 lg( x ) 0,5
        f 2( x ) 2 lg( x ) x / 2
        f 3( x , y ) 3 x 3 y 2 cos( x y ) x 2 y 9 xy
        11 f 1( x ) X sin( x ) 0,25
        f 2( x ) lg(0,4 x 0,4) x 2
        24
        f 3( x , y ) x 3 y 2 x sin 2 ( x y ) 2 y 9 xy
        12 f 1( x ) Сos (0,387 x )
        x
        f 2( x ) lg( x ) 7 /(2 x 6)
        f 3( x , y ) x 3 y 3 sin 2 ( x y ) 2 y 9 xy
        13 f 1( x ) tg (0,5 x 0,2) x 2
        f 2( x ) 3 x Cos ( x ) 1
        f 3( x , y ) x y 3 sin 2 ( x y ) 2 y 9 x
        14 f 1( x ) x lg x 0,5
        f 2( x ) 1,8 x 2 Sin (10 x )
        f 3( x , y ) x y 3 sin 2 ( x y ) 2 y 9 x 2

        15 f 1( x ) сtg (1,05 x ) x 2 f 2( x ) x lg x 1.2

        f 3( x , y ) 5 x 2 y 3 2 y 9 x 0.5 e y
        16 f 1( x )
        lg( x 2)
        f 2( x ) Sin 0.5 x 2 ( x / 2) 2
        f 3( x , y ) 5 x 2 y 2 2 y 9 xe sin( x )
        17 f 1( x ) 0,5 x lg( x 1) 2
        f 2( x ) Sin (0,5 x ) 2 x 0,5
        f 3( x , y ) 5 x 2 7 y 2 cos( x y ) 2 y 9 xe sin( x )
        18 f 1( x ) ln( x / 6) x
        f 2( x ) log 2 ( x ) 1/( x 2)
        f3(x, y) 15x 2 7y 2 cos(x y) 2x 9x 6
        19 f 1( x ) lg(2 x ) x 2 3
        f 2( x ) ln(1 2 x ) 2 x
        f 3( x , y ) 15 x 2 7 y 2 cos( x y ) 2 y 9 x y 6
        20 f 1( x ) e x 2 x 2
        f 2( x ) 2 e x x 2 2
        f 3( x , y ) 3 x 2 y cos( x y ) 2 y 4 9 x 3 x 2 y
        21 f 1( x ) 2 x 2 e x / 2
        f 2( x ) 2 arqtg ( x ) 3 x 2
        f 3( x , y ) 5 x 2 y 3 2 x 3 y x 3 3 3 x y
        22 f 1( x ) Sin ( x 0,5) x 0,8
        f 2( x ) ( x 3) 2 lg( x 2) 2
        f 3( x , y ) 5 x 2 y 3 2 x 3 y x 3 sin(3 x y )
        23 f 1( x ) x 3 Cosx x 2
        f 2( x ) ( x 1) lg( x 11) 1
        25
        f 3( x , y ) 5 x 2 y 3 2 x 3 y x 3 sin(3 x y )
        24 f 1( x ) e 2 x Cos (2 x ) x
        f 2( x ) x 2 Cos (2 x ) 1
        f 3( x , y ) 5 x 2 y 3 2 x y 3 sin(3 x y 3 ) 8 y cos( x )
        25 f 1( x ) (2 x )2 x 1
        f 2( x ) ( x 2) 2 1 2 x
        f 3( x , y ) x 2 y 3 2 x y 3 sin(3 x y 3 ) 5 y cos( x ) e x
        26 f 1( x ) e x x 1
        f 2( x ) 0,5 x 3 ( x 2) 2
        f 3( x , y ) 5 x 2 8 y 2 2 x y 10 sin(3 x y 3 ) 5 y x
        27 f 1( x ) ( x 2) 2 lg( x 5) 1
        f 2( x ) ( x 1) 2 lg( x 3) 1
        f 3( x , y ) 5 x 2 8 y 2 2 x 2 y 2 10 sin( x y 3 ) 5 x 3 cos( x y ) 3
        28 f 1( x ) 2 x 2 2 x 20
        f 2( x ) x log 3 ( x 1) 1
        f 3( x , y ) 5 x 3 y 3 2 x 2 y 7( x y ) 2 sin(3 x )
        29 f 1( x ) 0,5 x 3 ( x 1) 2
        f 2( x ) 2 arctg ( x ) x 3
        f 3( x , y ) e x (5 x 2 8 y 2 ) 2 x 2 y 2 10 sin( x ) cos(10 y )
        30 f 1( x ) 5 x 6 x 3
        f 2( x ) 2 Cos ( x ) x 2 3 x 2
        f 3( x , y ) 5 x 2 y 3 2 x 3 y 2 x sin(3 x y ) y 2 cos( x )

        3.3.4. Содержание отчета 1) В форме комментариев: x Название лабораторной работы x ФИО студента, номер группы x № варианта x Индивидуальное задание 2) Протокол вычислений (сессии) в Командном окне, снабженный соответствующими комментариями. 3.3.5. Примеры выполнения задания Пример выполнения задания 1(одномерные функции) 26

        1) В соответствии с п.п.3-9 общего задания
        выполнитьзадание. Построить графики одномерныхфункций
        § 1 · sin(x) .
        f1(x) x ln ¨ ¸ , f2(x) 1 10
        x 1
        © ¹ x

        2) Решение задания 1: построение графиков функций от одной переменной с использованием сценарияи протокола: // Сценарий Pr1_4_1.sce задания 1 // Определение функций f1 иf2 // и построение графиков двух одномерных функций clear; //Очистка окна Обозревателя данных clc; //Очистка Командного окна // Диапазон изменения аргумента для функции f1(x) x=-0.5:0.3:6; // Вычисление вектора значений функции f1(x) f1=x.*log(1./abs(x+1)); scf(1); // Графическое окно 1 plot(x,f1);// График функции f1(x) // Описание функции f2(x) functiony=f2(x) y=1+10*sin(x)./x; endfunction // Определение вектора значений аргумента для функции f2(x) t=[0.2:0.2:5]; // Построение графика f2(x)и оформление линий и маркеров plot(t, f2 (t),’LineStyle’,’-‘,’Color’,’green’. ‘Thickness’,3,’Marker’,’o’,’MarkerEdgeColor’,’r’. ‘MarkerFaceColor’,’k’,’MarkerSize’,10); // Оформление линий и маркеров и новое построение графика f1(x) plot(x,f1,’LineStyle’,’—‘,’Color’,’red’. ‘Thickness’,3,’Marker’,’s’,’MarkerEdgeColor’,’b’. ‘MarkerFaceColor’,’y’,’MarkerSize’,10); // Оформление подписей графиков, осей и сетки xtitle(‘Графики функций f1(x) и f2(x)’,’X’,’Y’) legend(‘Функция f1(x)’,’Функция f2(x)’,1) xgrid // Конец сценария Pr1_4_1.sce========================================== —>// Сессия командного окна для выполнениязадания 1: —>// Практическое занятие 1.4 по теме —> // «Визуализация результатов вычислений» —> // Вариант 0, задание 1 —> // Выполнил:Студент группы БИН1801 Иванов И.И. —> // Вызов сценария Pr1_4_1.sce —> // и построение графиков функции одной переменной —> 27

        —>exec(‘Pr1_4_1.sce’);

        Пример выполнения задания 2 (функция от двух переменных) 1) В соответствии с п.п.10-12 общего задания выполнить задание. Построить графикфункции f3(x,y)=x 2 +2y 2 . 2) Решениезадания 2: построение графиков различного вида дляфункции отдвух переменных (протокол сессии). —> // Сессия Командного окна задания 2: —> // Практическое занятие 1.4 по теме —> // «Визуализация результатов вычислений» —> // Вариант 0, задание 2 —> // Выполнил:Студент группы БИН1801 Иванов И.И. —> // Построение различных видов графиков функции двух переменных —> —>// zM = xM.^2 + 2 * yM.^2 —> —> // Формирование двух матриц xM и yM —> [xM, yM] = meshgrid(-4 : 4, -4 : 4) xM = 0. 1. 2. 3. 0. 1. 2. 3. 0. 1. 2. 3. 0. 1. 2. 3. —> yM = -3. -3. -3. -3. 28

        -2. -2. -2. -2.
        -1. -1. -1. -1.
        0. 0. 0. 0.
        —>
        —> // Формирование матрицы zM
        —>deff(‘k = f(x, y)’, ‘k = x.^2 + 2 * y.^2’);
        —>zM = f(xM, yM)
        zM =
        48. 41. 36. 33. 32. 33. 36. 41. 48.
        34. 27. 22. 19. 18. 19. 22. 27. 34.
        24. 17. 12. 9. 8. 9. 12. 17. 24.
        18. 11. 6. 3. 2. 3. 6. 11. 18.
        16. 9. 4. 1. 0. 1. 4. 9. 16.
        18. 11. 6. 3. 2. 3. 6. 11. 18.
        24. 17. 12. 9. 8. 9. 12. 17. 24.
        34. 27. 22. 19. 18. 19. 22. 27. 34.
        48. 41. 36. 33. 32. 33. 36. 41. 48.
        —>
        —> // Формирование векторов xV и yV
        —>x2 = -4 : 4; y2 = -4 : 4;
        —>
        —> // Построение двумерных графиков
        —>scf(1); mesh(xM, yM, zM) // Сетчатый график (окно 1)
        —> scf(2); plot3d(xV, yV, zM ) // График точек, соединенных отрезками
        —> // прямых (окно 2)
        —>scf(3); surf(xM, yM, zM) // График сплошной поверхности (окно 3 )

        —>scf(4); contour(xV, yV, zM, 7) // График контурных линий (окно 4) 29

        3.3.6. Контрольные вопросы по теме 1) Назначение функции scf(n) . 2) Какой номер у первого графического окна? 3) Можно ли создать графическое окно с определенным номером? 4) Каким образом можно закрыть графическое окно? 5) Назначение элементов меню графического окна: Файл , Инструменты , Правка , Справка . 6) Каким образом можно закрыть графическое окно? 7) Как выполнить настройку элементов графика (оси, толщина линий, шрифты и т.д.) с использованием элементов меню графического окна? 8) Можно ли с использованием одного оператора plot построить несколько графиков? 9) Можно ли в одном графическом окне построить несколько графиков одного типа? 10) Можно ли в одном графическом окне построить несколько графиков разных типов? 11) Каким образом в операторе указывается цвет и символ отображения графика? 12) Какой пояснительной информацией может быть снабжен график, построенный в графическом окне? 13) Назначение и формат функции xtitle ? 14) Для чего используется функция legend ? 15) Каково назначение функции mtlb_hold ? 16) Каково назначение функции meshgrid при построении трехмерных изображений? 17) Какие типы графиков позволяет построить Scilab? 30

        Базовые средства матпакета Scilab

        Если связанные между собой данные имеют разные типы, то их можно сохранить путем объединения в массив ячеек, где ячейка содержит часть данных. Ссылка на элементы массива ячеек производится с использованием индексирования. При этом для индексирования массива ячеек используются круглые скобки () , а для индексирования содержимого ячеек, используются фигурные скобки <> . Массивы ячеек удобны для структурирования разнородной информации. Для доступа к данным, хранящимся в структуре, необходимо знать названия полей структуры, тогда как для доступа к данным массива ячеек нужны только индексы, указывающие на конкретную ячейку. Самый простой вариант создания ячейки состоит в использовании фигурных скобок <>. Элементы одной строки массива отделяются друг от друга запятой, а столбцы точкой с запятой. Массивы ячеек в этом отношении аналогичны матрицам, но без ограничений на типы данных, находящихся внутри ячеек. В ячейке может находиться структура или массив ячеек. Для удобного просмотра содержимого массивов следует также использовать окно Редактор переменных. Кроме того, тип данных cell удобен для организации массивов данных, когда заранее не известен тип этих данных или известно, что данные разнородны. Таким образом, вектор ячеек является универсальным контейнером – его элементы могут содержать любые типы и структуры данных, с которыми работает Scilab – векторы чисел любой размерности, строки, векторы структур и другие (вложенные) векторы ячеек. Векторы ячеек могут быть созданы либо путём последовательного присваивания значений отдельным элементам массива, либо созданы целиком при помощи специальной функции cell . Однако в любом случае важно различать ячейку (элемент вектора ячеек) и её содержимое. Ячейка – это содержимое плюс некоторая оболочка (служебная структура данных) вокруг этого содержимого, позволяющая хранить в ячейке произвольные типы данных любого размера. Рассмотрим пример создания вектора ячеек для хранения разных типов данных (рис. 1.3.6-1). —> // Создание векторов ячеек для хранения данных разных типов —> book = struct(‘title’, ‘Онегин’, ‘author’, ‘Пушкин’, ‘year’, 2000) book = title: [1×1 string] author: [1×1 string] year: [1×1 constant] —> —> Vcell(1) = , Vcell(2) = , Vcell(3) = Vcell = [1×1 struct] Vcell = [1×1 struct] 81

        [1×1 string] Vcell = [1×1 struct ] [1×1 string ] [1×1 constant] —> —> Vcell <1>ans = title: [1×1 string] author: [1×1 string] year: [1×1 constant]

        [1×1 struct] —> —> VcellArray = cell(2, 2) VcellArray = [0x0 constant] [0x0 constant] [0x0 constant] [0x0 constant] Рис. 1.3.6-1 Создание векторов ячеек для хранения данных разных типов На рис. 1.3.6-1 задан вектор ячеек Vcell с тремя элементами. Первый элемент соответствует структуре, второй – строке, а третий – числу. В этом и заключается особенность организации данных с помощью ячеек: у каждого элемента свой тип данных. Для обращения к содержимому той или иной ячейки используются фигурные скобки, внутри которых ставится индекс элемента, с которым предполагается работать. Если же используются круглые скобки, то будет возвращена структура данных вместо отдельных значений. Для того чтобы задать вектор или матрицу ячеек с пустыми (неопределенными) значениями, используется функция cell ( VcellArray =cell(2,2) ) . Данную инициализацию целесообразно выполнять, когда нужно определить большой вектор или матрицу ячеек и в цикле задавать их значения. В этом случае Scilab сразу создает массивы нужных размеров, в результате чего повышается скорость выполнения программ. На рис. 1.3.6-2 показано, как извлечь несколько элементов из массива ячеек – список, разделенный запятыми, учитывая, что массив ячеек 4×6 . —> // Извлечение несколько элементов из массива ячеек —> C = cell (4, 6); —> for k = 1:24 > C = k * 2; > end —> C = [2] [10] [18] [26] [34] [42] [4] [12] [20] [28] [36] [44] 82

        [6] [14] [22] [30] [38] [46] [8] [16] [24] [32] [40] [48] —> —>С <:, 5>ans = 34 ans = 36 ans = 38 ans = 40 —> // Это то же самое, что вводить С, C, С, C Рис. 1.3.6-2 Извлечение несколько элементов из массива ячеек Рассмотрим еще один пример (р ис. 1.3.6-3), в котором показано, как считывать и записывать данные массива ячеек. Для этого создадим массив ячеек 2×3 текстовых и числовых данных. —> // С читывание и запись данных в массив ячеек и из массива ячее к

        —>
        —> C =

        ‘three’; 1, 2, 3>
        C =
        [1×1 string ] [1×1 string ] [1×1 string ]
        [1×1 constant] [1×1 constant] [1×1 constant]
        —>
        —> upLeft = C(1:2, 1:2)
        upLeft =
        [1×1 string ] [1×1 string ]
        [1×1 constant] [1×1 constant]
        —>
        —> // Замена значений элементам первой строки
        —>C(1,1:3) =
        C =
        [1×1 string ] [1×1 string ] [1×1 string ]
        [1×1 constant] [1×1 constant] [1×1 constant]
        —> nicC = C(2,1:3)
        nicC =
        [1×1 constant] [1×1 constant] [1×1 constant]
        —>
        —> // Преобразование массива ячеек в вектор

        —>nicV = cell2mat(nicC) 1. 2. 3. Рис. 1.3.6-3 Считывание и запись данных в массив ячеек и из массива ячеек Существует два способа ссылки на элементы массива ячеек. Можно заключить индексы в круглые скобки () и обращаться к массиву ячеек, 83

        например, для того, чтобы определить подмножество массива. Также можно заключить индексы в фигурные скобки <> , и сослаться на элементы данных (текст, числа или другие данные) в отдельных ячейках. Индексы массива ячеек в круглых скобках относятся к наборам ячеек. Например, круглые скобки используются, чтобы создать массив ячейки 2×2 , который является подмножеством C . Обновление набора ячеек выполняется их заменой с тем же числом ячеек. Например, чтобы заменить ячейки в первой строке C используется эквивалент массив ячеек размера ( 1×3 ). Чтобы заменить содержимое ячейки, аналогично можно индексировать и с использованием фигурных скобок (рис. 1.3.6-4). —> // Индексирование с использованием фигурных скобок —> —> last = C <2, 3>last = 3. —> C <2, 3>= 300 ; —> C <2, 3>ans = 300. —> las = C las = las(1) first las(2) 1. las(3) second las(4) 2. —>las(1) ans = first Рис. 1.3.6-4 Индексирование с использованием фигурных скобок Если элементы в массиве содержат числовые данные, можно преобразовать ячейки в числовом массиве, используя функцию cell2mat . Доступ к содержимому ячеек (число, текст или другие данные в ячейках) производится путем индексации с использованием фигурных скобок. Например, для доступа к содержимому последней ячейки C , используйте фигурные скобки. Можно получить доступ к содержимому нескольких ячеек путем индексации с фигурными скобками. 84

        1.3.7.Контрольные вопросы 1) Какие способы создания векторов и матриц реализованы в Scilab? 2) Каким образом создается вектор с постоянным шагом? 3) Можно ли создать матрицу, элементы строки которой изменяются с постоянным шагом? 4) С какого номера начинается индексация вектора? 5) Какая функция позволяет определить длину вектора? 6) Какие функции предназначены для определения числа строк, числа столбцов матрицы и общего количества ее элементов? 7) Что такое «пустая матрица» и как ее создать? 8) Какую матрицу создает операция ones ? 9) Каким образом в Scilab могут быть объединены две матрицы? 10) С использованием каких функций матрицы могут динамически изменять свой размер в процессе выполнения программы? 11) Для чего предназначены в Scilabфункции matrix и resize_matrix ? 12) Назначение и формат функции cat ? 13) Каким образом удалить из матрицы определенный столбец? 14) Что такое векторизация? 15) Что такое стандартное индексирование векторов и матриц? 16) Что такое векторное индексирование матриц? 17) Что такое логическое индексирование матриц? 18) Что такое поэлементные действия (операции с точкой) и где они используются? 19) Каким образом можно транспонировать вектор или матрицу? 20) Требуется ли при работе с векторами и матрицами предварительное объявление их размера? 21) Какой символ используются для разделения элементов матрицы в строке, а какой для разделения ее столбцов? 22) Какие команды предназначены для заполнения матрицы случайными числами, распределенными по равномерному или нормальному закону распределения? 23) Какой командой можно осуществить выбор минимального и максимального значения элемента матрицы. 24) В каких случаях матрицы могут динамически изменять свой размер? 25) Как создается массив ячеек? 26) Что представляют собой операции доступа извлечения и модификации матриц? 27) Что такое индексирование и векторизация? 28) Что такое логическая индексация? 29) Когда можно использовать функцию find ? 85

        1.4. Средства визуализация в системе Scilab Пользователь Scilab имеет целый ряд возможностей для визуализации данных: высокоуровневые графические функции ( plot, surf, mesh и многие другие); интерактивную среду, компоненты которой позволяет изменять свойства элементов графика; специализированные функции и средства для графического отображения характеристик исследуемых объектов и результатов вычислений; низкоуровневые средства построения графиков и простейших геометрических фигур; низкоуровневые средства построения графических интеофейсов пользователей. Высокоуровневая графика позволяет пользователю получать результаты в графическом виде, прикладывая минимум усилий. Основную работу, связанную с построением графика, масштабированием осей, подбором цветов и т.д. берет на себя среда Scilab. В некоторых случаях этих средств оказывается недостаточно.Например, если создаваемое приложение должно осуществить вывод графических результатов в готовом виде, не предполагающем их дальнейшую правку, или в ходе своей работы управлять элементами графиков: удалять поверхности, изменять цвет и толщину линий, добавлять стрелки и поясняющие надписи и т.д. В этих случаях использование дескрипторной (низкоуровневой) графики дает возможность полного контроля над элементами высокоуровневой графики. Кроме того, дескрипторная графика будет полезна при создании собственных приложений. Ее понимание обязательно для эффективного написания приложений с графическим интерфейсом пользователя. Кроме того, большинство высокоуровневых графических функций допускают обращение к ним с использованием низкоуровневых свойств того графического объекта, который они создают. В последующих параграфах рассматриваются высокоуровневые и низкоуровневые графические средства, а также средства для создания графических интерфейсов пользователей (GUI). 86

        1.4.1. Высокоуровневые графические средства. Средства отображение графиков функций и простейших геометрических фигур Основные понятия высокоуровневой графики Графическое изображение в высокоуровневые графики – это чаще всего графическое представление графика функций или графическое изображение простейших геометрических фигур. В среде Scilab все графики строятся по точкам, при этом каждые две соседние точки соединяются друг с другом отрезком. Чем меньше расстояние между точками, тем меньше искажение графика за счет замены его реального образа кусочно-линейной функцией. Поэтому главным ограничивающим фактором в желании получить как можно более гладкоепредставление графического изображения, является то, что координаты точек нужно хранить в оперативной памяти. Внешний вид графика определяют следующие факторы: Вид математической функции в системе координат : o одной переменной – графики функции с одной переменной в заданной системе координат:  в прямоугольной системе координат;  в полярной системе координат;  в комплексной плоскости (например, годографы);  в векторной плоскости; o двух переменных – графики функции с двумя переменными в заданной системе координат :  в пространственной прямоугольной системе координат;  в сферической системе координат;  в цилиндрической системе координат;  в векторном пространстве. Способ представленияв виде: o точечного графика ; o линейного графика (с учетом всевозможных представлений линии); полигонального графика ; градиентного графика ; контурного графика; гистограммы . 87

        Графические окна Графические изображения (объекты) в Scilab отображаются в специальных Графических окнах , причем в одном графическом окне (в одной системе координат) могут быть построены несколько графических объектов, ана экранедисплея могут быть размещены одновременно несколько графических окон, причем разных типов. Графические окнаимеют свою нумерацию. Чтобы создать новое графическое окно с конкретным номером достаточно выполнить функцию scf: h = scf( id ) ; h = scf() , где : id – необязательный целочисленный параметр, задающий номер окна,а h – дескриптор создаваемого окна, который связан с набором свойств этого окна и их значениями. Если параметр, указывающий номер создаваемого окна, отсутствует, то система присваивает окну последний незанятый порядковый номер, начиная с нуля. В ответ функция scf возвращает дескриптор окна, а также набор его свойств, причем большая часть значений свойств заранее предопределена (т.е. заданы по умолчанию), кроме того п ервое обращение к одной из графических команд автоматически вызывает появление графического окна, которому присваивается номер ноль ( id =0 ) рис.1.4.1-1). Рис. 1.4.1-1 Графическое окно с номером 0 Элементы меню, расположенного в верхней части графического окна, предоставляют большой набор команд, предназначенных для отображения и оформления графиков, позволяющих в интерактивном режиме и без использования программного кода придать графику желаемый вид, а кнопки панели дублируют наиболее часто используемые пункты меню, ускоряя тем самым процесс оформления графика.Каждый элемент меню содержит набор команд, соответствующих его названию: 88

        Файл : Новое графическое окно, Загрузить…, Сохранить…, Экспортировать, Копировать в буфер, Параметры страницы, Печать, Закрыть ; Инструменты : Показать/скрыть панель инструментов, Увеличить область, Исходный вид, 2D/3D вращение ; Правка : Установить текущим графическим окном, Очистить графическое окно…, Свойства графического окна…, Свойства осей, Разрешить выбор объектов, Включить/выключить управление подсказками данных, Начать/остановить изменение данных кривых ; Справка : Содержание, О Scilab . Наиболее часто используемые команды вынесены на панель

        инструментов в виде кнопок.
        Переход между Командным окном и Графическим
        окном осуществляется с помощью комбинации клавиш или с

        помощью мыши. Закрыть графическое окно можно традиционным способом – щелчком по крестику, расположенному в правом верхнем углу окна, или выполнением команды xdel( id ) , в скобках которой указывается id – номер закрываемого графического окна. Перечень всех открытых графических окон можно посмотреть, выполнив команду winsid , которая выводит в следующей строке номера открытых графических окон (рис.1.4.1-2). —>// Примеры использования команд scf , xdel и winsid —> scf(2); scf(3); scf(5);// Открытие графических окон 2,3,5 —>winsid// Вывод списка открытых графических окон ans = 2. 3. 5. —> —>xdel(3);// Удаление графического окна с номером 3 —>winsid ans = 2. 5. —>scf(); Рис. 1.4.1-2 Примеры использования команд scf , xdel и winsid После каждого вызова функции scf появляется графическое окно с соответствующем номером, а в Командном окнеотображаются свойствасозданного окна. Причем основная область графического окна называется рабочей областью, и на ней можно отображать любые графические объекты . 89

        Следует отметить, что если за время сеанса не было создано ни одного графического окна, с помощью функции scf , то любая графическая функция создает ее автоматически. Построение графиков функций от одной переменной Начнем знакомство с графической системой Scilab построением графика функции одной переменной. Самым простым способом построения графика функции y=f(x) являетсяформирование двух векторов одинаковой длины (вектора значений аргументов x и вектора соответствующих им значений функции у ) с последующим выполнением функции plot(x,y) . Функция plot(x,y) открывает графическое окно и отображает в нем график функции y(x) .

        x
        Рассмотрим, например, построение графика функции y e 2 на

        отрезке [-1.5;1.5]. В результате выполнения функции plot(x,y) появляется Графическое окно 0 с графиком функции (рис.1.4.1-3). —>// Построение графика функции —> —>x = -1.5 : 0.01 : 1.5; —>y = exp(-x.^2); —> plot(x, y)

        Рис. 1.4.1-3. Построение графика функции

        Обратите внимание, что элемент меню графического окна File имеет команду Копировать в буфер обмена , которая позволяет копировать окно в буфер обмена, и, которое впоследствии можно вставить в Word или другой текстовый редактор. 90

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *