MATLAB作业 时间2009.12.18.10:30

matlab的课下作业
1、线性拟合用polyfit(x,y,n)%n代表拟合的最高次数
例子:
xdata = [20.5 32.7 51 73 95.7];
ydata = [765 826 873 942 1032];
[p,s]=polyfit(xdata,ydata,1)
plot(xdata,ydata,'o',xdata,polyval(p,xdata)) %
运行结果:
p = 3.3987  702.0968
s = R: [2x2 double]
    df: 3
    normr: 17.4235
s是个结构数组,
S contains fields for the triangular factor (R) from a QR decomposition of the Vandermonde matrix 【范德蒙特矩阵】of X, the degrees of freedom (df)【自由度】, and the norm of the residuals (normr)【范数】.

注释:
上述采用的是比较弱智的方法,假如只是给你数据,没告诉适用于怎样的拟合,该怎么办呢?总不至于挨个去编程吧?
MATLAB就已经给你编好,直接用cftool;
Data输入相应的x,y,然后create data set,然后fitting,选择提供的各种模型,逐个试试,总能找到残差最小的,相关系数最大的一种模型。
2.曲线拟合,采用lsqcurvefit(fun,x0,xdata,ydata)
注释:这里的fun必须调用其他的.m文件,而不能直接使用函数,否则会报错。(我在这个上面浪费了很多的时间呀!)

例子:
曲线拟合函数F=x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3,给定十组数据是在一定的误差范围内,画出拟合图像
function fitting
x0 = [1, 1, 1];
xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];
ydata = x0(1)*xdata.^2 + x0(2)*sin(xdata) + x0(3)*xdata.^3+100*normrnd(0,1,1,10);%100*normrnd(0,1,1,10)是指误差正态分布
[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata);
xdata1 = 0:0.01:10;
y1 = x0(1)*xdata1.^2 + x0(2)*sin(xdata1) + x0(3)*xdata1.^3;
y2 = x(1)*xdata1.^2 + x(2)*sin(xdata1) + x(3)*xdata1.^3;
plot(xdata1,y1,'b-',xdata,ydata,'r.',xdata1,y2,'g-')

function F = myfun(x,xdata)
F = x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3;

 

                                                                                              --时间2009.12.18.10:30

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值