首页 > 解决方案 > 如何求解一个函数并得到三个未知变量?

问题描述

我试图从下面的函数中找到x_my,y_my和。我有三个值以及每个对应的三个值。这意味着我有三个方程和三个未知的含义,它可以被解决。但我不知道如何用 python 做到这一点。z_myffcurr_location

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))))

标签: pythonscipysympy

解决方案


您可以使用curve_fit文档)。请注意如何将输入和输出放入向量中:

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 ])

推荐阅读