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

曲线拟合:
实测以下试验数据,请选用光滑的二次曲线拟合这些离散数据,要求:
(1) 个数据点离曲线的综合误差尽可能小;
(2) 画出拟合曲线图形,标出原始离散数据点。
(3) 划出误差分布图形,定量分析表述拟合误差。
x 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0


y -0.44 1.97 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2

请高手指点啊
lucky8 当前离线   回复时引用此帖
旧 2007-07-17, 16:17   #2
rockman6320
初级会员
 
注册日期: 2007-07-15
帖子: 6
声望力: 0
rockman6320 正向着好的方向发展
默认

对于这个问题,小弟有几个粗浅的见解:
(1) 个数据点离曲线的综合误差尽可能小
可使用一维插值interp1,我选用了三次样条插值spline;
(2) 画出拟合曲线图形,标出原始离散数据点
假设曲线是线性二次曲线:f(x)=a1*x^2+a2*x+a3,然后求出A=(a1,a2,a3),使得f(x(i))-y(i)最小(当然非线性也是可以的)
(3) 划出误差分布图形,定量分析表述拟合误差
这个还不会,哈哈

下面是程序:x=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
>> y=[-0.44 1.97 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
>> X=0:0.01:1;
>> Y=interp1(x,y,X,'spline');
>> A=polyfit(X,Y,2)
>> z=polyval(A,X);
>> plot(x,y,'k+',X,z,'r')
rockman6320 当前离线   回复时引用此帖
旧 2007-07-17, 18:01   #3
lucky8
初级会员
 
注册日期: 2007-07-16
帖子: 3
声望力: 0
lucky8 正向着好的方向发展
默认

我也不会(3) 请教高手啊
lucky8 当前离线   回复时引用此帖
旧 2007-07-23, 19:01   #4
lucky8
初级会员
 
注册日期: 2007-07-16
帖子: 3
声望力: 0
lucky8 正向着好的方向发展
默认

很急啊 呼唤高手
lucky8 当前离线   回复时引用此帖
旧 2007-07-24, 11:20   #5
spy1120
普通会员
 
spy1120 的头像
 
注册日期: 2007-05-18
年龄: 38
帖子: 77
声望力: 19
spy1120 正向着好的方向发展
默认

clear;clc;clf %清除内存中的变量,并清屏
x=0:0.1:1;
y=[-0.44 1.97 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
A=polyfit(x,y,9);%把所有数据的y坐标关于x进行9次拟合,可以自己改
Y=poly2str(A,'X')%显示拟合多项式
xx=0:0.001:1;%设置xx
Y=polyval(A,xx);%根据xx,用拟合多项式A生成拟合好的数据
plot(x,y,'*',xx,Y,'r')
grid on%显示网格
__________________
吾幼学文,10年不就,怒,遂习武,校场骑射,中鼓吏,乃逐,闭门研医良久,自攥一良方,服之,卒!!!
spy1120 当前离线   回复时引用此帖
旧 2007-07-27, 13:35   #6
宝石蓝
初级会员
 
注册日期: 2007-07-12
帖子: 1
声望力: 0
宝石蓝 正向着好的方向发展
默认

很基础阿,不过还是不是很熟悉阿,好好学习了
宝石蓝 当前离线   回复时引用此帖
旧 2007-08-07, 09:41   #7
lengxueshen
初级会员
 
注册日期: 2007-08-07
帖子: 2
声望力: 0
lengxueshen 正向着好的方向发展
默认

x=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
y=[-0.44 1.97 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
a = linspace(0,1.0,100);
b = interp1(x,y,a,'cubic');
plot(a,b,x,y,'cubic');
lengxueshen 当前离线   回复时引用此帖
旧 2007-08-07, 09:44   #8
lengxueshen
初级会员
 
注册日期: 2007-08-07
帖子: 2
声望力: 0
lengxueshen 正向着好的方向发展
默认

或者
x=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
>> y=[-0.44 1.97 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
a = 0:0.01:1.0;
b = ployval(ployfit(x,y,3),a);
plot(a,b,x,y,'bo');
纠正一下刚才上面的错了
应该是plot(a,b,x,y,'bo');
不是plot(a,b,x,y,'cubic');
lengxueshen 当前离线   回复时引用此帖
旧 2007-08-12, 11:27   #9
slgu
高级会员
 
注册日期: 2007-06-24
年龄: 70
帖子: 188
声望力: 21
slgu 正向着好的方向发展
默认

yhat=(b(1)+b(2)*exp(b(3)*x+b(4)*x.^2))./(1+b(5)*exp(b(6)*x+b(7)*x.^2));
SSy = 129.6221
b=[11.28373734, 26.66992882, 5.978100169, -20.46399152, 111.9917405, -11.62488572, 4.328266653]
RSS =2.932514206
MSe = 0.7331
R2 =.977376
slgu 当前离线   回复时引用此帖
回复

主题工具
显示模式

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

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



所有时间均为北京时间。现在的时间是 07:35


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