Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Gerar todos os termos polinomiais de x1 e x2, até a sexta potência usando python

Gerar todos os termos polinomiais de x1 e x2, até a sexta potência usando python

Preciso gerar uma matriz da seguinte forma: https://ufile.io/dtjk0lt9

Ou seja, de 1 até a sexta potência de

X1

e

X2

Para cada grau, a soma dos expoente de X1 e X2 devem ser iguais ao grau, assim, não teríamos, por exemplo, X1^4 * X2^3 mas sim X1^4 *X2^2

Alguma ideia?

4 respostas

Alguem pode ajudar?

Alguem pode ajudar?

solução!

Oi Edson, tudo bem?

A primeira coisa que precisamos de fazer é definir uma função que irá nos retornar quais são as potências(de x1 e x2) daquele grau. Exemplo:

Se o grau é 3 terá que nos retornar que as potências são:

  • 1 e 2
  • 2 e 1
  • 3 e 3

Podemos então calcular estes números através de um aninhamento de for, que irá percorrer de 1 até o número e verificar se a soma dará um valor igual ao grau e caso isto seja bem sucedido irá adicionar uma tupla daquele valor na lista. Por exemplo:

def calcula_expoentes_do_grau(numero):

    expoentes = []

    for i in range(1,numero):
        for j in range(1,numero):
            if i + j == numero:
                expoentes.append((i,j))
    expoentes.append((numero, numero))
    return expoentes

Se fizermos o teste:

print(calcula_expoentes_do_grau(3))

O resultado será: [(1, 2), (2, 1), (3, 3)]. Ou seja, uma lista de tuplas com os valores dos expoentes que estão dentro da condição de que a soma dos expoentes de x1 e x2 devem ser iguais ao grau.

Posterior a isso, podemos chamar a função calcula_expoentes_do_grau de 1 até 6, ou seja, até a sexta potência para os valores de x1 e x2. Algo como:

for i in range(1, 7):
    resultado_expoentes = calcula_expoentes_do_grau(i)
    for x, y in resultado_expoentes:
        if x and y == i: # Para casos onde há tuplas com (3,3), (2,2), (1,1)
            matriz.append([x1 ** i])
            matriz.append([x2 ** i])
            qtd_linhas_matriz += 2
        else:
            primeira_operacao = x1 ** x
            segunda_operacao = x2 ** y
            matriz.append([primeira_operacao * segunda_operacao])
            qtd_linhas_matriz += 1

Lembrando que matriz em Python nada mais é que uma lista de listas.

Código completo:

def calcula_expoentes_do_grau(numero):
    expoentes = []

    for i in range(1, numero):
        for j in range(1, numero):
            if i + j == numero:
                expoentes.append((i, j))
    expoentes.append((numero, numero))
    return expoentes


x1 = int(input('Digite X1: '))
x2 = int(input('Digite X2: '))

qtd_linhas_matriz = 0

matriz = []
matriz.append([1])

for i in range(1, 7):
    resultado_expoentes = calcula_expoentes_do_grau(i)
    for x, y in resultado_expoentes:
        if x and y == i:
            matriz.append([x1 ** i])
            matriz.append([x2 ** i])
            qtd_linhas_matriz += 2
        else:
            primeira_operacao = x1 ** x
            segunda_operacao = x2 ** y
            matriz.append([primeira_operacao * segunda_operacao])
            qtd_linhas_matriz += 1


print('MATRIZ COM OS VALORES')

qtd_colunas_matriz = 1

for i in range(qtd_linhas_matriz + 1):
    print(matriz[i])

Caso simplifique a visualização, poderá printar no for as potências detalhadamente:

for i in range(1, 7):
    print(f'Potência de {i}')
    resultado_expoentes = calcula_expoentes_do_grau(i)
    for x, y in resultado_expoentes:
        if x and y == i:
            print(f'{x1}^{i} = {x1 ** i}')
            print(f'{x2}^{i} = {x2 ** i}')
            matriz.append([x1 ** i])
            matriz.append([x2 ** i])
            qtd_linhas_matriz += 2
        else:
            primeira_operacao = x1 ** x
            segunda_operacao = x2 ** y
            matriz.append([primeira_operacao * segunda_operacao])
            print(f'{x1}^{x} * {x2}^{y} = {primeira_operacao * segunda_operacao}')
            qtd_linhas_matriz += 1

Qualquer dúvida é só falar. Espero ter ajudado. Abraços e bons estudos!

Edson, caso a resposta acima tenha te ajudado, peço por gentileza que a marque como solução para que a mesma saia da lista de questões não respondidas do fórum. Caso ainda tenha ficado alguma dúvida é só falar.

Abraços e bons estudos!