- 积分
- 3
- 注册时间
- 2007-2-15
- 仿真币
-
- 最后登录
- 1970-1-1
|
数据拟合在excel中原本很简单的事,我在excel中做一个多项式拟合,并通过趋势线得到拟合公式。
等把公式的系数代入检验,却发现相差甚远,估计是小数点后面截掉了,精度不够,但又不知 excel如何设置系数的精度......
于是就自己编了个多项式拟合程序,通过“长精度”(format long)数据格式,把系数的小数点后面的数字都显示出来,就解决了问题。
关键就是一个polyfit(x,y,N)吧。—— 贡献出来,以供有类似问题的朋友分享!
待拟合的原数据:
x y
0.1 0.9
49.49990 21.0372
105.4909 30.3963
187.3109 37.18
324.7398 43.4373
456.8755 46.5135
650.8909 48.8286
846.3265 50
% 多项式拟合(曲线)
clear;clc
N=4; % N-幂次...需修改!
n=8; % n-数据个数(行数)...需修改!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 从文件读入x、y
fid=fopen('polyfit_data.txt','r');
S=fscanf(fid,'%g',[2 n]); %从文件读入数据
fclose(fid);
x=S(1,:); y=S(2,:);
format long
p=polyfit(x,y,N) % 计算N阶多项式的系数
%%%%%%%%%%%%%%%%%%%以下求相关系数%%%%%%%%%%%%%%%%%%
% 计算拟合值y1(1:n)
for i=1:n
y1(i)=p(1)*x(i)^4+p(2)*x(i)^3+p(3)*x(i)^2+p(4)*x(i)+p(5);
end
% 求相关系数R^2
y_m=mean(y);
S_all=0;
S_fit=0;
for i=1:n
S_all=S_all+(y(i)-y_m)^2;
S_fit=S_fit+(y1(i)-y_m)^2;
end
format short
R_2=S_fit/S_all %计算相关系数
|
评分
-
1
查看全部评分
-
|