Как решить для корней с учетом суммирования функции неизвестного и переменной? [Scipy] [Root -finding] - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь найти решение для следующего уравнения, однако в справочном руководстве SciPy очень мало документации, поэтому я не уверен, как это сделать go.

У меня есть массив из 10 одинаковых случайных переменных, назовем его X.

У меня есть следующая функция, которая берет параметр тета и единообразное RV из X и возвращает их произведение, возведенное в сила е:

def f(x_i, theta):

    return math.exp(x * theta)

Я пытаюсь найти тета так, чтобы это уравнение выполнялось:

enter image description here

хорошо, вы можете переместите 20 на другую сторону уравнения так, чтобы оно равнялось 0, но все же я не уверен, как оптимизировать эту величину с учетом суммирования?

Любая помощь будет оценена! Спасибо.

1 Ответ

0 голосов
/ 15 апреля 2020

Мне интересно, что это за сбой. По сути, у вас просто есть функция g(theta) с

 g(theta) = sum(i, f(x[i],theta))/10 - 20

Я предполагаю, что x - это данные.

Итак, мы могли бы сделать:

from scipy.optimize import root_scalar
from random import uniform, seed
from math import exp

def f(x_i, theta):
  return exp(x_i * theta)

def g(theta, x):
  s = 0
  for x_i in x:
    s += f(x_i,theta)
  return s/10 - 20

def solve():
  n = 10
  seed(100)
  x = [uniform(0,1) for i in range(n)] 
  print(x)
  res = root_scalar(g,args=x,bracket=(0,100))
  print(res)

solve()

Я вижу:

[0.1456692551041303, 0.45492700451402135, 0.7707838056590222, 0.705513226934028, 0.7319589730332557, 0.43351443489540376, 0.8000204571334277, 0.5329014146425713, 0.08015370917850195, 0.45594588118356716]
      converged: True
           flag: 'converged'
 function_calls: 16
     iterations: 15
           root: 4.856897057972411
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...