我有一组数(x,y),然后对其进行多项式拟合,式子就为这种普通的多项式
但是我想加两项约束条件,一个就是算出来的多项式在0到40的积分为1,另外一个是多项式永远大于0
算出来的多项式在0到40的积分为1这个可以用拉格朗日乘子法写,但是同时加一个多项式大于0要如何写
下面是我的代码,X是一个风速数据,x是风速,y是频率(x,y是啥都无所谓,主要是约束条件如何写)。这段代码只加了多项式积分为1这一个条件,如何在加一个多项式大于0
X=xlsread('Alamo.xlsx');%风速数据
H=histogram(X,'Normalization','probability');
x = (H.BinEdges(1:end-1)+H.BinEdges(2:end))/2;%风速
y = H.Values; %这就是对应的频率
n=10 %设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); % 积分为1
aa = [A, G'; G, 0]\[b;1];%拉格朗日乘子法
y1=polyval(a,x)
y2=polyval(aa(1:end-1),x)
plot(x,y1)
hold on
plot(x,y2)
legend('原始风速数据','拟合后(不考虑积分为1)','拟合后(考虑积分为1)')