Можно ли повысить точность в оптимизации наименьших квадратов Scipy?Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Можно ли повысить точность в оптимизации наименьших квадратов Scipy?

Сообщение Гость »

Я пытаюсь использовать Scipy's scipy.optimize.least_squares для решения системы из 35 нелинейных уравнений, связанных с многокатером. Тогда есть 7 «измеренные точки», которые также закреплены в пространстве, но также имеют неизвестные координаты. Цель состоит в том, чтобы найти координаты из 7 измеренных точек в локальной справочной системе (размещенных в одной из контрольных точек). Расстояния между измеренными точками и контрольными точками измеряются с использованием инструмента высокой точности (нанометральная шкала). Однако это расстояние фактически не измеряется между измеренной точкой и точкой отсчета, а скорее между несуществующей точкой между измеренной точкой и точкой отсчета и контрольной точкой. The distance between the measured point and the non-existent point is called the "deadzone", and the deadzone is the same for all distances measured, but has an unknown length.
We can summarize this problem as : trying to find the intersections of 5 spheres in 3D space 7 times (in different configurations), by only knowing the radii of the spheres, but with the added difficulty of the Deadzone.
Расстояние между измеренной точкой и точкой, которая может быть написана как таковая:


em.s/em. em. (x_i; y_i; z_i) и a j измеренная точка (x_j; y_j; z_j) . d_ij - это измеренное расстояние, а dz - тупик. Цель состоит в том, чтобы быть в состоянии накормить программу приблизительных значений для всех координат и Deadzone (при точке 1E0) и для того, чтобы программа возвращала оптимизированные координаты (точность 1E-6). Это происходит, пытаясь изменить разницу между измеренным расстоянием и вычисленным расстоянием (расстояние, полученное из координат, которые сначала являются начальными значениями). < /P>
Проблема: < /p>
Я теперь имею программу, которая способна выполнять достаточно хорошо, чтобы вернуть приблизительные решения и преуспеть в тестировании на здравомыслие, но не подходит для того, чтобы достаточные значения, что достаточно (1. Я проверил эту программу, взяв одно из «реальных» значений (полученных с использованием моделирования в программном обеспечении 3D CAD) для координаты измеренной точки и добавив в нее немного шума (Z_7 = 28 52317743 + 1). Я попытался изменить параметры из функции Scipy, а также попытался интегрировать MPMath, который не поддерживается наименьшими квадратами Scipy, в программу, чтобы попытаться достичь более высокого уровня точности. Я также пытался использовать сумму всех остатков для оптимизации, а не использовать остаток из одного уравнения для оптимизации только этого уравнения. Это дает лучшие результаты, но они все еще недостаточно точны. Я использую ИИ для кода, но этого недостаточно.
# Calculate the residuals
residuals = []
for j, (xj, yj, zj) in enumerate(measured_points):

residual = (
np.sqrt(xj**2 + yj**2 + zj**2) - (dA[j] + Dzone) +
np.sqrt((xj - xB)**2 + yj**2 + zj**2) - (dB[j] + Dzone) +
np.sqrt((xj - xC)**2 + (yj - yC)**2 + zj**2) - (dC[j] + Dzone) +
np.sqrt((xj - xD)**2 + (yj - yD)**2 + (zj - zD)**2) - (dD[j] + Dzone) +
np.sqrt((xj - xE)**2 + (yj - yE)**2 + (zj - zE)**2) - (dE[j] + Dzone)
)**2
residuals.append(residual)

return np.array(residuals)
< /code>
Вот код, который использует функцию наименьших квадратов: < /p>


# Perform non-linear least squares regression
result = least_squares(
objective_function, initial_params, jac='3-point', diff_step=1e-8,
ftol=1e-15, xtol=1e-15, gtol=1e-15, x_scale=1, method='dogbox',
loss='cauchy', tr_solver='lsmr', max_nfev=100000000, args=(distances,), verbose=2
) # Parameters used here were tested to try to get better precision

# Optimal values
optimal_params = result.x

< /code>
Я знаю, что точность, которую я ищу, возможна, потому что у меня есть доступ к программе на клене, которая делает это вычисление, используя одни и те же уравнения и используя регрессию наименьших квадратов, и она способна достигать уровней точности до 1E-12, когда шум добавляется в одну переменную. Каковы некоторые способы я мог бы попытаться получить более высокие результаты точности с Python? Поскольку я впервые задаю вопрос на форуме, возможно, я что -то забыл. Пожалуйста, не стесняйтесь упоминать об этом, если это так.
Заранее спасибо за помощь.

Подробнее здесь: https://stackoverflow.com/questions/795 ... timization
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»