非线性拟合实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
非线性拟合实验报告
——10应数 王车凤
一、实验目的:1.了解最小二乘拟合的基本原理和方法;
2.掌握用MATLAB 作曲线拟合的方法;
3.通过实例学习如何用拟合方法解决实际问题,注意与插值方法的区别。
4.了解各种参数的原理和方法。
5.通过范例展现由机理分析确定模型结构,拟合方法辨识参数,误差分析等
求解实际过程;
二.实验原理:
1.Isqcurvefit
设已知xdata=(xdata1,xdata2, …. xdatan),ydata=( ydata1, ydata2,…
ydatan),isqcurve-fit 用以求含参量x 的向量值函数
F(x,xdata)=(F(x.xdata1),…,F(x,xdatan))^T
中的参量x ,使得(F(x,xdatai)-ydatai )^2最小。
2.Isqnonlin
设已知xdata=(xdata1,xdata2, …. xdatan),ydata=( ydata1, ydata2,…
ydatan),Isqnonlin 用以求含参量的向量值函数。
F(x)=(f1(x),f2(x),…,fn(x))^T 中的参量x ,使得f^T(x)f(x)=f 最小
三.实验内容:1.用MATLAB 中的函数作曲线拟合,做出误差图;
2.用MATLAB 中的函数作四元函数的最小二乘拟合,作出误差图;
3.针对预测和确定参数的实际问题,建立数学建模,并求解。
四.实验步骤:1.开启软件平台——MATLAB ,开启MATLAB 编辑窗口。
2.根据各种数值解法步骤编写M 文件。
3.保存文件并运行。
4.观察运行结果(数值或图形)。
5.根据观察到的结果写出实验报告,并浅谈学习心得。
4.1问题提出
在农业生产、农田水利和水土保持工程设计中,土壤水动力学参数及土壤水分常数是非常重要的,而土壤持水曲线又是获得其它土壤水动力学参数及土壤水分常数的基础, 因此对土壤持水曲线的研究一直是土壤物理学家们关注的重点问题。
4.2 模型概述
VG 模型的描述及评价函数的构造
描述土壤中水分的含量与势能之间的关系的VG 方程如下:
P=p1+(p2-p1)./(1+abs(p3.*h).^n).^m (1) 其中P 为土壤含水率,cm 3/cm 3;h 为土壤水吸力,cm ;p2为土壤饱和含水率,cm 3/cm 3;p1为土壤残留含水率,cm 3/cm 3;p3、m 、n 为土壤水分特征曲线形状参数,n m 11-=,1>n 。
4.3.数值实验:(法一)
1) 编写M 文件curvefun1.m
function f=curvefun1(x,hdata)
f=x(1)+(x(2)-x(1))./(1+abs(x(3).*hdata).^x(4)).^(1-1./x(4))%其x(1)=P1,x(2)=P2,x(3)=P3,x(4)=n;
2) 主程序fzxec1.m如下:
hdata=[13.60,46.24,84.32,136.00,210.80,244.80,282.88,307.36,346.80,546.72,682.72];
Pdata=[0.43,0.42,0.40,0.37,0.33,0.31,0.29,0.27,0.24,0.20,0.17];
x0=[0.005,0.05,0.002,2];
x=lsqcurvefit('curvefun1',x0,hdata,Pdata)
f=curvefun1(x,hdata)
plot(hdata,f,'r',hdata,Pdata,'c')
3)运行主程序,得结果为:
f =
Columns 1 through 9
0.4263 0.4202 0.4046 0.3740 0.3251 0.3045 0.2837 0.2716
0.2542
Columns 10 through 11
0.19470.1714
x =0.0775 0.4268 0.0046 2.1166
(法二)
1)编写M文件curvefun2.m
function f=curvefun2(x)
hdata=[13.60,46.24,84.32,136.00,210.80,244.80,282.88,307.36,346.80,546.72,682.72];
Pdata=[0.43,0.42,0.40,0.37,0.33,0.31,0.29,0.27,0.24,0.20,0.17];
f=Pdata-x(1)-(x(2)-x(1))./(1+abs(x(3).*hdata).^x(4)).^(1-1./x(4));
2) 主程序fzxec2.m如下:
x0=[0.005,0.05,0.002,2];
x=lsqnonlin('curvefun2',x0)
f=curvefun2(x)
plot(hdata,f,'m',hdata,Pdata,'+')
3)运行主程序,得结果为:
f =
Columns 1 through 9
0.0037 -0.0002 -0.0046 -0.0040 0.0049 0.0055 0.0063 -0.0016
-0.0142
Columns 10 through 11
0.0053 -0.0014
x =0.0775 0.4268 0.0046 2.1166
4.4 结果分析