识别多项式曲线最大峰值(坐标)的Matlab代码

识别多项式曲线最大峰值(坐标)的Matlab代码,matlab,max,coordinates,polynomials,Matlab,Max,Coordinates,Polynomials,我有这组x和y数据,可以拟合成多项式曲线。是否有任何方法可以使用Matlab(或Excel)来绘制该数据,跟踪拟合的多项式,并确定曲线最大峰值的(x,y)坐标;不是我插入的最大点,而是曲线本身的最高点 我发现这段代码绘制了数据并标记了最大点和最小点,但它绘制了我插入的最大点和最小点,而不是曲线本身的峰值。而且,它不跟踪多项式拟合 x = [53, 62, 69, 71, 78, 89, 99, 106, 118, 133, 140, 151, 157, 164]; y = [211, 227,

我有这组
x
y
数据,可以拟合成多项式曲线。是否有任何方法可以使用Matlab(或Excel)来绘制该数据,跟踪拟合的多项式,并确定曲线最大峰值的(x,y)坐标;不是我插入的最大点,而是曲线本身的最高点

我发现这段代码绘制了数据并标记了最大点和最小点,但它绘制了我插入的最大点和最小点,而不是曲线本身的峰值。而且,它不跟踪多项式拟合

x = [53, 62, 69, 71, 78, 89, 99, 106, 118, 133, 140, 151, 157, 164];
y = [211, 227, 233, 245, 262, 278, 283, 289, 282, 276, 268, 259, 252, 246];

idxmin = find(y == max(y));
idxmax = find(y == min(y));
plot(x,y,'-p','MarkerIndices',[idxmin idxmax],...
    'MarkerFaceColor','red',...
    'MarkerSize',15)
这是我得到的情节:


我想知道的是多项式拟合的最高点的精确坐标。

此解决方案假设二次拟合(尽管这可能会改变),并避免使用
polyfit
仅显示替代方法。不声称这比其他方法好

x = [53, 62, 69, 71, 78, 89, 99, 106, 118, 133, 140, 151, 157, 164];
y = [211, 227, 233, 245, 262, 278, 283, 289, 282, 276, 268, 259, 252, 246];

idxmin = find(y == max(y));
idxmax = find(y == min(y));
plot(x,y,'-p','MarkerIndices',[idxmin idxmax],...
    'MarkerFaceColor','red',...
    'MarkerSize',15)
1。拟合多项式
(a) 这种方法使用
fminsearch
快速获得数值拟合。注意,这需要为多项式系数找到一个合理的起点,
c0

% MATLAB R2017a
x = [53, 62, 69, 71, 78, 89, 99, 106, 118, 133, 140, 151, 157, 164];
y = [211, 227, 233, 245, 262, 278, 283, 289, 282, 276, 268, 259, 252, 246];


fh=@(c) c(1) + c(2)*((x-c(3)).^2);      % to pass to fminsearch
errh=@(c) sum((fh(c)-y).^2);            % uses Least Sum of Squared Error
% err2h=@(c) sum(abs(fh(c)-y));         % sum of absolute error

qh=@(X,c) c(1) + c(2)*((X-c(3)).^2);    % for plotting 


c0 = [300 -0.07 100];                   % initial guess at coefficients
[c, SSE] = fminsearch(errh,[300 -0.1 100])    
(b) 此步骤可用的其他方法包括使用
polyfit
()。还有其他选择

2。查找最大纵坐标
(a) 使用基本微积分寻找最大值。如果知道多项式的形式,则取一阶导数(dy/dx)&集等于零。解x。如果是二阶导数,如果是负数,则有局部极大值。这可以通过分析实现

(b) 通过数值计算,找出该坐标的公差

xstep = 0.01;
Xrng = min(x)-10:.01:max(x)+10;

figure, hold on
plot(x,y,'ko')
xlim([0 180])
ylim([0 300])
plot(Xrng,ones(size(Xrng))*c(1),'r-')
plot(Xrng,qh(Xrng,c),'b--')

[y_max,ind] = max(qh(Xrng,c));
x_max = Xrng(ind);
disp(['Maximum occurs at (' num2str(x_max) ', ' num2str(y_max) ')'])
最大值出现在(115.75285.4542)

(c) 您还可以使用信号处理工具箱中的
findpeaks

[y_max,locs] = findpeaks(qh(Xrng,c))
x_max = Xrng(locs)
扩展名:
尽管未显示,但可以(1)强制拟合多项式的最大值与数据中的最大值相同(作为y值或(x,y)坐标),或(2)加权数据中需要更紧密拟合的部分。

是否查看了数据中的
polyfit
?一旦得到多项式近似值,就有多种方法可以得到峰值。看见“我也可能感兴趣。”秘书长,非常感谢你。我能够追踪多项式趋势线,但我仍然不知道如何确定多边形拟合曲线的最大值。你能用更新的代码回答你的问题吗?这将使我们更容易看到最好的前进方式。