Yacas/Быстрый старт
Быстрый старт
Линейная алгебра
{{Готовность|0%}}
- Быстрый старт
- Линейная алгебра
- Графики
Установка
Yacas доступен для скачивания с официального сайта[1].
Для Ubuntu можно скачать последнюю версию из репозитория с помощью таких команд:
- Открыть терминал
- Добавить репозиторий:
sudo add-apt-repository ppa:teoretyk/yacas
sudo apt-get update
- Скачать консольную версию:
sudo apt-get install yacas-console
- Скачать GUI:
sudo apt-get install yacas-gui
- Скачать ядро для Jupyter:
sudo apt-get install yacas-kernel
- Скачать дополнение для VS Code:
sudo apt-get install yacas-dev
Для других дистрибутивов GNU/Linux или можно скачать исходный код из архивов и собрать. В некоторых дистрибутивах Yacas можно найти в магазине приложений. Собрать программу на Linux можно так:
- Перейти в папку с программой
- Написать в терминале:
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release [-Dcommon_option=value ...] ..
make
- Выполнить команду
make install
Существует онлайн демо программы на сайте.
Есть версия на Android.
Синтаксис
Yacas имеет C-подобный синтаксис.
Простые арифметические выражения поддерживают инфиксную запись:
|
Системные функции озаглавлены и имеют свои аргументы под круглыми скобками, разделёнными запятой.
|
Функции могут быть составными, то есть аргумент следует за телом.
Например, ForEach(item, 1 .. 10) Echo(item);. Общий вид такой функции: ForEach(x, список) тело.
К слову, другая итеративная функция тоже имеет место в следующей форме: While(предикат) тело.
Списка элементов заключается в фигурные скобки. Для вызова элемента нужно к нему обратиться по индексу. Нумерация с 1.
Запись {-1,0,1}[3] вернёт последний элемент из списка. Выражение uu[2 .. 4]; к объявленному списку uu:={a,b,c,d,e,f}; вернёт его срез {b,c,d}. Length(uu) вернёт длину списка.
Каждое утверждение в команде следует заканчивать знаком ;
Несколько утверждений можно объединить скобками [ и ]. C их помощью можно делать локальные области.
In> [a; Echo("a is: "); 1+2;];
a is:
Out> 3
Булевские значения True и False предобъявлены. В Yacas есть предикаты, системные функции возвращающие булевские значения. Например, IsNumber()
In> IsNumber(2+x)
Out> False
In> IsNumber(3)
Out> True
In> IsNumber(2/3)
Out> False
Поддерживаются инфиксные операторы And, Or и префиксный Not.
Строки заключаются в двойные кавычки, если в строке они есть, то их необходимо экранировать. Выглядит это так: "this is a string with \"quotes\" in it". Для объединения двух строчек нужно использовать команду ConcatStrings(a, b).
Можно делать условные утверждения по следующей форме: If(предикат, описание положительной части, описание отрицательной части).
Символьные вычисления
Yacas можно использовать как калькулятор, но и для вычисления символьных выражений. После команды
restart
текущая сессия с памятью о предыдущих вызовах и определениях уходит в забвение.
Примеры символьных вычислений из документации:
|
Каждый предыдущий результат можно получить через оператор %.
Для упрощения выражений используется команда Simplify(). Например, Simplify(%) вернёт упрощённый вид
In> (x-1)*(x^2+x+1)
Out> (x-1)*(x^2+x+1)
In> Simplify(%)
Out> x^3-1
Часть простых уравнений можно решить через команду Solve:
In> Solve(x/(1+x) == a, x);
Out> {x==a/(1-a)}
In> Solve(x^2+x == 0, x);
Out> {x==0,x==(-1)}
In> Solve(a+x*y==z,x);
Out> {x== -(a-z)/y}
Можно раскладывать функции в ряд Тейлора
In> Taylor(x,0,5) ArcSin(x)
Out> x+x^3/6+(3*x^5)/40
В общем манипуляция с символами — главная составляющая Yacas. Несколько примеров:
Expand((1+x)^7);разворачивает выражение в многочленLimit(x,0) Sin(x)/x;Находит предел функции в точке.Newton(Sin(x),x,3,0.0001);Находит ближайший корень к точке с заданной погрешностью.DiagonalMatrix({a,b,c});Создаёт диагональную матрицу.Integrate(x,a,b) x*Sin(x);Определённый интеграл на промежутке.Factor(x^2-1);Разложение многочленов на множители.CanProve( (a And b) Or (a And Not b) );Упрощает логические выражения.TrigSimpCombine(Cos(a)*Sin(b));Упрощает тригонометрические выражения.D(x) Sin(x);Производная синуса.
Длинная арифметика
Yacas справляется с числами произвольной точности:
In> 35!
Out> 10333147966386144929666651337523200000000
Обычно символьные выражения не приводятся к вещественному числу. N() форсирует поиск приближения числа к данному выражению.
Объявления
Новые переменные вводятся через инфиксный оператор :=. Например, t:=1;.
Раздекларировать имя можно через команду Clear(). Объявленное выше имя t освобождается как Clear(t);.
Тем же способом определяются функции. Например, f(x):=3*x*x*x.
Правила
Для математический вычислений бывает нужно преобразовывать символьные величины. Предусмотреть все возможные преобразования кажется непростой задачей, поэтому вместо этого в Yacas существует способ сопоставления с образцом для управления выражениями в соответствии с определяемыми пользователем правилами.
Например, хотим самостоятельно написать правило вычисления факториала для неотрицательных чисел. Сначала напишем правило, что для нулевых величин факториал равен 1.
In> f(0) <-- 1;
Out> True
In> f(0)
Out> 1
После этого необходимо ввести правило f(n)=n*f(n-1), но нужно понимать когда n больше нуля и целое. Поэтому введём следующий вспомогательный предикат:
In> InIntegerGreaterThanZero(_n) <-- (IsInteger(n) And n > 0);
Out> True
In> InIntegerGreaterThanZero(3)
Out> True
Теперь можно определить правило вычисления произведения:
In> f(n_InIntegerGreaterThanZero) <-- n*f(n-1);
Out> True
In> f(3)
Out> 6
Для введения правил используется оператор <--. _n в правиле InIntegerGreaterThanZero(_n) означает, что любые объекты, которые попадут в аргумент, обозначаются локальной переменной n.
Общая форма правил следующая: [приоритет #] паттерн [_ постпредикат] <-- замена;
Местное упрощение
Иногда для некоторых выражений удобно использовать определённые правила упрощения, которые не должны применяться повсеместно. Для этого есть операторы /: и /::. Пусть, например, есть выражение Ln(a*b) и хочется изменить его на Ln(a)+Ln(b), то проще всего это сделать так:
- Имеется выражение
Sin(x)*Ln(a*b). Sin(x)*Ln(a*b) /: {Ln(_x*_y) <- Ln(x)+Ln(y) }упрощает его.