Как создать функцию, которая использует теорему о рациональном корне для возврата всех рациональных корней многочлена?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как создать функцию, которая использует теорему о рациональном корне для возврата всех рациональных корней многочлена?

Сообщение Anonymous »

Теорема о рациональном корне утверждает, что в полиноме:

Код: Выделить всё

a_1 * x**n, a_2 * x**(n-1), a_3 * x**(n-2), ... a_n * x ** 0
рациональными корнями являются: коэффициенты постоянного члена () по коэффициентам a_1. Возьмем многочлен x**2 + 7x + 10. Корнями постоянного члена являются 10, 5, 2, 1, -1, -2, -5, -10. Корни главного члена — 1, -1. При этом мы получим все корни: [10, 5, 2, 1, -1, -2, -5, -10, -10, -5, -2, -1, 1, 2, 5, 10] . Затем, с помощью простого перебора, мы можем проверить все корни.
Однако я пишу это на C++, потому что весь мой математический класс оскорбляет меня за использование Python для решения этой проблемы. проблема. Сейчас я застрял в функции факторизации числа в том смысле, что она должна возвращать массив. Я хочу написать это на C++, все это всего лишь контекст.

Код: Выделить всё

def factorize(n):
n = abs(n)
highest = int(n**0.5 + 1)
ret = []
for i in range(1, highest):
if n % i == 0:
ret.append(i)
ret.append(n // i)
ret.append(-i)
ret.append(-n // i)
return ret

def FRRT(polynomial):
leading = polynomial[-1]
constant = polynomial[0]
leading_factors = factorize(leading)
constant_factors = factorize(constant)
roots = []
for i in leading_factors:
for j in constant_factors:
roots.append(j / i)
solutions = []
for root in roots:
ans = 0
for exponent, coefficient in enumerate(polynomial):
ans += coefficient * root**exponent
if round(ans, 3) == 0:
solutions.append(root)
solutions = set(solutions)
solutions = list(solutions)
for i in solutions:
print(f"X: {i}, Y = 0")

FRRT([5, -23, 35, -17, -4, 4])
FFRT сначала генерирует ведущий и постоянный коэффициенты на основе полинома [a_n, a_n-1, a_n-2... a_1] с ведущим членом в конец. затем он просто добавляет все возможные рациональные корни к корням списка. Наконец, он принимает значение x, а затем проверяет его. Затем, если оно, округленное до трех знаков после запятой, равно 0, оно передается в решения. (Эта проблема здесь, потому что неконечные корни, такие как 1/3, естественно, неточны). Наконец, он просто печатает решения.


Подробнее здесь: https://stackoverflow.com/questions/791 ... -all-ratio
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с вычислением дробных значений в C++ (с использованием рациональных чисел)
    Anonymous » » в форуме C++
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Полезно ли в C# применять теорему ДеМоргана для ручной оптимизации логических выражений в условных операторах (например,
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Доступ к файлу, который находится в корне каталога проекта
    Anonymous » » в форуме C#
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Как заставить FallbackResource искать файл всегда в корне
    Anonymous » » в форуме Php
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Как заставить FallbackResource искать файл всегда в корне
    Anonymous » » в форуме Apache
    0 Ответы
    101 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»