Как мне создать функцию, которая предоставляет остатки для подгонки данных импеданса с использованием scipy.optimize.least-squares? - PullRequest
0 голосов
/ 15 мая 2019

Я хотел бы использовать алгоритм Левенберга-Марквардта, реализованный в функции наименьших квадратов модуля оптимизации Сципи, чтобы соответствовать измеренным данным импеданса. Тем не менее, я немного запутался в том, как предоставить остатки.

В примере, показанном в документации, ясно, что вы должны предоставить только вычитание между экспериментальными и расчетными значениями. Поэтому вместо создания функции, которая возвращает sqr, мы должны написать функцию, которая возвращает массив sqrs2.

Хотя для обычных данных это просто, я не уверен, как это сделать для данных импеданса. Каждое измерение импеданса (Z) имеет действительную и сложную части, поэтому целевая функция становится imp, где wt - весовой коэффициент, w - частота (независимая переменная), а a - набор параметров. найти. Проблема в том, что я не знаю, как правильно предоставить невязки для функции наименьших квадратов, так как не думаю, что imp2 сработает.

1 Ответ

2 голосов
/ 15 мая 2019

Последний пример в документации scipy.optimize.least_squares показывает, как работать со сложными невязками. А именно, если у вас сложный ввод и вывод:

def f(z):
    return z - (0.5 + 0.5j)

Вы можете обернуть функцию, чтобы расширить до двух действительных чисел:

def f_wrap(x):
    fx = f(x[0] + 1j*x[1])
    return np.array([fx.real, fx.imag])
...