В своїх цифрових продуктах Dystlab використовують власний математичний рушій — MathSIV©. Цей високотехнологічний інструмент дозволяє виконувати математичні обчислення, вирішувати системи рівнянь, перетворювати вирази в символьній (аналітичній) формі, здійснювати числове та символьне диференціювання та інтегрування, тощо. MathSIV оперує дійсними числами (-2.5, 4.6e8, Pi), комплексними числами (2+3.2I), одно-, дво- та тривимірними векторами й матрицями (M=[1 2 3]), логічними типами даних (if{x<1}(a b)), а також фізичними величинами з довільними одиницями вимірювання (A=2.5 мм^2).


Математичний рушій MathSIV базується на синтаксичних правилах, традиційно прийнятих у математиці та комп'ютерних обчисленнях. На відміну від електронних таблиць, формули яких містять адреси комірок "A1+B2", дана технологія оперує безпосередньо іменами змінних та функцій "2*a+3*b". Порядок обчислень в MathSIV також загальноприйнятий: все, що обчислюється "нижче", має посилатися на те, що вказано "вище". Це суттєво підвищує загальну читабельність формул і структурує алгоритм обчислень. До того ж, рушій має відкриту текстову нотацію — усі математичні вирази набираються простим текстом і можуть бути використані в інших програмах (наприклад, Excel, Matlab).

Розглянемо синтаксичні правила математичного рушія MathSIV.

Коротка довідка про правила синтаксису MathSIV

  • будь-який математичний вираз може містити літерали, масиви, змінні, оператори, функції, тощо;
  • підтримуються дійсні та комплексні числа, логічний тип, масиви, фізичні величини;
  • імена змінних та функцій мають починатися з літери, але далі можуть містити числа та/або знак підкреслення;
  • чутливість до регістру: великі та малі літери в іменах змінних та функцій інтерпретуються як різні;
  • оператори у математичних виразах виконуються зліва-направо;
  • допускаються вбудовані або довільні (користувацькі) функції;
  • функції можуть містити аргументи в круглих дужках "( )" та параметри в фігурних дужках "{ }";
  • вектори та матриці реалізуються через масиви даних; масив позначається за допомогою квадратних дужок "[ ]";
  • допускаються вбудовані фізичні величини або похідні, створені на їхній основі; одиниці вимірювання відокремлюються від числового значення пробілом.

Основні синтаксичні правила

Математичні вирази можуть містити:

  • літерали (дійсні або комплексні числа): 1, 7.6, -2.45e+5, 2+3.2I
  • змінні: a, x1, MyVar
  • оператори: a+b, x^3, i>100
  • функції: f(t), x(a b), y{1}(t)

Приклад математичних команд в MathSIV:

// input expressions:
a=100
y(x)=3.5*x
b=a/4


// evaluate expressions:
a=100
y(a)=350
b=25

Типи даних

Літерали, змінні та функції в MathSIV можуть бути наступних типів:

  • Real (дійсне число): 1, 2.4, -10.2e3
  • Complex (комплексне число): 2+3.2I, -4I
  • Boolean (логічний тип): True, False
  • Array (масив / вектор): [1 2]
  • Matrix (прямокутна матриця): [[1 2] [3 4]]
  • Block (тривимірний масив): [[[1 2] [3 4]] [[1 2] [3 4]] [[1 2] [3 4]]]
  • Physical quantity (фізична величина): 2.5 kN; -6.8 MPa; 200 mm

Літерали

Літерал це безіменна константа або символ, що має незмінне значення. MathSIV розпізнає літерали у вигляді дійсних чисел, комплексних чисел, фізичних величин. Наприклад, у виразі 2*(x+y) символ "2" є числовим літералом.

Дійсні числа

Числові літерали можуть бути записані в звичайній або експоненціальній (науковій) формі, залежно від величини і обраного формату. Приклади чисел в звичайному форматі: "100", "1.23", "-45.67". Приклади чисел в експоненціальному форматі: "1.23E-3", "-2.45e+5".

Комплексні числа

Комплексні числа мають дійсну ти уявну частини, розділені символом "+" або "–". Дійсна частина є звичайним дійсним числом, а уявна — дійснім числом з символом уявної одиниці "I". Символ "I" є незмінним і не може бути використаний в інших цілях, в тому числі як ім'я змінної чи функції. ВАЖЛИВО: символ добутку між дійсною частиною та символом "I" в комплексному літералі не вказується. Приклади комплексних чисел: "I", "-4I", "2+3.2I", "-2e2-4.45I", "2.45+I", "-1.2e-3+4.5e+2I".

Системні константи

