Jurijus Zaksas
Искусственный Интеллект
(470963)
1 год назад
Факториалы вычисляются циклами, никаких волшебных "формул" для их вычисления нет.
У тебя все хорошо, кроме того, что ты возводишь еще и тройку в степень постоянно.
factorial = 3 # - вынеси за пределы цикла
factorial *= n - Убери тройку отсюда.
import random
import numpy as np
import decimal as de
import math
# Создание матрицы
k = random.randint(2, 10) # Генерация случайного целого числа от 2 до 10 и присвоение его переменной k
x = np.random.uniform(-1, 1, (k, k)) # Генерация случайной матрицы размером kxk в диапазоне от -1 до 1
t = input("Введите число t от 1 до 100: ") # Запрос у пользователя ввести число t от 1 до 100
# Проверка t на правильность ввода
while True:
if t.isdigit() and 1 <= int(t) <= 100: # Проверка, является ли введенное значение целым числом в нужном диапазоне
t = int(t) # Преобразование введенной строки в целое число
break # Прерывание цикла
elif not t.isdigit(): # Если введенная строка не является целым числом
t = input("t не является числом, введите его ещё раз: ")
elif int(t) < 1 or int(t) > 100: # Если введенное число не попадает в нужный диапазон
t = input("Число t меньше единицы или больше ста, введите его ещё раз: ")
n = 1 # Переменная для номера слагаемого
factorial = 1 # Переменная факториала
znak = 1 # Переменная для знака
rezultat = de.Decimal(0) # Переменная для результата как Decimal
matrix = x # Переменная случайной матрицы x
de.getcontext().prec = t + 60 # Установка точности для вычислений
fun = de.Decimal(0) # Переменная fun в виде Decimal для вычисления
while abs( rezultat.as _tuple().exponent) < t: # Цикл while, выполняемый, пока число знаков после запятой результата не будет больше числа t
fun = de.Decimal(1 * np.linalg.det(np.multiply(matrix, math.factorial(3*n)))) * de.Decimal((1 / math.factorial(3*n))) # Вычисление слагаемого
rezultat += znak * fun # Прибавление результата с учетом знака
n += 1 # Следующий номер слагаемого
factorial *= 3*n*() # Вычисление факториала для числителя
znak = -znak # Смена знака для следующего слагаемого
print(x) # Вывод матрицы
print(f"Результат: {rezultat:.{t}f}") # Вывод результата с указанием числа знаков после запятой