MATLAB曲线拟合(含实例)(3)

2020-03-29 19:09

附图见后面:

曲线拟合向导 Genial @ USTC

2004-4-18

FMINSEARCH通常能够用来解决不连续情况,特别是如果他们不出现在解的附近的时候。它得到的通常也是局部解。FMINSEARCH只能够最小化实数值(也就是说,解的域必须只能包括实数,函数的输出只能够为实数值)。当感兴趣的是复数变量的域的时候,他们必须被分割为实部与虚部。

MATLAB的FIGURE窗口:最基本的拟合界面与数据统计工具

MATLAB通过基本的拟合界面也支持基本曲线拟合。利用这个界面,你可以快速地在简单易用的环境中实现许多基本的曲线拟合。这个界面可以实现以下功能:

a. 通过比样条插值(spline interpolant)、hermite 插值、或者是高达10阶的多项式插

值实现数据的拟合;

b. 对给定数据同时实现多样插值的绘制; c. 绘制残差图;

d. 检查拟合结果的残差的数值;

e. 通过内插值或者外推插值评价一个拟合结果; f. 对拟合结果和残差的模进行图形绘制; g. 将拟合结果保存入MATLAB工作空间。

开发你的拟合应用的时候,你可以通过基本拟合(Basic Fitting)界面,也可以通过命

曲线拟合向导 Genial @ USTC 2004-4-18

令行函数,也可以同时作用。你可以通过基本拟合界面只能够实现2-D数

据的拟合。然而,如果你用subplot绘制多个数据集,只要有至少一个数据集是2D的,那么就可以用基本拟合界面。

可以通过如下步骤激活基本拟合界面: 1. 绘制数据;

2. 从figure窗口的 Tools 菜单条下面选择Basic Fitting 菜单项; 有关Basic Fitting界面的更多信息,请查阅MATLAB帮助文档的相应部分。 注意:对于HP,IBM以及SGI平台,MATLAB6.0(R12.0)以及MATLAB6.1(R12.1)的基本拟合界面不受支持。

数据统计界面可以用来对图形中的每个数据集进行统计量的计算。可以通过如下步骤将数据统计界面激活:

1. 制数据;

2. 从figure窗口的 Tools 菜单条下面选择Data Statistics 菜单项; 优化工具箱函数

LSQNONLIN 解决非线性最小二乘法问题,包括非线性数据拟合问题 LSQCURVEFIT 解决非线性数据拟合问题 下面给出利用这两个函数的例子:

LSQNONLIN:利用这个函数最小化连续函数只能够找到句柄解。下面的例子说明利用LSQNONLIN函数用下面的函数进行拟合:

f = A + B exp(C*x)+D*exp(E*x)

对数据集x与y进行拟合,其中y是在给定x的情况下的期望输出。为了解决这个问题,先建立下面的名为 fit_simp.m的函数,它利用数据x与y,将他们作为优化输入参数传递给LSQNONLIN。利用给定的数据x计算f的值,再与原始数据y进行比较。经验值与实际计算出的值之间的差异作为输出值返回。LSQNOLIN函数就是最小化这些差的平方和。 function diff = fit_simp(x,X,Y)

% 此函数被LSQNONLIN调用 % x 是包含等式系数的向量

% X 与 Y 是作为操作数传递给lsnonlin A = x(1); B = x(2);

C = x(3);

曲线拟合向导 Genial @ USTC 2004-4-18 D = x(4); E = x(5);

diff = A + B.*exp(C.*X)+D.*exp(E.*X)-Y;

下面的脚本是利用上面定义的fit_simp.m函数的一个例子: % 定义你打算拟合的数据集合 >> X=0:.01:.5;

>> Y=2.0.*exp(5.0.*X)+3.0.*exp(2.5.*X)+1.5.*rand(size(X)); % 初始化方程系数 >> X0=[1 1 1 1 1]';

% 设置用中等模式(memdium-scale)算法 >>options=optimset('Largescale','off'); % 通过调用LSQNONLIN重现计算新的系数

