Matlab中的指数曲线拟合

时间:2014-05-26 09:46:49

标签: matlab curve-fitting

我有一个加载到matlab的数据集。我需要对绘制的曲线进行指数拟合,而不使用曲线拟合工具cftool

我想通过执行代码/函数来手动执行此操作,该代码/函数将输出对应于等式的ab的值:

 y = a*exp(b*x)

然后使用这些值,我将进行错误优化并创建最适合我的数据。

请帮忙吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

试试这个......

f = fit(x,y,'exp1');

答案 1 :(得分:0)

我认为这种分配的典型目标是通过记录双方的记录,可以使用多种拟合方法的各种方法。

    ln(y) = ln(a) + ln( exp(x).^b ) 
    ln(y) = ln(a) + b * ln( exp(x) )

当由于ln的行为接近零而涉及噪声等误差时,这种方法可能会遇到困难。

答案 2 :(得分:0)

在本练习中,我有一组呈现指数曲线的数据,我想以指数方式拟合它们并获得a和b的值。我使用了以下代码,它使用了我的数据。

"trail.m" file: 
 %defining the data used 
 load trialforfitting.txt;
 xdata= trialforfitting(:,1); 
 ydata= trialforfitting(:,2); 

 %calling the "fitcurvedemo" function
 [estimates, model] = fitcurvedemo(xdata,ydata)
 disp(sse); 

 plot(xdata, ydata, 'o'); %Data curve

 hold on
 [sse, FittedCurve] = model(estimates);

 plot(xdata, FittedCurve, 'r')%Fitted curve
xlabel('Voltage (V)')
ylabel('Current (A)')
title('Exponential Fitting to IV curves');
legend('data', ['Fitting'])
hold off

"fitcurvedemo.m" file: 
function [estimates, model] = fitcurvedemo(xdata, ydata)
%Call fminsearch with a random starting point.
start_point = rand(1, 2);
model = @expfun;
estimates = fminsearch(model, start_point);
%"expfun" accepts curve parameters as inputs, and outputs 
%the sum of squares error [sse] expfun is a function handle;
%a value that contains a matlab object methods and the constructor
%"FMINSEARCH" only needs sse
%estimate returns the value of A and lambda
%model computes the exponential function 
    function [sse, FittedCurve] = expfun(params)
        A = params(1);
        lambda = params(2);
        %exponential function model to fit
        FittedCurve = A .* exp(lambda * xdata); 
        ErrorVector = FittedCurve - ydata;
        %output of the expfun function [sum of squares of error]
        sse = sum(ErrorVector .^ 2);

     end
 end

我有一组新数据不能使用此代码,并为绘制的数据曲线提供适当的指数拟合。