Математичний рушій MathSIV містить наступні вбудовані константи:

  • e (Euler number)
  • π, Pi (Pi number)
  • ∞ (positive infinity)

Змінні

Змінна це іменований параметр математичної моделі MathSIV. Ім'я змінної може містити алфавітно-цифрові символи та символ підкреслення, але першим символом завжди має бути літера. Рушій допускає використання латинських, грецьких, кириличних, арабських та інших літер в іменах змінних. Протягом життєвого циклу, змінна може неодноразово змінювати своє значення або тип. Коли змінній присвоюється нове значення або змінюється її тип, попередня інформація втрачається:

// add a variable "x":
x=3.6

// using a value x=3.6
y=2*x

// assign a new value:
x=8.2

До математичних виразів величина змінної потрапляє через її ім'я. Якщо змінна "A" дійсного числового типу має величину "1.0", то результат обчислення математичного виразу "A+1" буде "2.0". Змінюючи величину змінної, ви впливаєте на усі вирази, де вона далі використовується (але не до цього моменту). Регістр має значення: змінні "x" та "X" інтерпретуються як різні.

Оператори

Синтаксично, оператор — символ для позначення певної математичної операції. Наприклад, у виразі x+y плюс є оператором, що позначає операцію додавання. З функціональної точки зору, оператор виконує певну дію над даними (вони звуться операндами) і вертає результат цієї операції. В математичному рушії MathSIV використовується низка операторів, кожен з яких відповідає за певну операцію.

Унарні та бінарні оператори

Класифікація операторів може бути різною. Поширеним є поділ операторів на унарні та бінарні. Унарний оператор має один операнд та може бути префіксом (йти поперед операнду) або суфіксом (після операнду). Приклад унарного префікс-оператору це віднімання ("-x", де "-" це оператор, "x" — операнд). Приклад унарного суфікс-оператора це факторіал ("n!", де "!" це оператор, "n" — операнд). Бінарний оператор має два операнди і зазвичай розташовується між ними. Прикладом бінарного оператору є операція додавання ("x+y", де "+" це оператор, а "x" and "y" — операнди).

Пріоритетність та асоціативність

Кожен оператор характеризується пріоритетом і асоціативністю. Пріоритет визначає порядок обчислення в математичному виразі: оператори з вищим пріоритетом застосовуються до їхніх операндів раніше за оператори з нижчим пріоритетом. Наприклад, у виразі "x+y*z" першою буде виконана операція множення "y" та "z", а потім — операція додавання "x" до результату попереднього множення. Це тому, що оператор "*" має пріоритет, вищий за оператор "+".

Порядок обчислень в MathSIV може бути змінено використанням круглих дужок "()".

Як саме оператори з однаковим пріоритетом будуть виконуватися під час обчислень, визначає їхня асоціативність. Розглянемо вираз "2^3^4", де символ "^" є оператором піднесення числа до степеня. Результат обчислення такого виразу залежить від того, як його інтерпретувати: "(2^3)^4=8^4" або "2^(3^4)=2^81". Асоціативність "зліва-направо" визначає, що оператори виконуються послідовно в напрямку від найлівішого до найправішого у виразі (перший варіант). Асоціативність "справа-наліво" визначає, що оператори виконуються від найправішого до найлівішого у виразі (другий варіант). MathSIV використовує перший варіант, тобто всі оператори у математичних виразах є ліво-асоціативними і завжди виконуються "зліва-направо":

(2^3)^4=4096
100/4/2=12.5

Синтаксичні правила для операторів

Математичний рушій MathSIV підтримує:

  • базові алгебраїчні операції: +, -, *, /, ^
  • логічні операції: &, \, ¬
  • умовні операції: =, >, <, ≤, ≥, ≡, ≠, ≈

Існують також оператори для більш специфічних випадків. Повний перелік операторів MathSIV дивіться тут:

Загалом, для операторів визначено наступні синтаксичні правила:

  • алгебраїчні бінарні оператори мають пріоритет, визначений загальними правилами математики;
  • умовні оператори (бінарні) мають нижчий пріоритет, ніж алгебраїчні;
  • бінарні логічні оператори мають нижчий пріоритет, ніж умовні;
  • оператори зі стрілками (бінарні) мають вищий пріоритет, ніж оператор степеня;
  • унарні оператори мають вищий пріоритет, ніж бінарні;
  • суфіксні оператори мають вищий пріоритет, ніж префіксні;
  • всі бінарні оператори є ліво-асоціативними.

Функції

