Год назад я описал свой проект по созданию программы для математических расчётов в Lua. За прошедшее время многое успело измениться. Во-первых, название проекта стало, на мой взгляд, более приятным. Во-вторых, сформировалась концепция: компактный и портативный инструмент для расчётов "на скорую руку". В третьих, проведён рефакторинг по принципу "долой всё лишнее". И, естественно, были добавлены новые возможности! О них и пойдёт речь далее.
Математика за компьютером
Блог о свободном математическом ПО
среда, 2 января 2019 г.
суббота, 21 июля 2018 г.
Octave. Ускорение
Octave хоть и является аналогом Matlab, сильно уступает последнему в эффективности. Однако, иногда можно попытаться ускорить расчёт. Прежде всего, нужно помнить общее для всех языков (и компьютерных систем) правило: если что-то можно сделать несколькими способами, и один из них встроен в язык (систему), то следует выбрать именно этот способ. В Octave это относится к операциям над массивами.
четверг, 14 июня 2018 г.
Python. Производные, интегралы и ОДУ
Если искомая функция является полиномом, для её дифференцирования и интегрирования можно использовать методы модуля numpy.polynomial.polynomial. Хочу обратить внимание, что самый левый коэффициент соответствует младшему члену полинома, правый - старшему. Функции polyder() и polyint() содержат дополнительные опциональные коэффициенты, которые позволяют использовать их более гибко.
воскресенье, 10 июня 2018 г.
Python. Символные вычисления
Если ввести в поисковике запрос "символьные вычисления в python", большинство результатов будут посвящены модулю SymPy. Это действительно мощный инструмент, описание работы с которым можно найти, например, здесь. Я же ограничусь кратким рассмотрением некоторых из возможностей данного модуля.
понедельник, 4 июня 2018 г.
Python. Решение уравнений
Для решения системы линейных уравнений типа Ax = b в numpy имеется функция linalg.solve(). Они принимает на вход квадратную матрицу линейно-независимых строк A, а также вектор значений b, и рассчитывает вектор корней x. Для проверки результата в данном примере использована функция allclose(), она сравнивает два массива поэлементно и возвращает True, если разница не превышает заданной величины (по-умолчанию относительная разность не более 1E-5, абсолютная - 1E-8).
Если найти решение не удалось, можно попробовать функцию linalg.lstsq(), которая ищет такой вектор x, для которого евклидова норма разности между Ax и b будет минимальна.
вторник, 22 мая 2018 г.
Python. Графики
В качестве инструмента построения графиков рассмотрим библиотеку matplotlib и её модуль pyplot. Он предназначен для работы с двумерными фигурами и умеет строить большое число разнообразных типов графиков, обеспечивая при этом Matlab-подобный интерфейс. Простейший график можно создать с помощью следующих команд.
import numpy as npimport matplotlib.pyplot as plt
# векторы абсцисс и ординат
X = np.linspace(0, 2*np.pi, 50)
Y = np.sin(X)
# создание графика и его отображение
plt.plot(X,Y)
plt.show()
Как видно, отрисовка происходит через обращение к модулю pyplot (plt). График строит функция plot(), а отображает - show().
четверг, 17 мая 2018 г.
Python. Массивы
В принципе, массивы в Python можно построить за счёт комбинации списков, однако при больших размерах массива данное решение неэффективно, т.к. работать будет сравнительно медленно, а памяти потребует много. К тому же, все специальные операции придётся задавать вручную. Для решения данных проблем был создан модуль NumPy.
Подписаться на:
Сообщения (Atom)