高分求matlab程序 进行多项式拟合
多项式为5项数即形式为y=ax^5+bx^4+cx^3+dx^2+ex+f.要得出这种形式的方程。x=[1978:2002];y=[272.81,286.43,311.8...
多项式为5项数 即形式为 y=ax^5+bx^4+cx^3+dx^2+ex+f.要得出这种形式的方程。
x=[1978:2002];
y=[272.81,286.43,311.89,324.76,337.07,351.81,390.85,466.75,490.86,545.46,648.3,696.54,781.66,893.77,1114.32,1519.23,1990.66,2499.43,2957.55,3438.79,3801.09,4188.73,4771.17,5210.12,5741.03]
一定要快!!!!!回答正确再加分!!!!
还要得出拟合的多项式!!!我要式子!! 展开
x=[1978:2002];
y=[272.81,286.43,311.89,324.76,337.07,351.81,390.85,466.75,490.86,545.46,648.3,696.54,781.66,893.77,1114.32,1519.23,1990.66,2499.43,2957.55,3438.79,3801.09,4188.73,4771.17,5210.12,5741.03]
一定要快!!!!!回答正确再加分!!!!
还要得出拟合的多项式!!!我要式子!! 展开
展开全部
给你两个例子做参考:
例一:
clc;clear;
f=@(beta,x)(beta(1)+beta(2)*x(:,1)+beta(3)*x(:,2)+beta(4)*x(:,1).*x(:,1)-beta(4)+...
beta(5)*x(:,2).*x(:,2)-beta(5)+beta(6)*x(:,1).*x(:,2));
x=[0.00144 0.45
0.00144 0.475
0.00144 0.525
0.00144 0.55
0.00152 0.45
0.00152 0.475
0.00152 0.525
0.00152 0.55
0.00168 0.45
0.00168 0.475
0.00168 0.525
0.00168 0.55
0.00176 0.45
0.00176 0.475
0.00176 0.525
0.00176 0.55];
y = [45.69110212
44.24592344
41.94713721
40.58647715
43.86413153
42.02196312
40.52672275
41.19385838
49.83122281
45.92215843
40.71631097
40.28065749
45.73223359
44.81973606
43.23365342
42.49947777];
beta0=[40.0001 1.0818 -2.5844 0.6803 0.6928 -0.4830];
beta=nlinfit(x,y,f,beta0);
例2:
function p=naorthfit(x,y,m)
%用途:多项式拟合
%格式:x,y为数据向量,m为拟合正交多项式次数,p返回多项式
%系数降幂排列
psi=fliplr(eye(m+1,m+1));%转动m+1阶单位矩阵,赋值给psi
p=zeros(1,m+1);%p是1×(m+1)阶的零矩阵
psi(2,m+1)=-sum(x)/length(x);%将psi(矩阵)中的第2行、第(m+1)列的元素变为x的和除x的长度的负值。
for k=2:m %循环,k从2开始,每次步长为1,当k=m时,完成最后一次循环
%以psi的第k行作为多项式系数,计算多项式在x处的值,并赋给t
t=polyval(psi(k,:),x);
以psi的第k-1行作为多项式系数,计算多项式在x处的值,并赋给t
t1=polyval(psi(k-1,:),x);
%a等于 x与t中元素对应相乘,然后乘t的转置,再除以t乘t的转置
a=(x.*t)*t'/(t*t');
%b等于 t乘t的转置除以t1乘t1的转置
b=(t*t')/(t1*t1');
%psi的第k+1行元素为
%以1和-a为系数的多项式乘以以psi的第k行、第2到(m+1)列作为系数的多项式。
%减去b乘psi的第k-1行
psi(k+1,:)=conv([1 -a],psi(k,2:m+1))-b*psi(k-1,:);
end %结束for循环标志
for k=1:m %for循环,k从1开始,步长为1,当k=m时,完成最后一次循环
t=polyval(psi(k+1,:),x); %以psi的第k+1行作为多项式系数,计算多项式在x处的值,并赋给t
p(k+1)=y*t'/(t*t'); %y乘t的转置,除以t乘t的转置
end %结束for循环标志
p=p*psi; %p乘psi,然后赋给p,传递到主程序。
例一:
clc;clear;
f=@(beta,x)(beta(1)+beta(2)*x(:,1)+beta(3)*x(:,2)+beta(4)*x(:,1).*x(:,1)-beta(4)+...
beta(5)*x(:,2).*x(:,2)-beta(5)+beta(6)*x(:,1).*x(:,2));
x=[0.00144 0.45
0.00144 0.475
0.00144 0.525
0.00144 0.55
0.00152 0.45
0.00152 0.475
0.00152 0.525
0.00152 0.55
0.00168 0.45
0.00168 0.475
0.00168 0.525
0.00168 0.55
0.00176 0.45
0.00176 0.475
0.00176 0.525
0.00176 0.55];
y = [45.69110212
44.24592344
41.94713721
40.58647715
43.86413153
42.02196312
40.52672275
41.19385838
49.83122281
45.92215843
40.71631097
40.28065749
45.73223359
44.81973606
43.23365342
42.49947777];
beta0=[40.0001 1.0818 -2.5844 0.6803 0.6928 -0.4830];
beta=nlinfit(x,y,f,beta0);
例2:
function p=naorthfit(x,y,m)
%用途:多项式拟合
%格式:x,y为数据向量,m为拟合正交多项式次数,p返回多项式
%系数降幂排列
psi=fliplr(eye(m+1,m+1));%转动m+1阶单位矩阵,赋值给psi
p=zeros(1,m+1);%p是1×(m+1)阶的零矩阵
psi(2,m+1)=-sum(x)/length(x);%将psi(矩阵)中的第2行、第(m+1)列的元素变为x的和除x的长度的负值。
for k=2:m %循环,k从2开始,每次步长为1,当k=m时,完成最后一次循环
%以psi的第k行作为多项式系数,计算多项式在x处的值,并赋给t
t=polyval(psi(k,:),x);
以psi的第k-1行作为多项式系数,计算多项式在x处的值,并赋给t
t1=polyval(psi(k-1,:),x);
%a等于 x与t中元素对应相乘,然后乘t的转置,再除以t乘t的转置
a=(x.*t)*t'/(t*t');
%b等于 t乘t的转置除以t1乘t1的转置
b=(t*t')/(t1*t1');
%psi的第k+1行元素为
%以1和-a为系数的多项式乘以以psi的第k行、第2到(m+1)列作为系数的多项式。
%减去b乘psi的第k-1行
psi(k+1,:)=conv([1 -a],psi(k,2:m+1))-b*psi(k-1,:);
end %结束for循环标志
for k=1:m %for循环,k从1开始,步长为1,当k=m时,完成最后一次循环
t=polyval(psi(k+1,:),x); %以psi的第k+1行作为多项式系数,计算多项式在x处的值,并赋给t
p(k+1)=y*t'/(t*t'); %y乘t的转置,除以t乘t的转置
end %结束for循环标志
p=p*psi; %p乘psi,然后赋给p,传递到主程序。
展开全部
x=1978:2002;
y=[272.81,286.43,311.89,324.76,337.07,351.81,390.85,466.75,490.86,545.46,648.3,696.54,781.66,893.77,1114.32,1519.23,1990.66,2499.43,2957.55,3438.79,3801.09,4188.73,4771.17,5210.12,5741.03];
p = polyfit(x,y,5);
f = polyval(p,x);
plot(x,y,'o',x,f,'-');
p
=================以上是程序,结果为:
p =
1.0e+014 *( -0.0000 0.0000 -0.0000 0.0000 -0.0027 1.0632)
依次即为abcdef.
不过这些数据不适合用5次拟合,2或3次就够了。 5次拟合的数据,可能因为条件数差而不准确。
y=[272.81,286.43,311.89,324.76,337.07,351.81,390.85,466.75,490.86,545.46,648.3,696.54,781.66,893.77,1114.32,1519.23,1990.66,2499.43,2957.55,3438.79,3801.09,4188.73,4771.17,5210.12,5741.03];
p = polyfit(x,y,5);
f = polyval(p,x);
plot(x,y,'o',x,f,'-');
p
=================以上是程序,结果为:
p =
1.0e+014 *( -0.0000 0.0000 -0.0000 0.0000 -0.0027 1.0632)
依次即为abcdef.
不过这些数据不适合用5次拟合,2或3次就够了。 5次拟合的数据,可能因为条件数差而不准确。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
国赛B题啊,我们也正在做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询