損失関数 L と 2 つの信号 f(t),g(t) があります。s 最小化 する関数を見つけたい:L(f(t)-g(t+s(t)))+lambda*integral(s''(t))
理想的にsは、 は多項式またはスプラインであるべきです。
問題を開始するために私が書いたコードは次のとおりです。
import numpy as np
from numpy import *
from numpy.linalg import *
import sklearn as sk
import scipy as sp
import scipy.io
from matplotlib.pyplot import *
from scipy.interpolate import *
#mat = scipy.io.loadmat('/home/luca/Documents/phd_python_code/peak_aligment/john_example.mat')
mat = scipy.io.loadmat('../peak_aligment/john_example.mat')
t1=mat["t1"].squeeze()
t2=mat["t2"].squeeze()
t3=mat["t3"].squeeze()
t=sort(unique(concatenate((t1,t2,t3),axis=0)))
t_min=max(min(t1),min(t2),min(t3))
t_max=min(max(t1),max(t2),max(t3))
t=[val for val in t if t_min<=val<=t_max]
sig1=mat["sig_1"].squeeze()
sig2=mat["sig_2"].squeeze()
sig3=mat["sig_3"].squeeze()
s1=interp1d(t1,sig1,kind="cubic")
s2=interp1d(t2,sig2,kind="cubic")
s3=interp1d(t3,sig3,kind="cubic")
編集:解決策に近づいていますが、まだ問題があります。
コスト関数を定義しました:
def lost_function(p):
pt=polyval(p,t)
return norm(s1(t)-s2(pt))/len(index)
そして、scipy.optimize.minize を使用して最小化しようとしています。主な問題は、しばしばptの範囲値の外にあることですt。そのため、電話s2(pt) iするとエラーが発生します。t の範囲外でも関数を補間するにはどうすればよいですか?