这里我写了MatLab代码,通过它我可以找到函数p,之后我想找到最小值和最大值点,请告诉我我该怎么做?
path3='D:\SelectedCycle2\001\nm-01\';
list3 = dir(path3);
fName3 = {list3.name};
[~,y3]=size(fName3);
sumvec=double([]);
t=[];
for fff_no=3:y3
image=double(imread(char(strcat(path3,fName3(fff_no)))));
sumvec=[sumvec,sum(image(:))];
t=[t,fff_no-2];
end
y=sumvec;
p = polyfit(t,y,2);
g=diff(p);
请填写此matlab代码。
答案 0 :(得分:2)
我看到你试过diff
,但是这是一个数值微分的函数(即只是得到相邻值之间的差异),而你可能想要多项式的导数。幸运的是,MATLAB非常完整:
pd=polydiff(p);
会给你衍生系数。然后,
max_min=roots(pd);
会给出多项式p
的极值。通过评估相邻位置的多项式,您可以知道它的最大值还是最小值。你可以评估它,对于特定的极值
adjacent(1)=polyval(p,max_min(1)+0.0001);
通过将它与极值中的多项式的值进行比较,您可以知道它的最大值或最小值(检查前后两者的值,以检查它是否为鞍点)。
检查所有这些功能的文档,因为有极其有用的东西(例如polyfit
返回的错误估计值可以在polyval
中使用),但这超出了问题。