>> x=lsqnonlin(@fit_simp,X0,[],[],options,X,Y); % 调用LSQNONLIN结果输出表明拟合是成功的 Optimization terminated successfully:

Gradient in the search direction less than tolFun Gradient less than 10*(tolFun+tolX) % 绘制原始数据与新的计算的数据

>> Y_new=x(1)+x(2).*exp(x(3).*X)+x(4).*exp(x(5).*X);

>>plot(X,Y,'+r',X,Y_new,'b');

注意:LSQNONLIN 只可以处理实数变量。在处理包括复数变量的实例的拟合的时候,数据集应该被切分成实数与虚数部分。下面给出一个例子演示如何对复

数参数进行最小二乘拟合。

曲线拟合向导 Genial @ USTC 2004-4-18

为了拟合复数变量,你需要将复数分解为实数部分与虚数部分,然后把他们传递到函数中去,这个函数被LEASTSQ作为单个输入调用。首先,将复数分解为实部与虚部两个向量。其次,将这两个向量理解成诸如第一部分是实部、第二部分是虚部。在MATLAB函数中,重新装配复数数据,并用你想拟合的复数方程计算。将输出向量分解实部与虚部,将这两部分连接为一个单一的输出向量传递回LEASTSQ。下面,给出一个例子演示如何根据两个复数指数拟合实数X与Y。

建立方程:

function zero = fit2(x,X,Y) % 根据输入x重建复数输入 cmpx = x(1:4)+i.*x(5:8); % 利用复数计算函数

zerocomp = cmpx(1).*exp(cmpx(2).*X) + cmpx(3).* exp(cmpx(4).*X)-Y; % 将结果转换成一个列向量

% 其中第一部分是实部,第二部分是虚部 numx = length(X); % 实部长度 zero=real(zerocomp); %实部

zero(numx+1:2*numx)=imag(zerocomp); % 虚部

为了评价计算这个函数,需要X与Y数据集。LSQNONLIN将根据它拟合出下面方程中的参数a,b,c与d:

Y = a*exp(b*X)+c*exp(d*X); 其中,a,b,c与d是复数变量。 >> X=0:.1:5; >> Y=sin(X);

>> Y=Y+.1*rand(size(Y))-.05; >> cmpx0=[1 i 2 2*i]; >>x0(1:4)=real(cmpx0); >>x0(5:8)=imag(cmpx0);

>> x=leastsq(@fit2,x0,[],[],X,Y); >>cmpx=x(1:4)+i.*x(5:8);

>> Y1=real(cmpx(1).*exp(cmpx(2).*X)+cmpx(3).*exp(cmpx(4).*X)); 曲线拟合向导 Genial @ USTC 2004-4-18 >>plot(X,Y1,'r'); >> hold on >>plot(X,Y

,'+');

LSQCURVEFIT:利用此函数可以在最小二乘意义上解决非线性曲线拟合(数据拟合)问题。也就是说,给定输入数据xdata,以及观测的输出数据ydata,找到系数x,使得函数F(x,xdata)能够最好的拟合向量值。LSQCURVEFIT利用与LSQNONLIN相同的算法。它的目的在于专门为数据拟合问题提供一个接口。

在拟合的时候,2维、3维或者N维参数拟合是没有什么差别的。下面给出一个3维参数拟合的例子。待拟合函数是:

z = a1*y.*x..^2+a2*sin(x)+a3*y.^3; 建立的myfun.m的函数如下: function F = myfun(a, data); x = data(1,:); y = data(2,:);

F= a(1)*y.*x.^2+a(2)*sin(x)+a(3)*y.^3; 下面的脚本展示了这么利用上面的函数:

曲线拟合向导 Genial @ USTC 2004-4-18 >> xdata= [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];

>>ydata= [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];


MATLAB曲线拟合(含实例)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:江苏省海门中学09-10学年高二上学期期末考试(政治必修) -

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: