Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个未知数的MATLAB nlinfit_Matlab_Curve Fitting - Fatal编程技术网

具有多个未知数的MATLAB nlinfit

具有多个未知数的MATLAB nlinfit,matlab,curve-fitting,Matlab,Curve Fitting,我试图用nlinfit来拟合一条曲线,但是,我有3个未知数 我试图拟合的方程是管中的层流速度分布 u=umax(1-(r/r)^2),其中u是速度,umax是中心线速度,r是到中心线的距离,r是管的半径 问题是umax、r和r都是未知的 从上图中,中心线是轴。我已包含1组数据的代码: 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

我试图用nlinfit来拟合一条曲线,但是,我有3个未知数

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

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

问题是
umax
r
r
都是未知的

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

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 );

我将非常感谢任何帮助,试图拟合这些数据。谢谢您的时间。

为了计算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,拟合函数返回0.16。但是如果情节被旋转了呢?如果输入0.16和参数,拟合函数应返回x轴上的哪个值?它应该返回-4还是+4?