Мультиплатформенная библиотека Kotlin, добавляющая математические операции с матрицами, векторами, комбинаторикой и многим другим.
Эмоджи для телеграм доступны по ссылке https://t.me/addemoji/RkIQSnNfAAA
Чтобы подключить библиотеку нужно добавить строчки ниже в файл build.gradle.kts
вашего мультиплатформенного модуля
dependencies {
implementation("io.github.plumsoftware:more-math:<version>")
}
Эта библиотека предоставляет функциональность для работы с вектором на плоскости, матрицей, комбинаторикой.
Вычисление факториала для числа до 21
val res = MoreMath.factorial(3)
Вычислить факторил для числа более 20
val res = MoreMath.bigFactorial(22L)
Вычислить тетрацию
val res = MoreMath.tetraction(2.0, 3)
Если, число в тетрации большое, то используйте
val res = MoreMath.bigTetraction(2.0, 40)
Чтобы вычислить наименьшее общее кратное двух чисел
val res = MoreMath.gcd(13, 17)
Вычисление стандартного отклонения ряда чисел
val res = MoreMath.standardDeviation(1.0, 2.0, 3.0)
Среднее значение
val res = MoreMath.average(1, 2, 3)
Узнать, положительное или отрицательное число
4.isPositive
(-4).isNegative
Создать матрицу можно тремя способами
val matrix = matrixOf<Int> (
mutableListOf(1, 2),
mutableListOf(3, 4)
)
или
val matrix = Matrix<Int> (
mutableListOf(1, 2),
mutableListOf(3, 4)
)
или
val matrix = Matrix<Int>(size = MatrixSize(row = 3, column = 4))
Последее создаст пустую матрицу. Также можно получить размер матрицы
val size = matrix.size
Операторы, доступные для матриц +
, -
, *
, pow()
, >
, >=
и подобные. Для сравнения контента матриц, используйте метод equals()
.
val matrix1 = matrixOf<Int> (
mutableListOf(1, 2),
mutableListOf(3, 4)
)
val matrix2 = matrixOf<Int> (
mutableListOf(5, 6),
mutableListOf(7, 8)
)
val matrix3 = matrix1.pow(2)
val plus = matrix1 + matrix2
val times = matrix1 * matrix2
val minus = matrix1 - matrix2
Вычислить определитель матрицы
val det = matrix.determinant()
Транспонировать матрицу
val transposedMatrix = matrix.transpose()
Умножить матрицу на число
val res = matrix.times(2)
Найти минимальный или максимальный элемент в матрице.
Если Ваша матрица состоит из Double
, Long
, Float
или Int
, то воспользуйтесь кодом ниже
val min = matrix.minInMatrix()
val max = matrix.maxInMatrix()
или
val min = matrix.minInMatrixBy { it }
val max = matrix.maxInMatrixBy { it }
Создать взвешенный граф
val graph = Graph<VertexType, WeightType>(mode = GraphMode.UNDIRECTED)
Где VertexType
- это тип вершины.
WeightType
- это тип веса вершины: Int
, Double
, Long
, Float
.
mode
- это тип графа: UNDIRECTED
, DIRECTED
.
Для создания связи нужно добавить вершины:
val graph = Graph<String, Int>()
val vertexA = Vertex(id = "A")
val vertexB = Vertex(id = "B")
val vertexC = Vertex(id = "C")
val vertexD = Vertex(id = "D")
graph.addVertex(vertexA)
graph.addVertex(vertexB)
graph.addVertex(vertexC)
graph.addVertex(vertexD)
Затем создайте связь между вершинами
graph.createConnection(from = vertexA, to = vertexB, weight = 2)
Получить минимальный путь в графе от и до вершины
val minPath: GraphPath<String, Double> = graph.minPath(from = Vertex("A"), to = Vertex("B"))
В результате будет возвращен GraphPath
, который содержит пары - вершины и суммарный путь до следующей вершины.
Получить все вершины
val vertices = graph.vertices
Получить все связи
val vertices = graph.connections
Узнать, есть ли вершина
val vertex: Vertex<String>? = graph[someVertex]
Это вернёт null
, если вершины в графе нет.
Заменить вершину в графе
val newVertex = Vertex("A")
val oldVertex = Vertex("B") //Эта вершина уже есть в графе
graph.set(oldVertex, newVertex, SetVertexMode.NEW_FROM_TO)
Это заменит все вершины во всех связях в графе и удалит старую вершину.
Если вы хотите заменить только начальные вершины в связях или конечные, то используйте NEW_FROM
или NEW_TO
соответственно.
Для удаления всех связей используйте:
graph.removeConnectionsByVertex(someVertex, RemoveVertexMode.TO)
Это удалит все связи, где есть переданная конечная вершина.
Если нужно удалить только начальные вершины или обе (начальную и конечную) из связей, то используйте FROM
или BOTH
соответственно.
Для получения всех вершин без связей или наоборот всех вершин в связях
val freeList = graph.getFreeVertices()
val busyList = graph.getBusyVertices()
Создать комплексное число
val complex: Complex = complex(-4.0)
В результате будет 0.0 - 2.0i
Если Вам нужно указать реальную часть числа, то воспользуйтесь
val complex: Complex = complex(3, -4.0)
В результате будет 3.0 - 2.0i
Получить алгебраическую или геометрическую форму можно таким образом
val algebraic = complex.toAlgebraic()
val geometric = complex.toGeometric()
С комплексными числами можно выполнять +
, -
, *
, /
. Также доступны equals()
и hashCode()
.
Создание вектора аналогично созданию матрицы
val vector2 = vector2Of(1 , 2)
или
val vector2 = Vector2(1 , 2)
С векторами на плоскости доступны следующие операторы +
, -
, *
, /
. Также Вы можете использовать equals()
и length()
.
val vector1 = vector2Of(1, 2)
val vector2 = vector2Of(3, 4)
val plus = vector1 + vector2
val minus = vector1 - vector2
val times = vector1 * vector2
val div = vector1 / vector2
val length = vector1.length()
Комбинации из 5 элементов по 2 элемента
val res = MoreMath.combinations(5, 2)
Размещения
val res = MoreMath.placements(5, 2)
Биноменальный коэффициент
val res = MoreMath.binomialCoefficient(5, 2)