Экспонент суммирования - PullRequest
0 голосов
/ 29 июня 2018

Я очень новый пользователь Python. Я пытаюсь вычислить показатель суммы. Массив имеет больше параметров.

import math

a = [[1, 2, 3, 4],
     [5, 6, 7, 8]]

def y(i):
    p = 2
    total = 0
    for j in range (4):
        total += math.exp(a[i][j] * (p**j))

    return total

Ответ от этого метода: 7.89629603455e+13

Ответ несколько отличается от приведенного ниже ручного расчета:

y = math.exp(1*(2**0) + 2*(2**1) + 3*(2**2) + 4*(2**3))

Ответ: 1.9073465725e+21

Equation

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Ваша ошибка, по-видимому, не ошибка питона, а математическая ошибка при разложении уравнения. Вы можете сделать одно из двух изменений:

Решение 1: сначала сложите все, затем возьмите е ^ от общей суммы

import math

a = [[1, 2, 3, 4],
     [5, 6, 7, 8]]

def y(i):
    p = 2
    total = 0
    for j in range (4):
        total += a[i][j] * (p**j)

    return math.exp(total)

Решение 2: правильно разложить показатель степени и изменить общее значение + = на общее значение * =

import math

a = [[1, 2, 3, 4],
     [5, 6, 7, 8]]

def y(i):
    p = 2
    total = 0
    for j in range (4):
        total *= math.exp(a[i][j] * (p**j))

    return total

Решение 1 более эффективно, так как не выполняет повторных вызовов math.exp ()

0 голосов
/ 29 июня 2018
import math

a = [[1, 2, 3, 4],
     [5, 6, 7, 8]]

def y(i):
    p = 2
    total = 1
    for j in range (4):
        total *= math.exp(a[i][j] * (p**j))
    return total

Умножение экспонент с одинаковым основанием одинаково с суммированием значений мощности.

exp(a+b)=exp(a)*exp(b)

Оптимизация кода:

import math

a = [[1, 2, 3, 4],
     [5, 6, 7, 8]]

def y(i):
    p = 2
    total = 0
    for j in range (4):
        total += a[i][j] * (p**j)
    return math.exp(total)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...