Синтаксично, функція є іменованою операцією над даними, що звуться аргументами. Прикладом функції є синус "sin(x)", де "sin" це ім'я функції, а "x" — її аргумент. Ім'я функції визначає, які саме операції потрібно провести з її аргументом(-ми).

Окрім аргументів, функція може мати параметри. Наприклад, функція логарифму "a" з основою "b" logb(a) має один аргумент "a" та один параметр "b". За семантикою, параметри ідентичні аргументам, адже також визначають операції над даними. В MathSIV параметри функцій записуються у фігурних дужках "{ }".

Синтаксичні правила для функцій

Основні правила, які визначають роботу функцій в MathSIV:

  • аргументи функції записуються у круглих дужках "( )";
  • параметри функції записуються у фігурних дужках "{ }";
  • аргументи і параметри розділяються пробілами " ";
  • якщо функція не має параметрів, фігурні дужки можна не вказувати;
  • круглі дужки (для аргументів) потрібні завжди;
  • функція може мати кілька параметрів та/або аргументів;
  • в одній моделі можуть використовуватись функції з однаковими іменами, але різною кількістю аргументів та/або параметрів, або для роботи з різними типами даних.

Ось приклади деяких синтаксично коректних функцій:

  • max(a b) — максимум з двох аргументів;
  • random() — випадкове число (функція без аргументів);
  • log{b}(a) — логарифм "a" з основою "b" (один параметр "b", один аргумент "a");
  • P{n m}(x) — асоційована функція Лежандра (два параметри "n" та "m", один аргумент "x").

Типи функцій

Функції в MathSIV підтримують наступні типи даних: Real, Complex, Boolean, Array, Matrix, Physical.

Похідна функції

Для деяких вбудованих функцій в MathSIV заздалегідь визначено похідну (Derivative). Якщо похідну для функції не визначено, ви так само можете використовувати її у виразах і отримати символьну похідну (якщо аргументи та параметри функції не залежать від змінної).

Вбудовані та користувацькі функції

В математичному рушії MathSIV використовується низка вбудованих функцій: sin, cos, abs, pow, log, sqrt та інші. Повний перелік дивіться тут:

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

y(x)=2*sin(x)
f(a)=2+a/5

Вектори та матриці

Математичний рушій MathSIV дозволяє використовувати у виразах спеціальні структуровані дані — вектори та матриці. Такі дані ще називають масивами:

  • Array — одномірний масив або вектор : A=[1 2 3 4 5]
  • Matrix — двомірний масив або прямокутна матриця: M=[[1 2] [3 4]]
  • Block — трьохмірний масив: [[[1 2] [3 4]] [[1 2] [3 4]] [[1 2] [3 4]]]

Одно-, дво- та трьохмірні масиви можуть містити дані усіх основних типів MathSIV. Масиви більшої розмірності також допускаються, але можуть містити лише дійсні числа (тип Real).

Правила індексації масивів

Для доступу до окремого елементу масиву в MathSIV використовуються індекси. Кожен елемент одномірного масиву має один унікальний індекс, елемент двомірного масиву (аналог прямокутної матриці) — два індекси, елемент тривимірного масиву — три індекси.

Індексація починається з нуля: перший елемент масиву має нульову адресу (A[0]).

Індекси записуються в квадратних дужках "[ ]". Наприклад, доступ до i-го елементу масиву A надає вираз "A[i]". Для доступу до матриці використовуйте синтаксис "M[i][j]":

A=[1 2 3 4 5]
M=[[1 2] [3 4] [5 6]]

A[0]=1 M[0][1]=2

Основні правила індексації:

  • індекси можуть бути застосовані тільки до змінних;
  • множинна індексація (багатовимірність) загалом підтримується;
  • кожен індекс має бути заключений в окремі дужки "[ ]";
  • індекси є цілими числами; операції над ними мають здійснюватися в рамках алгебри цілих чисел;
  • з індексованих даних можна робити вибірки.

В математичному рушії MathSIV масиви можуть містити дані одного з наступних типів: Real, Complex, Boolean.

Вибірка даних з масиву

MathSIV допускає вибірку з масиву структурованих даних. Вибірка є частиною базового масиву (фактично, це новий масив меншого розміру), яка реалізується шляхом опускання індексів. Наприклад, отримати i-й рядок матриці M можна командою "M[i][]" або навіть "M[i]". Відповідно, j-й стовпець матриці M можна отримати командою "M[][j]":

M=[[1 2] [3 4] [5 6]]

//
// get elements, rows, columns of the matrix M:
//
M[0][1]=2
M[2]=[5 6]
M[2][]=[5 6]
M[][0]=[1 3 5]

Операції над векторами та матрицями

