#python #scipy #sympy
#python #scipy #симпатичный
Вопрос:
Я пытаюсь найти x_my
, y_my
и z_my
из функции f
ниже. У меня есть три значения для f
, а также три значения для каждого соответствующего curr_location
. Это означает, что у меня есть три уравнения и три неизвестных, что означает, что это может быть решено. Но я понятия не имею, как это сделать с помощью python.
sigma_x=3
sigma_y=3
sigma_z=3
curr_location_x1=3
curr_location_y1=3
curr_location_z1=3
curr_location_x2=4
curr_location_y2=4
curr_location_z2=4
curr_location_x3=6
curr_location_y3=6
curr_location_z3=6
f_1=0.4
f_2=0.3
f_3=0.24
f = math.exp(-((((curr_location_x - x_my) * (curr_location_x - x_my)) / (2*sigma_x * sigma_x)) (((curr_location_y - y_my) *(curr_location_y - y_my)) / (2 * sigma_y * sigma_y)) (((curr_location_z - z_my) *(curr_location_z - z_my)) / (2 * sigma_z * sigma_z))))
Комментарии:
1. Что вы читали об этой проблеме? В каком смысле прочитанный вами материал был неадекватным?
Ответ №1:
Вы можете использовать curve_fit
(docs). Обратите внимание, как вы помещаете входные и выходные данные в векторы:
from scipy.optimize import curve_fit
import numpy as np
sigma_x=3
sigma_y=3
sigma_z=3
def f(curr_location, x_my, y_my, z_my):
curr_location_x, curr_location_y, curr_location_z = curr_location
return np.exp(-((((curr_location_x - x_my) * (curr_location_x - x_my))
/ (2*sigma_x * sigma_x)) (((curr_location_y - y_my)
*(curr_location_y - y_my)) / (2 * sigma_y * sigma_y))
(((curr_location_z - z_my) *(curr_location_z - z_my)) /
(2 * sigma_z * sigma_z))))
curr_location_values = [[3,3,3,], [4,4,4], [6,6,6]]
output_values = [0.4, 0.3, 0.24]
popt, pcov = curve_fit(f, curr_location_values, output_values)
popt
>> array([2.99570375, 2.38445522, 1.7246244 ])