Змінні та типи змінних

Цей розділ, безсумнівно, є найбільш фундаментальною частиною, якою повинен володіти кожен користувач Scilab. Він визначає операції створення та обробки мультиіндексованих об'єктів, які можуть бути матрицями (дійсними числами, булевими значеннями).

змінних

Примітка 1. Змінні утворюються з буквено-цифрового рядка, що починається з літери (але також% $? #) Із 24 символів (окрім цього вони не враховуються).

Примітка 2. Неможливо перепризначити попередньо визначені змінні, а також примітивні функції 2.1 .

Після того, як змінна була визначена, щоб побачити її вміст, просто введіть її ім'я та підтвердьте:

Примітка 3: Під час виконання команди з'являється відповідь ans, це змінна, яку можна перепризначити.

Примітка 4: Якщо змінна існує і містить, наприклад, матрицю, присвоєння цієї змінної іншій величині (не обов’язково одного типу) не генерує повідомлення про помилку або попередження.

Scilab надає корисні команди для управління змінними, які ми можемо згадати

Функція who повертає список змінних (ми знаходимо деякі знання `` A '', ``% i '', ``% e '' та ``% eps ''), інформацію про зайнятий та залишковий простір пам'яті в кількість слів (1 слово = 1 число з подвійною точністю), а в останньому рядку кількість використаних та доступних змінних (усього).

Команди whos (), whos -name 'початок імен змінних', whos -type 'тип змінних' повертають більш детальну інформацію про розмір змінних.

Дуже корисною функцією на матрицях, а отже і на змінних, є функція розміру. Зверніть увагу, що Scilab може складати матриці майже з усього! size повертає кількість рядків і стовпців.

розмір (2). Тому ? Дивіться також: довжина (A), тип (A), a = 2 * A .

Пізніше ми уточнимо існування локальних та глобальних змінних з їх відповідним використанням та властивостями.

Синтаксис, який більше підходить для створення таблиць A і B та наступного Іншими словами

Увага, ця остання команда має знати дві поведінки, перша - там, де відповідь - порожня таблиця. Другий бачить тут, що останнє значення - це значення, яке нижче зазначеної межі. Ця остання специфікація може спричинити труднощі, наприклад, while

Для подолання цієї особливості існує команда linspace, яка використовується у формі linspace (початок, кінець, кількість значень). Цього разу таблиця результатів обов’язково містить граничні значення.

Див. Також журнал (початок, кінець, кількість значень) 2.2 .

Ці звернення до елементів масиву також дозволяють впливати (на всю або) частину масиву:

Вилучення та призначення відіграють однакову роль, і все це вказує на вибраний елемент (и).

Ми вже використовували функцію розміру, для масивів функція length здається більш доречною, повертаючи загальну довжину об'єкта (навіть для матриці).

Однак є невелика хитрість, щоб дістатися до останнього елемента масиву, це використання у виразі $:

Тут ми маємо стандартні функції вилучення, якими володіє більшість мов програмування, але такі мови, як FORTRAN 90 або Matlab 2.3, пропонують можливість безпосереднього вказівки на підмножину масиву: тут ми в дужках наводимо набір підказок. Це справедливо як для видобутку, так і для призначення.

Зверніть увагу на деякі особливості, пропонується можливість мати надлишкові індекси з двома способами поведінки:

- на видобутку - на присвоєння: з кінцем останнє присвоєне значення (в порядку індексів).

  • t (1: 2: $),
  • t ($: - 1: 1)
  • t (:)

Давайте розглянемо ще одну особливість. Якщо ми спробуємо витягти значення 6-го елемента з t, тоді те, що було передбачуваним, з іншого боку динамічно присвоює додаткове значення t. Тепер ми бачимо, що масив достатнього розміру автоматично перерозподіляється, заповнюється 0 .

Примітка: Інтенсивне використання цього динамічного (пере) розподілу може породжувати непомірний час виконання.

Також можна укласти контракт на написання певних присвоєнь, частина в дужках розглядається як набір індексів, для яких ми присвоюємо значення 2. Відповідно до цього принципу ми можемо розподіляти значення поза розміром масиву, як і раніше.

З іншого боку, якщо змінна не визначена заздалегідь, інтерпретатор повертає масив стовпців.

Цю форму письма можна використовувати під час вилучення або з різними розмірами векторів. Це скорочене письмо можна використовувати для обміну змінними

З іншого боку, команда не видаляє змінну, а залишає її порожньою, щоб зникнути змінна потрібно використовувати команду clear .

Є кілька специфічних функцій:

  • sum (): сума елементів.
  • prod (): добуток елементів.
  • mean (): середнє значення елементів.
  • max (), min (): максимальне та мінімальне значення.
  • cumsum (), cumprod (): повертає масив із першим сукупною сумою елементів, а з другим сукупним добутком.
  • sort (), gsort (), lex_sort (): різні процедури сортування.


Вправи

  1. Скласти суму ([]) .
  2. Зробити прод. ([]) .
  3. Просто напишіть 5! з функцією prod .
  4. Ініціалізуємо вектор розміром 10 за допомогою .
  5. Сформувати випадковий вектор розміром 10 (rand (1,10) і нормалізувати його за евклідовою нормою ().
  6. Сформувати таблицю ступенів від до;
  7. Напишіть вектор, що містить значення, for .
  8. Змінити порядок попереднього вектора.
  9. Створіть вектор чисел, що йдуть від вгору з кроком .
  10. Витяг з попереднього вектора декількох рядків .

    нулі (n, p) повертає нульову матрицю з n рядків і p стовпців.

one (n, p), як і раніше, але матриця заповнена 1.

око (n, p) матриця ідентичності розміром n p;

diag (v) або diag (v, i) Використовуючи вектор або масив v, побудуйте матрицю з v як основну діагональ. аргумент i із зазначенням відповідної діагоналі.

rand (n, p) повертає матрицю випадкових чисел рівномірного розподілу на .

Щоб отримати нормальний розподіл або інший, зверніться до відповідної довідки.

matrix (v, n, p) функція (повторного) форматування, переглядайте за стовпцями елементи v, які розміщуються стовпцем за стовпцем у вихідній матриці

Аргумент -1 може замінити один із номерів рядка або стовпця, наприклад колонізацію матриці

Примитиви ones (), нулі () та eye () можна використовувати, передаючи матрицю як аргумент. Результат має ті самі розміри, що і матриця в аргументі.

Але можна вказати набори індексів: один витягує перехрещення підматриці рядків 1 і 2 зі стовпцями 3 і 4. Цей синтаксис ідентичний присвоєнню

Що стосується масивів, ми можемо використовувати надмірність індексів.Зверніть увагу на використання: із зазначенням усіх індексів стовпців (або рядків). Ви також можете використовувати $

Можна розглядати матрицю як вектор, цей вектор складається зі стовпців матриці, розміщених кінцем до кінця:

Примітка: Це подання матриці у вигляді векторів стовпців відповідає режиму зберігання матриць (стовпці за стовпцями).

Можливо скористатися блоковою структурою матриці для її визначення

Ми можемо додати такі функції видобутку, як:

  • diag (A) 2.4: витяг діагоналі матриці A
  • tril (A) та triu (A): відповідно повертає матрицю, що складається з нижньої (нижньої) та верхньої (верхньої) частин A.

Оскільки Scilab є середовищем маніпуляції з матрицею, ми знаходимо більшість інструментів обчислення матриць, таких як:

  • det () Обчислення визначника.
  • trace () Сума діагональних елементів.
  • inv () Обернена до матриці.
  • spec () Обчислення векторів та власних значень.
  • rank () Обчислення рангу матриці.
  • qr () QR розкладання матриці.
  • lu () LU-розкладання (елімінація Гауса) матриці.
  • chol () Холеський розкладання матриці.
та деякі інші функції.


Вправи

  1. Створіть матрицю розміром 10x10 з діагоналлю .
  2. Інвертуйте рядки або стовпці, щоб отримати з попередньої матриці антидіагональну матрицю.
  3. Створіть випадкову матрицю розміром 3x4
    • Поміняйте місцями останній стовпець на перший.
    • Витягніть з матриці перший блок 3x3.
    • Зберіть матрицю розміром 6x4, виготовлену з накладки на матрицю (одну поверх іншої).

Зберіть наступні плашки

  • Сформувати 2 випадкові матриці розміром 4х4, сформувати матрицю яких кожен елемент і sup відповідних елементів перших 2 матриць ().
  • Але ємність матриць операторів сполучень, що надає можливість роботи з булевими матрицями, поширюється на оператори порівняння: Оператори порівняння> $ - >> $ \ egroup ">, => $ -> => $ \ egroup">, (рівність), або> $ - >> $ \ egroup "> (різне).

    Крім того, існують векторні версії операторів сполучення. Ці команди також доступні у матричній формі з перемикачем рядків або стовпців.

    Ще можна використовувати класичні функції, такі як команди matrix (), diag () .

    Більш анекдотично, що існують різні шлюзи між булевим розрахунком і реальним розрахунком. Можна підсумувати булеве значення з дійсними значеннями 0 і, діючи як хибні та істинні значення.

    Це може спричинити вираження форми

    Команда find також може повертати індекси рядків і стовпців пошуку.

    • A = rand (2.3)
    • знайти (A $ "> 0,5)
    • [i, j] = знайти (A $ "> 0,5)


    Вправи

    1. Створіть 2 випадкові матриці розміром 5x5 (A і B). Знайдіть булеву матрицю, що відповідає елементам A, більшим за елементи B (істина, якщо b_ $ -> b _ $ ">).
    2. Створіть 1 випадкову матрицю розміром 5x5, витягніть елементи між 0,3 і 0,7.
    3. Сформувати 1 випадковий вектор розміром 1х10, відняти з елементів, більших за .
    4. Створіть 1 випадкову матрицю розміром 5x5 із цілим числом від 0 до 10. Знайдіть елементи, рівні 0.

    typeof (p), typeof (q), q ('num'), q ('den') з p і q, визначеними вище.

    Запропонована можливість за допомогою команди poly безпосередньо визначити поліном за його коренями (за замовчуванням) або за його коефіцієнтами Команди root () і коеф () дозволяють обернені операції (або виконувати обчислення коренів для першого).

    Допустимі звичайні алгебраїчні команди: сума, множення, ділення та степінь.

    Примітка1: символ '(символічна змінна) був використаний у визначенні полінома r, користувач має вибір своєї поліноміальної змінної, з іншого боку, композиції (сума.) Потрібно використовувати поліноми, що мають ту саму змінну Команда varn () може вирішити цю проблему.

    Примітка2: команда poly може взяти квадратну матрицю як аргумент, результатом у цьому випадку є характерний поліном матриці, якщо матриця не квадратна, тоді елементи зчитуються стовпець за стовпцем, і тому це поліном, визначений тими коріння, що повернулось.

    Щоб оцінити поліном (і дріб), втручається команда horner (поліном, значення)

    • градус (): повертає ступінь багаточлена (а не дріб!).
    • derivat (): отримує поліном або дріб.
    • коеф (): повертає масив коефіцієнтів полінома, класифікованого у порядку зростання.
    • lcm (,), gcm (,): найменший і найбільший загальний кратний.
    • pdiv (), ldiv (): евклідове ділення та поділ у порядку зростання.
    • корені (): витяг або обчислення коренів многочлена.
    • simp (): спрощення дробу.
    • фактори (): розкладання на множники простими елементами.


    Вправи

    1. Запишіть поліном .
    2. Запишіть багаточлен, Обчисліть корені .
    3. Те саме питання, що і раніше, але з, для
    4. Запишіть дріб .
      • Обчислити похідну від .
      • Оцініть в балах і .
      • Знайдіть полюси .

    Рядки символів становлять тип Scilab, і як такі вони визнають правила використання та поведінки.

    Рядок - це вираз, відокремлений одним апострофом (') або подвійним апострофом (").

    щоб одиничний або подвійний апостроф з’явився у виразі, апостроф потрібно подвоїти

    Можна перетворити будь-який числовий вираз у рядок символів за допомогою команди string () .

    Примітка: Зверніть увагу, що наголошені символи нашої дорогої мови не завжди дають очікуваний результат 2.5

    Рядок символів, як і більшість типів Scilab, допускає матричний синтаксис.

    У випадку з матрицею ми можемо використовувати команду strcat (), яка дозволяє розміщувати елементи матриці в кінці (перегляд по стовпцях). В цьому останньому випадку конкатенація проводиться з пробілом, вставленим між кожним терміном.

    конкатенація допускає природні розширення між матрицею (символів) і скаляром (також рядком символів)

    команда strindex () повертає позицію символу або рядка, зазначеного в аргументі.

    • convstr (): змінити `` регістр '' рядка символів (`` u '' або `` l '').
    • grep (): знайти рядок символів в іншому або масив рядків символів.
    • length (): функція length, застосована до символьного рядка, не має такої поведінки, як у інших типах. У цьому випадку він повертає масив, що містить розміри рядків аргументу.
    • str2code () і code2str (): перша функція повертає масив символів коду Scilab, а друга виконує протилежну операцію.
    • strsub (): замінює рядок символів іншим.
    • stripblanks (): видалення пробілів у виразі.

    Зверніть увагу на команду evstr, яка обчислює рядок символів: або на команду execstr, яка вимагає від інтерпретатора виконання Scilab цього рядка: ці останні команди відносно нешкідливі, проте, оскільки ми перебуваємо в інтерпретованому середовищі, це може дати `` динамічну '' символу до програми, навіть дозволяючи її самостійно генерувати !


    Вправи

    1. Сформуйте рядок символів "1,2,3,4,5" .
    2. Знайдіть позиції "o" у "hello", замініть випадки "o" на "-" .
    3. Сформуйте рядок 'pi = 3.1415927', використовуючи заздалегідь визначену змінну% pi .

    Можна створити порожній список

    Ми бачили, що для масивів ми можемо призначити (або витягти) елемент або частину (набір індексів). Для списку типів речі вже не зовсім однакові. Дійсно, якщо ми призначимо частину списку, тоді відповідь негайна

    З іншого боку, під час вилучення ми маємо таку поведінку, але тому дозволяється `` витягувати '' елементи списку за допомогою дужок.

    Ми все ще не можемо видалити набір індексів

    Але будьте обережні, поведінка null () може бути радикальним

    Примітка: елемент list (), порожній список є списком, але не null () .

    Ви можете отримати доступ до полів елемента списку за допомогою ієрархічного режиму вилучення. У наступному прикладі другим елементом списку є масив, ось синтаксис для безпосереднього отримання першого значення масиву:

      Додавання в кінці списку:

    Додавання на початку списку: У цьому випадку індекси автоматично зміщуються, щоб отримати перший елемент за індексом 1.

  • Додавання до індексу: Це стандарт, крім того, як і у випадку з масивами, якщо елемент присвоєний поза індексом списку, Scilab автоматично заповнює до індексу ураженого елемента
  • У цьому випадку ми можемо витягти або призначити за допомогою двох індексів списку

    Ми можемо складати списки списків списків .

    Цей набір функціональних можливостей дозволяє поширити алгебраїчну структуру на інші форми подання. Ми можемо звернутися за допомогою до раціонального, щоб побачити конструкцію раціонального дробу (раціональний дріб складається з двох багаточленів, `` число '' - ератор і `` ден '' - омінатор).

    Синтаксис оголошення такий:

    • name_type: рядок символів, що визначає ім'я типу (наприклад: раціональний).

    ім'я_поля1, ім'я_поля2: рядки символів, що називають елементи керування.

  • field1, field2: різні поля, які можуть бути будь-якого типу Scilab (константа, матриця, логічне значення, список або інший список). Наявність поля1, поля2 не є обов'язковим.
  • Приклад Ми бачимо при виконанні цього прикладу, що набраний список - це список, який містить як перший елемент вектор стовпця символьних рядків, який надає інформацію про структуру змінної

    Тип типу (дріб), тип (дріб), зверніть увагу на роль, яку виконує функція typeof .

    Два інших способи виконуються за назвою полів і суворо еквівалентні: або ще

    Одинарним оператором, який може забезпечити деяку зручність, є дисплей `` оператор ''. Механізм відображення для набраних списків такий: інтерпретатор визначає, чи має серед своїх змінних функцію name_type _p, якщо ця не існує, використовується функція відображення списку.

    Приклад Для нашого прикладу раціональної частки ми можемо визначити (в Інтернеті в Scilab 2.6): щоб отримати такий результат: Зверніть увагу, що ми використовуємо вкладений спосіб різні функції відображення різних типів (тут це функція поліноміального типу ).

    Якщо ми спробуємо додати наш `` раціональний '' до скаляра, невдалий тест дає нам: тут інтерпретатор Scilab шукає функцію% s_a_rational (), що відповідає двійковому оператору підсумовування (`` _a_ '') між скаляром на ліворуч (`` s '') і раціональний тип праворуч. Виглядає законним повідомити Scilab про наші наміри підсумовування, визначивши таку функцію: Отже, суму можна зробити правильно.

    Після виконання кроків, запропонованих як приклад, виконайте дріб +1 .

    Ім'я функцій перевантаження для двійкових операторів відповідає правилу:

    • type1 і type2 можуть бути новими типами (набрані списки) або відповідати наступним заздалегідь визначеним значенням: