我有一组数(x,y),然后对其进行多项式拟合,式子就为这种普通的多项式
但是我想加一项约束条件,就是算出来的多项式在0到40的积分为1,我看matlab中的约束条件全是大于小于这种,如何写积分形式的约束条件
我有一组数(x,y),然后对其进行多项式拟合,式子就为这种普通的多项式
给定积分区间之后,就可以这么做
x = [0:5:40]; % x自己设置
y = pi/80*sin(1/40*pi*x)+(rand(size(x))-0.5)*pi/80*1/2;% y自己设置,我这里是在正弦函数上加了个随机浮动
n = 3; % n自己设置
x = x(:);
y = y(:);
S = zeros(length(x), n+1);
q = ones(length(x),1);
S(:,n+1)=q;
for i = n:-1:1
q = q.*x;
S(:,i) = q;
end
A = S'*S;
b = S'*y;
a = A\b;%最小二乘
G = 1./(n+1:-1:1).*40.^(n+1:-1:1); %
aa = [A, G'; G, 0]\[b;1];%拉格朗日乘子法
plot(x,y,'r--o')
hold on
plot(x,polyval(a,x),'bs-')
plot(x,polyval(aa(1:end-1),x),'g*-')
legend('拟合前','拟合后(不考虑积分为1)','拟合后(考虑积分为1)')