当前位置:文档之家› 数据建模常规方法的Matlab实现(实例)

数据建模常规方法的Matlab实现(实例)


读取的格式 读取2行数据
%将Matlab数据写入记事本 fid= fopen('tp.txt','wt'); %文件扩展名可以为:*.dat或*.xls fprintf(fid,'This is the database of class 1.\n'); name='Sally';types=1;x=3.1;y=45;answer='Yes'; fprintf(fid,'% s Type %u %f %u %s \n',name,types,x,y,answer); name='Tom';types=2;x=2.5;y=20;answer='No'; fprintf(fid,'% s Type %u %f %u %s \n',name,types,x,y,answer); fclose(fid);
1)编写M文件 curvefun1.m function f=curvefun1(x,tdata) f=x(1)+x(2)*exp(-0.02*x(3)*tdata); %其中 x(1)=a; x(2)=b;x(3)=k;
2)输入命令 tdata=100:100:1000; cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10, 6.26,6.39,6.50,6.59]; x0=[0.2,0.05,0.05]; x=lsqcurvefit ('curvefun1',x0,tdata,cdata) f= curvefun1(x,tdata) plot(tdata,cdata,'o',tdata,f,'r-')
的。
1. lsqcurvefit
已知数据点: xdata=(xdata1,xdata2,…,xdatan),
ydata=(ydata1,ydata2,…,ydatan) lsqcurvefit用以求含参量x(向量)的向量值函数
F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T 中的参变量x(向量),使得
(2)对应函数形式为 f t acosktewt ,进行拟合.
程序如下: syms t
x=[0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6; 14.4;15];
y=[1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
运行结果:P = 0.1481 -1.4030 1.8537 8.2698(降幂排)
2.图形窗口的多项式拟合
画出数据点: >> x=[1 2 3 4 5 6 7 8 9];y=[9 7 6 3 -1 2 5 7
20];plot(x,y,'r*'); 在图形窗口中单击Tools-Basic Fitting,打
2)输入命令: x0=[0.2,0.05,0.05]; x=lsqnonlin('curvefun2',x0) f= curvefun2(x)
MATLAB(liti22)
3)运算结果为 f =1.0e-003 *(0.2322 -0.1243 -0.2495 -0.2413 -0.1668
-0.0724 0.0241 0.1159 0.2030 0.2792 x =0.0063 -0.0034 0.2542
开对话框。
1.2.2 指定函数拟合
例2:在某次阻尼振荡实验中测得18组数据点。
x 0 0.4 1.2 y 1 0.85 0.29 x 7.2 8 9.2
2 -0.27 10.4
2.8 -0.53 11.6
3.6 -0.4 12.4
4.4 -0.12 13.6
5.2 0.17 14.4
y 0.15 -0.03 -0.15 -0.071 0.059 0.08 0.032 -0.015
合函数f来拟合数据x,y.此处数据必须是列向量的形式.
1.2.3 曲线拟合工具箱
MATLAB主窗口左下角: start→toolboxes→CurveFitting→Curve Fitting Tool (cftool)
练习:
1、有一只对温度敏感的电阻,已经测得一组温度t 和电阻R数据: R() 20.5 32.7 51.0 73.0 95.7 t( o C) 765 826 873 942 1032
t 0 0.5
1.0
1.5
2.0
2.5
3.0
v 0 0.4794 0.8415 0.9975 0.9093 0.5985 0.1411
s 1 1.5
2
2.5
3
3.5
4
1、解答:
R与t大致呈 直线关系, 即
R at b
2、Matlab运行程序:
从图形上看,次数越高拟合程度越好。
3、Matlab运行程序:
1.1.1 Excel与MATLAB的数据交互
首先要安装Excel和MATLAB。 第一,打开Excel的工具→宏→安全性→安全级(中) 第二,打开Excel的工具→加载宏→浏览→
安装MATLAB的目录→toolbox →exlink →excllink.xla →确定,得到如下的工具条(即可使用):
function f=curvefun2(x) 应将cdata tdata的值写在
tdata=100:100:1000;
curvefun2.m中
cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,
6.10,6.26,6.39,6.50,6.59];
f=x(1)+x(2)*exp(-0.02*x(3)*tdata)- cdata;
解法2 : 用命令lsqnonlin
f(x)=F(x,tdata,ctada)=(a be0.02kt1 c1,L , a be0.02kt10 c1)T
x=(a,b,k)
函数curvefun2的自变量是x,
1)编写M文件 curvefun2.m
cdata和tdata是已知参数,故
f=fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a' ,'k','w'});
cfun=fit(x,y,f) %显示拟合函数
xi=0:.1:20;
yi=cfun(xi);
plot(x,y,'r*',xi,yi,'b-') 说明:fittype是自定义拟合函数,cfun=fit(x,y,f)是根据自定义的拟
=F(x,xdatai)-ydatai
输入格式为: 1) x=lsqnonlin(‘fun’,x0); 2)x=lsqnonlin(‘fun’,x0,options); 3)x= lsqnonlin(‘fun’,x0,options‘grad’); 4)[x,options]=lsqnonlin (‘fun’,x0,…); 5)[x,options,funval]=lsqnonlin(‘fun’x0,…);
1.1.2 记事本与MATLAB的数据交互
%从记事本t.txt中读取数据 load(‘filename.***’) %记事本中记录的全是数据 [name,type, x,y,answer]=textread(‘t.txt’,‘%s Type %n %f %n
%s’,2)
每一列要保存的变量名
保存的文件名
ydata=(ydata1,ydata2,…,ydatan) lsqnonlin用以求含参量x(向量)的向量值函数 f(x)=(f1(x),f2(x),…,fn(x))T 中的参量x,使得
f T (x) f (x) f1(x)2 f2 (x)2 fn (x)2
最小. 其中 fi(x)=f(x,xdatai,ydatai)
说明:x= lsqnonlin (‘fun’,x0,options);
fun是一个事先建立的 定义函数f(x)的M文件, 自变量为x
迭代初值
所有优 化函数
解法1. 用命令lsqcurvefit
F(x,tdata)= (a be0.02kt1 ,L , a be0.02kt10 )T ,x=(a,b,k)
1.3.2 薄膜渗透率的测定
下面用Matlab软件进行计算。
补充:用MATLAB作非线性最小二乘拟合
MATLAB提供了两个求非线性最小二乘拟合的函数: lsqcurvefit和lsqnonlin.两个命令都要先建立M文件 fun.m,在其中定义函数f(x),但两者定义f(x)的方式是不同
拟合引例中电阻R与温度t之间的关系R=at+b。
2、x为0到1之间的数,间隔0.1,y为-0.447,1.978, 3.28,6.16,7.08,7.34,7.66,9.56,9.48, 9.30,11.2,分别用二次、五次和十次拟合曲线 来拟合这组数据,并进行比较。
3、已知在某实验中测的某质点的位移和速度随时 间的变化如下,求质点的速度与位移随时间的 变化曲线以及位移随速度的变化曲线。
n
2
(F(x, xdatai ) ydatai ) 最小
i 1
说明:x=lsqcurvefit(‘fun’,x0,xdata,ydata,options);
fun是一个事先建立的 定义函数F(x,xdata) 的 M文件, 自变量为x和 xdata
相关主题