Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2008-05-04, 14:50   #1
北斗
初级会员
 
注册日期: 2008-05-04
年龄: 39
帖子: 7
声望力: 0
北斗 正向着好的方向发展
默认 [求助]曲线拟合

由于我平时没怎么学过MATLAB,碰到毕业论文,一堆数据,要求把它拟合出一条曲线。
请才学之士帮帮忙,我比较急。
主要是时间与电压、电流、温度的三组曲线。数据在附件里。
先谢谢了,
把程序写在下面,最好能贴上所拟合出来的曲线图。
上传的附件
文件类型: doc shuju.doc (74.0 KB, 10 次查看)
北斗 当前离线   回复时引用此帖
旧 2008-05-04, 18:12   #2
shiqiang
高级会员
 
shiqiang 的头像
 
注册日期: 2008-02-26
年龄: 38
帖子: 158
声望力: 25
shiqiang 身上有一圈迷人的光环哦shiqiang 身上有一圈迷人的光环哦shiqiang 身上有一圈迷人的光环哦
默认 解答

% (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
__________________
学我想学,用我所学。:lovely:
shiqiang 当前离线   回复时引用此帖
旧 2008-05-04, 18:18   #3
shiqiang
高级会员
 
shiqiang 的头像
 
注册日期: 2008-02-26
年龄: 38
帖子: 158
声望力: 25
shiqiang 身上有一圈迷人的光环哦shiqiang 身上有一圈迷人的光环哦shiqiang 身上有一圈迷人的光环哦
默认

解题步骤:
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
__________________
学我想学,用我所学。:lovely:
shiqiang 当前离线   回复时引用此帖
旧 2008-05-04, 18:21   #4
shiqiang
高级会员
 
shiqiang 的头像
 
注册日期: 2008-02-26
年龄: 38
帖子: 158
声望力: 25
shiqiang 身上有一圈迷人的光环哦shiqiang 身上有一圈迷人的光环哦shiqiang 身上有一圈迷人的光环哦
默认

因为事先不知道哪个阶数合适,所以只能这样来解决了,显得有些繁琐,本人能力有限,请原谅。注意拟合中的龙格现象(当点数n 增大(次数m=n-1 也增大)时,有时会在两端产生激烈的震荡,出现函数不收敛的现象,即所谓的龙格现象),剩下的工作你自己来做就可以了。
__________________
学我想学,用我所学。:lovely:
shiqiang 当前离线   回复时引用此帖
旧 2008-05-05, 07:23   #5
北斗
初级会员
 
注册日期: 2008-05-04
年龄: 39
帖子: 7
声望力: 0
北斗 正向着好的方向发展
默认

太谢谢你了。
北斗 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
How MATLAB Represents Pixel Colors TechnicalArticles MATLAB技术文章 0 2008-01-06 16:32
【求助】如何求解如下方程? woshizhuqiqi MATLAB论坛 1 2007-12-20 22:00
留学美国行李清单 labfans MATLAB新闻聚合 0 2007-11-20 15:15
【求助】如何计算离散曲线的曲率半径 sophiemarceau MATLAB论坛 0 2007-08-22 19:40


所有时间均为北京时间。现在的时间是 20:54


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.