fminsearch 拟合

%% Optimal Fit of a Non-linear Function
% This is a demonstration of the optimal fitting of a non-linear function to a
% set of data. It uses FMINSEARCH, an implementation of the Nelder-Mead simplex
% (direct search) algorithm, to minimize a nonlinear function of several
% variables.
%
% Copyright 1984-2002 The MathWorks, Inc.
% $Revision: 5.15 $ $Date: 2002/04/02 17:52:33 $

%%
% First, create some sample data and plot it.

% t = (0:.1:2)‘;
% y = [5.8955 3.5639 2.5173 1.9790 1.8990 1.3938 1.1359 1.0096 1.0343 …
% 0.8435 0.6856 0.6100 0.5392 0.3946 0.3903 0.5474 0.3459 0.1370 …
% 0.2211 0.1704 0.2636]’;

function [coeff,estimated_lambda] = fitdemo(XData, YData)

if nargin<1,
XData = (0:.1:2)‘;
YData = [5.8955 3.5639 2.5173 1.9790 1.8990 1.3938 1.1359 1.0096 1.0343 …
0.8435 0.6856 0.6100 0.5392 0.3946 0.3903 0.5474 0.3459 0.1370 …
0.2211 0.1704 0.2636]’;
clc;
end

if ( size(XData) ~= size(YData) )
error(‘The two input matrices have to be of the same sizes’);
end

plot(XData,YData,‘ro’); hold on; h = plot(XData,YData,‘b’); hold off;
title(‘Input data’);

if ( size(XData, 1) == 1 )
t = XData’;
y = YData’;
elseif(size(XData, 2) == 1)
t = XData;
y = YData;
end

%%
% The goal is to fit the following function with two linear parameters and two
% nonlinear parameters to the data:
%
% y = C(1)*exp(-lambda(1)*t) + C(2)*exp(-lambda(2)*t)
%
% To fit this function, we’ve create a function FITFUN. Given the nonlinear
% parameter (lambda) and the data (t and y), FITFUN calculates the error in the
% fit for this equation and updates the line (h).

% type fitfun

%%
% Make a guess for initial estimate of lambda (start) and invoke FMINSEARCH. It
% minimizes the error returned from FITFUN by adjusting lambda. It returns the
% final value of lambda.

start = [1;0];
options = optimset(‘TolX’,0.1);
estimated_lambda = fminsearch(‘fitfun’,start,options,t,y,h);
%estimated_lambda = [estimated_lambda guidata(gcf)];
coeff = guidata(h); % C1,C2
‘estimated_lambda = estimated_lambda’;
‘coeff = coeff’;
要拟合的函数为

function err = fitfun(lambda,t,y,handle)
%FITFUN Used by FITDEMO.
% FITFUN(lambda,t,y,handle) returns the error between the data and the values
% computed by the current function of lambda.
%
% FITFUN assumes a function of the form
%
% y = c(1)*exp(-lambda(1)*t) + … + c(n)*exp(-lambda(n)*t)
%
% with n linear parameters and n nonlinear parameters.

% Copyright 1984-2002 The MathWorks, Inc.
% $Revision: 5.8 $ $Date: 2002/04/08 20:04:42 $

A = zeros(length(t),length(lambda));
for j = 1:length(lambda)
A(:,j) = exp(-lambda(j)t);
end
c = A\y;
z = A
c;
err = norm(z-y);

set(gcf,‘DoubleBuffer’,‘on’);
set(handle,‘ydata’,z)
guidata(handle, c);
drawnow
pause(.04)
因为这种拟合方法用的比较少,所以特此总结出来,希望后来对自己的道路段的拟合会有用处!

2016-1-23 1059

转载:https://www.cnblogs.com/arxive/p/5152950.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值