Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python或matlab中的惩罚插值_Python_Matlab_Numpy_Mathematical Optimization_Minimization - Fatal编程技术网

python或matlab中的惩罚插值

python或matlab中的惩罚插值,python,matlab,numpy,mathematical-optimization,minimization,Python,Matlab,Numpy,Mathematical Optimization,Minimization,我有一个损失函数L和两个信号f(t),g(t)。 我想找到最小化的函数:L(f(t)-g(t+s(t))+lambda*积分(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.pypl

我有一个损失函数L和两个信号f(t),g(t)。 我想找到最小化的函数:
L(f(t)-g(t+s(t))+lambda*积分(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")
我正在尝试使用scipy.optimize.minize将其最小化。
主要问题是,
pt
经常超出
t
的范围值。因此,当我调用
s2(pt)时,我会收到一个错误。我如何插值也在t范围之外的函数?

也不应该是
L(f(t)-g(t+s(t))
之前的
积分?另外,是解析函数还是在有限的点集上给出的?你可以试试Scipy的样条插值()-它也有平滑功能。如果你想深入探讨这个话题,你可能想看@behzad.nouri,积分只在最后一部分。这是GAM(广义加性模型)的修改版本。开始时,f和g是向量,但我用interp1d插值,所以现在它们是函数。@Dietrich我经常使用sklearn,但在这种情况下我没有发现任何有用的东西。你有什么建议吗?@Dietrich Oops,我刚刚看到了你的
g()
,所以这不是一个标准的广义线性模型问题。现在我想想,它看起来很不寻常。没有机会把它变成标准形式(可能是通过傅里叶变换)?
def lost_function(p):
    pt=polyval(p,t)

    return norm(s1(t)-s2(pt))/len(index)