function phi_res = linear_program(phi,m)
% 线性规划
% phi:数据
% m:阶数
% A_AUG
n = length(phi);
I_n = eye(n);
Z = zeros(n-m+1,n);
M = zeros(n-m+1,n);
for i = 1:size(M,1)
M(i,i:i+m-1) = CSG(m);
end
A_AUG = [I_n,-I_n;I_n,I_n;Z,M];
% phi_AUG
phi_AUG = [-phi,phi,zeros(1,n-m+1)]';
C = [ones(1,n),zeros(1,n)];
phi_c=linprog(C,-A_AUG,-phi_AUG);
phi_res = phi_c(n+1:end);
k = (m-1)/2;
sm = smth(k)';
for i = 1+k:size(phi_res,1)-k
phi_res(i) = sum(phi_res(i-k:i+k) .*sm);
end
end
%%
function res = CSG(m)
res = [];
for i = 1:m
res = [res,6*(2*i-m-1)/(m*(m+1)*(m-1))]; %#ok<*AGROW>
end
end
function sm = smth(k)
tmp = 0;
for i = 1:k
tmp = tmp + i*i;
end
tmp = tmp * 2;
dm = -k/tmp : 1/tmp : k/tmp;
for i = 1:k+1
sm(i) = -sum(dm(1:i-1)) - dm(i)/2;
end
for i = k+2:2*k+1
sm(i) = sum(dm(i+1:2*k+1)) + dm(i)/2;
end
end