首页 文章

将数据拟合到已知函数MATLAB(无曲线拟合工具箱)

提问于
浏览
0

我有一个函数有三个参数和一些我想要适合的数据 . 我怎样才能做到最佳?我甚至不确定等式中三个参数的范围 .

该函数具有自由参数 alphabetagamma ,由下式给出

y = (1 - alpha + alpha./sqrt(1 + 2*beta*(gamma*x).^2./alpha)).^(-1) - 1;

我有 xy 数据点(每组大约50个点)的数组,我希望使用任何 alphabetagamma 找到最合适的数据点(定义为最小化最小化方程) .

在线解决方案推荐曲线拟合工具箱,我的机器上没有这个工具箱,无法安装 . 我只有准系统MATLAB 2015b版本 .

1 回答

  • 1

    您需要一个平滑的 R^n -> R 函数的优化算法 . 由于您只能访问准系统Matlab,因此最好从文件交换中获取算法 . 为了说明,我选择LMFnlsq,这应该足够了,因为你有一个小问题,虽然它似乎更一般,这里有点矫枉过正 .

    下载LMFnlsq并添加到您的Matlab路径 .


    Example

    为方便起见,创建一个名为 regr_fun 的函数:

    function y = regr_fun(par, x)
        alpha   = par(1);
        beta    = par(2);
        gamma   = par(3); 
        y = (1 - alpha + alpha./sqrt(1 + 2*beta*(gamma*x).^2./alpha)).^(-1) - 1;
    end
    

    曲线拟合(与 regr_fun 在同一文件夹中):

    %---------------------------------------------------------------------
    % DUMMY DATA
    %---------------------------------------------------------------------
    % Generate data from known model contaminated with random noise
    rng(333) % for reproducibility
    
    alpha   = 2;
    beta    = 0.1;
    gamma   = 0.1;
    par     = [alpha, beta, gamma];
    
    xx      = 1:50;
    y_true  = regr_fun(par, xx);
    yy      = y_true + normrnd(0,1,1,50);
    
    %---------------------------------------------------------------------
    % FIT MODEL
    %---------------------------------------------------------------------
    % intial point of solver
    p0      = [1,1,1];
    
    obj_fun = @(p) sum((regr_fun(p, xx) - yy).^2);
    
    % optimization
    p_fit   = LMFnlsq(obj_fun, p0);
    
    y_fit   = regr_fun(p_fit, xx);
    
    %---------------------------------------------------------------------
    % PLOT
    %---------------------------------------------------------------------
    plot(xx, yy, 'o')
    hold on
    plot(xx, y_true)
    plot(xx, y_fit, '--')
    

    enter image description here


    Note

    虽然 matlab.codetools.requiredFilesAndProducts 也列出了符号工具箱,但是对于这个问题它不需要,并且该函数也应该在没有它的情况下运行 .

相关问题