З масивом можна працювати безпосередньо. Використовуйте для цього квадратні дужки "[ ]", відділяючи елементи масива пробілом:

// input:
a1=2.2 a2=-5 a3=6
A=[a1 2*a2 -a3]
// output:
A=[2.2 -10 -6]

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

// input:
A=[[1 2] [3 4]] B=[[5 6] [7 8]] C=A*B D=A×B E=∑A

// output: C=[[5 12][21 32]] D=[[19 22][43 50]] E=[4 6]

Фізичні величини

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

// input:
A=25 cm^2 F=4.5 kN S=F/A•{MPa}

// output: S=1.8 MPa

Тип даних "фізична величина"

Фізична величина є окремим типом даних, яка складається з двох літералів: числового значення та текстового позначення одиниць. Окрім загальних синтаксичних правил MathSIV (див. вище), змінні та функції цього типу підпорядковуються додатковій умові — відповідність розмірностей.

Синтаксичні правила для фізичних величин

  • пріоритет: якщо у математичному виразі зустрічається бодай одна фізична величина, то результат обчислення також буде фізичною величиною
  • у бінарних операціях результуюча фізична величина має одиниці величини, останньої у виразі: (4 cm)+(20 mm)=60 mm
  • між фізичною величиною і одиницею вимірювання має бути пробіл: 10 kN
  • знак множення в одиницях вимірювання замінюється пробілом: 10 kN m
  • знак поділу в одиницях вимірювання вказується явно, через символ "/": 10 kN/m
  • степінь в одиницях вимірювання вказується явно, через символ "^": 10 kg/m^3

Розмірності. Фізичні величини. Одиниці вимірювання та префікси одиниць

MathSIV виконує обчислення на основі правил, прийнятих в математиці та фізиці. Загалом, рушій містить:

  • 11 базових розмірностей (час, маса, довжина та ін.);
  • 76 фізичних величин (швидкість, сила та ін.);
  • 25 префіксів до одиниць (мілі-, кіло-, Мега- та ін);
  • більше 100 одиниць вимірювання: м, с, кг, Па, Н та ін. (перелік постійно оновлюється).

Повний перелік префіксів та одиниць дивіться тут. За потреби, ви також можете створювати власні одиниці (див. нижче).

Обчислення в системі СІ та інших системах одиниць

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

// input
m=0.55 t V=15 dm^3 ρ=m/V

// output
ρ=36666.7 kg/m^3

Проте, у своїх проєктах ви можете використовувати будь-які одиниці вимірювання, в тому числі кириличні (українські) або американські (United States customary units). Усі внутрішні перетворення одиниць MathSIV виконує автоматично:

// input:
a=4 cm
b=20 mm
c=a+b

// output (by default):
c=60 mm

// output (user units): c•{m}=0.06 m

Користувацькі одиниці вимірювання

Вбудовані в MathSIV фізичні величини та одиниці вимірювання охоплюють не увесь спектр, що використовується в науці та техніці. На практиці існує багато величин та одиниць, які є похідними від регламентованих міжнародною системою СІ (базових). Наприклад, момент інерції плоскої фігури вимірюється в метрах в четвертому степені (м4) і є похідною величиною від довжини (м).

Створення фізичної величини через одиниці

В MathSIV ви можете використовувати будь-які похідні величини та одиниці так само, як і вбудовані. Якщо похідна величина вводиться в математичну модель явно (тобто через числове значення та одиниці), то вам достатньо записати її одиниці на основі наявних одиниць за наступними правилами:

  • знак множення в одиницях вказується пробілом;
  • знак поділу між одиницями вказується явно: "/";
  • знак степеню вказується явно: "^"

Створення фізичної величини в процесі обчислень

Похідну величину можна отримати автоматично, якщо вона утворюється в ході математичних операцій. У такому випадку MathSIV надасть їй одиниці, які використовуються за стандартними налаштуваннями (тобто одиниці системи СІ). Далі ви можете змінити ці одиниці на потрібні.

Приклади похідних фізичних величин

Контроль помилок

MathSIV автоматично контролює розмірності (і, відповідно, одиниці вимірювання) усіх величин в математичних виразах. Якщо виявлена невідповідність, програма сигналізує про це наступним чином:

a=1 m
b=2 s
c=a+b

Units must have equal dimensions. L<>T

Повідомлення про помилку (червоним кольором) вказує на те, що користувач намагається виконати некоректну з точки зору фізики операцію: додати до метрів секунди. Тут величина "a" є довжиною (розмірність L), а величина "b" — часом (розмірність T). Оскільки ці величини не можуть додаватися, виникає помилка.