![]() |
[求助]曲线拟合
2 个附件
由于我平时没怎么学过MATLAB,碰到毕业论文,一堆数据,要求把它拟合出一条曲线。
请才学之士帮帮忙,我比较急。 主要是时间与电压、电流、温度的三组曲线。数据在附件里。 先谢谢了, 把程序写在下面,最好能贴上所拟合出来的曲线图。 |
解答
% (1)-----选择拟合多项式拟合的阶数
disp('请以向量的形式输入x,y.') x=input('x='); y=input('y='); nx = length(x); ny = length(y); n = length(x); if nx == ny x1 = x(1); xn = x(n); % n个数据可以拟合(n-1)阶多项式,高阶多项式多次求导,数值特性变差 disp('通过下面的交互式图形,你可以事先估计一下你要拟合的多项式的阶数,方便下面的计算.') disp('polytool()是交互式函数,在图形上方[Degree]框中输入阶数,右击左下角的[Export]输出图形') disp('回车打开polytool交互式界面') pause; polytool(x,y,1) % 观察多项式拟合的图形,选择置信区间最小的多项式阶数 disp('回车继续进行拟合') pause; % (2)-----计算多项式的各项系数和拟合值 m=input(' 输入多项式拟合的阶数 m = '); [p,S]=polyfit(x,y,m); disp ' 输出多项式的各项系数' fprintf (1,' a = %3.16f \n',p) disp ' 输出多项式的有关信息 S' disp (S) [yh,delta]=polyconf(p,x,S); disp ' 观测数据 拟合数据' disp ' x y yh' for i = 1 : n xy = [x(i) y(i) yh(i)]; disp (xy) end % (3)-----绘制观测数据离散点图和多项式曲线 plot(x,y,'r.') title('\bf 实验数据离散点图 / 多项式曲线 \it y = a0+a1x+a2x^2+a3x^3+...') grid hold on; xi=[x1:0.1:xn]; yi=polyval(p,xi); plot(xi,yi,'k-') % (4)-----拟合效果和精度检验 Q=sum((y-yh).^2); SGM = sqrt(Q / (n - 2)); RR = sum((yh-mean(y)).^2)/sum((y-mean(y)).^2); fprintf (1,' 剩余平方和 Q = %3.6f \n',Q) fprintf ('\n') fprintf (1,' 标准误差 Sigma = %3.6f \n',SGM) fprintf ('\n') fprintf (1,' 相关指数 RR = %3.6f \n',RR) fprintf ('\n') else disp('输入的数据有误,请重新运行程序并输入正确的数据。') clear zxecf end |
解题步骤:
1.将你的数据保存成txt,只要数据,命名为shuju.txt,放在根目录下。 2.输入以下命令,调用变量 load shuju.txt t=shuju(:,1); T=shuju(:,2); U=shuju(:,3); I=shuju(:,4); 四个变量依次是时间,温度,电压,电流。 3.在命令出口输入nihe(程序保存的文件名) 当提示你输入x=时,输入t, 当提示你输入y=时,输入T, 然后依据提示去做,现在交互式窗口尝试合适的拟合阶数,然后输入拟合的阶数, 这是t和T的图像就做出来了, 然后输入hold on 再次运行nihe, 做出t和U, hold on 再次运行nihe, 做出t和I |
因为事先不知道哪个阶数合适,所以只能这样来解决了,显得有些繁琐,本人能力有限,请原谅。注意拟合中的龙格现象(当点数n 增大(次数m=n-1 也增大)时,有时会在两端产生激烈的震荡,出现函数不收敛的现象,即所谓的龙格现象),剩下的工作你自己来做就可以了。
|
太谢谢你了。
|
所有时间均为北京时间。现在的时间是 11:08。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.