【问题标题】:MATLAB nlinfit with multiple unknowns具有多个未知数的 MATLAB nlinfit
【发布时间】:2014-12-26 23:52:36
【问题描述】:

我正在尝试使用 nlinfit 拟合曲线,但是,我有 3 个未知数。

我试图拟合的方程是管中的层流速度分布。

u = umax( 1 - ( r / R ) ^ 2 ),其中u 是速度,umax 是中心线速度,r 是到中心线的距离,R 是管的半径。

问题在于umaxrR 是未知数。

http://www.mne.psu.edu/cimbala/learning/fluid/CV_Momentum/pipe_eg.gif

从上图中,中心线是轴。我已经包含了一组数据的代码:

clc
clear all

XMean = [0.13518 
0.1599
0.17035
0.18053
0.18849
0.19577
0.19373
0.18781
0.17245
0.15728
0.13404
0.10981];

r = [-5.5000
   -4.5000
   -3.5000
   -2.5000
   -1.5000
   -0.5000
    0.5000
    1.5000
    2.5000
    3.5000
    4.5000
    5.5000];

plot( XMean, r )

我不确定如何格式化方程句柄:

Eqn = @(u,y) u(1).*( 1 - ( ( u(2) - y ) / u(3) ).^2 );

[ beta, R, J, CovB, MSE ] = nlinfit( YMean, r, Eqn, Alpha );

我将不胜感激尝试拟合此数据的任何帮助。感谢您的宝贵时间。

【问题讨论】:

    标签: matlab curve-fitting


    【解决方案1】:

    为了计算 rmse,每个 x 值最多有 1 个 y 值,从数学上讲是一个“函数”。您可以稍后按照草图显示的方式再次绘制。但是对于计算:旋转 90 度。

    为了优化,你需要一个初始猜测(你的Alpha),它没有定义。但是,通过对下面的代码进行一些细微的更改,可以获得最佳参数。它也可能更好地阅读。该图如下所示。

    plot(r, XMean ,'ko', 'markerfacecolor', 'black') % // need a "function" (max 1y value for 1x-value)
    Eqn = @(par, x) par(1).*( 1 - ( (par(2) - x) / par(3) ).^2 );
    par0 = [1, 1, 1]; % // an initial guess as start for optimization
    par_fit = nlinfit(r, XMean, Eqn, par0 ); % // optimize
    hold on
    r_fit = linspace(min(r), max(r)); % // more points for smoother curve
    plot(r_fit, Eqn(par_fit, r_fit), 'r')
    

    我得到的最优参数是

    par_fit =
    
        0.1940   -0.4826    9.0916
    

    您可能需要再次旋转绘图以使其进入正确的方向,就像在您的草图中一样。

    附加信息:polyfit() 而不是 nlinfit

    由于可以分析计算此流动剖面,因此可以提前知道这是一条抛物线。您也可以使用polyfit 来拟合抛物线。

    par_poly_fit = polyfit(r, XMean, 2)
    
    % // it yields the values:
    par_poly_fit =
    
    -0.0023   -0.0023    0.1934
    

    绘制 paraobla 得到的线与我们使用优化器得到的线几乎相同,但它更稳定,因为它不依赖于初始值。

     plot(r_fit, polyval(par_poly_fit, r_fit),'g--'  
    

    【讨论】:

    • 出于好奇,为什么我需要旋转图形以适应曲线?
    • 因为你定义了一个拟合函数Eqn。该拟合函数将为 1 个输入值 + 参数返回 1 个值。考虑我的情节,例如对于值 -4,fit 函数返回类似于 0.16 的值。但是如果情节被旋转了呢?如果我要输入 0.16 和参数,fit 函数应该返回 x 轴上的哪个值?它应该返回 -4 还是 + 4?
    猜你喜欢
    • 2018-12-27
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多