Matlab求未知函数曲线极大值

我有几千组数据,进行matlab滤波后得到了一个光滑的曲线,曲线有极大值极小值,想要获取这些极大值极小值的(x,y)坐标,有没有相应代码实现,谢谢了。函数未知

第1个回答  2012-05-17
假设你几千组数据存储在数组xy,其中第一列是xdata,第二列是ydata。
解决你问题的matlab代码如下:
首先需要将xdata递增排序,并和原来ydata对应;
xdata = xy(:,1);
[xdata ind] = sort(xdata);
ydata = xy(:,2);
ydata = ydata(ind);
ln = length(ind);
polarmax = zeros(ln,2); %存储极大值点的x坐标和y坐标;
polarmin = zeros(ln,2); %存储极小值点的x坐标和y坐标;
m = 0;
n = 0;
for k = 1:ln
if k == 1
if ydata(k) > ydata(k+1)
m = m+1;
polarmax(m,:) = xy(k,:);
elseif ydata(k) < ydata(k+1)
n = n+1;
polarmin(n,:) = xy(k,:);
end
elseif k<ln-1
if ydata(k-1) < ydata(k) && ydata(k) > ydata(k+1)
m = m+1;
polarmax(m,:) = xy(k,:);
elseif ydata(k-1) > ydata(k) && ydata(k) < ydata(k+1)
n = n+1;
polarmin(n,:) = xy(k,:);
end
else
if ydata(k-1) > ydata(k)
m = m+1;
polarmax(m,:) = xy(k,:);
elseif ydata(k-1) < ydata(k)
n = n+1;
polarmin(n,:) = xy(k,:);
end
end
end
第2个回答  2012-05-17
你是离散的数据,使用max和min函数就可以求出来了,如果具有多个极值的话,建议使用diff函数进行求导,然后通过导数等于0找到极值点。

y=sin(0:0.01:20);
find(diff(sign(diff(y)))==-2)+1

这是一种求极值的方法,你看看吧
第3个回答  2012-05-17
clc;

x=linspace(0,6*pi,200);%可换成你的数据
y=sin(x)+randn(1,200)*0.05; %可换成你的数据

n=length(x);

i_min=[];
i_max=[];

x_min=[];
y_min=[];

x_max=[];
y_max=[];

for i=2:n-1,
if y(i)<y(i-1) && y(i)<y(i+1)
i_min(length(i_min)+1)=i;
end
if y(i)>y(i-1) && y(i)>y(i+1)
i_max(length(i_max)+1)=i;
end
end

x_min=x(i_min);
y_min=y(i_min);

x_max=x(i_max);
y_max=y(i_max);

plot(x,y);grid on;axis tight;
hold on;
plot(x_min,y_min,'bo',x_max,y_max,'ro');
第4个回答  2012-06-10
代码发给你邮箱了,请查收本回答被提问者采纳

Matlab求未知函数曲线极大值
首先需要将xdata递增排序,并和原来ydata对应;xdata = xy(:,1);[xdata ind] = sort(xdata);ydata = xy(:,2);ydata = ydata(ind);ln = length(ind);polarmax = zeros(ln,2); %存储极大值点的x坐标和y坐标;polarmin = zeros(ln,2); %存储极小值点的x坐标和y坐标;m = 0;n =...

Matlab求未知曲线的极大值坐标
data是你的数据,find(diff(sign(diff(data)))==-2)+1 找到极大值的位置 find(diff(sign(diff(data)))==2)+1 找到极小值的位置 data(find(diff(sign(diff(data)))==-2)+1)和 data(find(diff(sign(diff(data)))==2)+1)返回的是极大值和极小值 ...

Matlab求未知曲线极大值的代码
fminbnd(f,x1,x2),求函数f在区间[x1,x2]上的极小值。加个负号求极小值后再取相反数即可求得极大值。

怎样用MATLAB求极大值
syms x y=x*sin(x) ;dy=diff(y);% 一阶导数 d2y=diff(dy);%二阶导数 x1=double(solve(dy));% 找出导数为0的点,就是极点 x2=subs(d2y,x1)如果一阶导数为零,二阶导数小于零,则为极大点 参考资料:http:\/\/apps.hi.baidu.com\/share\/detail\/15344626 ...

用matlab求方程的最大值
并求出极值 点,x=±0.5时为极值 >> x=0.5 f=inline('5*x\/(4*x^2+5*x+1)');y=f(x)x = 0.5000 y = 0.5556 >> x=-0.5 f=inline('5*x\/(4*x^2+5*x+1)');y=f(x)x = -0.5000 y = 5 >> 所以,x=-0.5时,y=5 极大值 再给你形像点,上张图 ...

请问用matlab怎样求一个函数的最大值
1.打开matlab软件,清空桌面环境;clear clc 2.定义一个符号变量:syms t 3.定义一个函数:y=t\/(1+t*t);再通过以下函数来查看上面的函数图像;ezplot(y);4.查看该函数的图像可知,函数在0到2之间有一个极值,本例求解该最大值为例;5.输入以下的指令可以求得该函数最大值;max(subs(y,t,...

matlab求极大值极小值(3天之内,急求)
subplot(121);ezplot(y,[-1 1]);%观察极值点 yy=diff(y)subplot(122);ezplot(yy,[-1 1]);%观察极值点 solve(yy)x=[-1:0.0001:1];Y=subs(yy);Y1=subs(y);l=find(Y<0+0.005 & Y>0-0.005);for i=[2 3 6 8][x(l(i)) Y(l(i)) Y1(l(i))]end ans = -0....

如何求matlab图像的极大值
求matlab图像的极大值,可以用fminsearch()极小值函数来求解。用fminsearch()求极大值问题,应将表达式改为反函数形式。例:求f(x)=2xexp(-5x)在原点附近的极大值,并作图标注极大值位置。解:问题等价于-f(x)的极小值 [x1,f1]=fminsearch(@(x)-(2*x.*exp(-5*x)),0)plot(x1,...

matlab怎么求曲线最大值
text(xmax,ymax,'最大值坐标(0.9300 431.5739)')text(xmin,ymin,'最小值坐标(5.3900 -1.7765×10^4)')disp(['最大值坐标(' num2str(xmax) ',' num2str(ymax) ') ' '最小值坐标(' num2str(xmin) ',' num2str(ymin) ')'])结果:最大值坐标(0.93,431.5739) 最小值...

​matlab问题 在[-1,1]区间上绘制出y= -2x^2+4 的曲线,求出最大值...
在[-1,1]区间上绘制出y= -2x^2+4 的曲线,求出最大值点的坐标,并在图中标示出来。如果有另一曲线y= -2x^2+4+sin(2πx),请在同一窗口中绘制出这条曲线,并计算极值,标注出来。matlab作业 求大神给出具体过程和程序 clc clear all;close all;syms x y= -2*x^2+4;ezplot(y,[-...

相似回答
大家正在搜