matlab 求某函数峰值
matlab 求某函数峰值
x = 0:0.1:100; y = x.*sin(x); plot(x,y); z=diff(y); c=find(z==0) x(c)
问答/197℃/2024-10-25 01:53:18
优质解答:
首先,diff(y)算出来的z并不是严格意义上的y的微分,而是有一定误差的,所以要它严格等于0除非是巧合才能碰到.但是即使找绝对值z小于error (error是一个自己设定的比较小的数,作为误差)的话也会有问题,主要是error的值不好确定,和x的取值有关,而且会出现如图1所示的问题,有些点能探测到,有些又探测过多.clear all;close all;clc;x = 0:0.01:100;y = x.*sin(x);error=1e-2z=diff(y);length(z)plot(x,y);hold on;c=find(z<=error);c=find(z(c)>=-error);plot(x(c),y(c),'r*')
图1
因此不建议用find函数,另一种方法是探测z的绝对值最小的点作为近似的峰值点,代码如下clear all;close all;clc;x = 0:0.01:100;y = x.*sin(x);z=diff(y);z=abs(z);j=1;for i=2:length(z)-1 if z(i)<z(i+1) && z(i)<z(i-1) % 如果微分的绝对值最小则记录下来 c(j)=i;j=j+1; endendfigure(1);hold on;plot(x,y);plot(x(c),y(c),'r*')效果很好,见图2.但不排除有更简洁的算法.
图2
我来回答
猜你喜欢
- 有一种虫子,晚上飞进屋子,飞行声音很大,黑色的,很难拍掉,是什么阿?
- 一个圆形餐桌面的直径是二米,它的面积是多少平方米,如果一个人需要0.5米宽的位置就餐,这张餐桌大约能坐多少人,如果在这张
- 求大神给分析一下这几个句子的语法
- 阅读的郭沫若《静夜》 阅读的郭沫若《静夜》,完成后面的题目. 月光淡淡,笼罩着村外的松林.白云团团,漏出了几点疏星.天河
- 小学六年级下册期末考数学思考题是什么!(给埋答案)
- 把一张长10厘米,宽6厘米的长方形纸板沿对角线分成两个相等的直角三角形.然后以其中一个直角三角形较长的直角边所在的直线为
- 我属龙,用英文如何表达?
- 化简:2根号4a³b²c(a>0,b>0)=
- 什么是两级刚度弹簧
- 氮气和氧气在多少温度下,可以生成氮氧化物