matlab 图像求极值点请教

matlab 图像求极值点请教,第1张

极值点可以用imregionalmax和imregionalmin,零点可以用find,这里如果用find(x==max(x))这条命令只能找到一个值

举个例子

Y=[10 0 10 20 30 20 10 0 30 50 70 50 30 0 50 0];

X=1:size(Y,2);

max=imregionalmax(Y)

max =

1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0

X(max)

ans =

1 5 11 15

花了两天时间,终于研究明白了!

function hh

global dy1 dy2

y='x^2sin(x^2-x-2)'

dy1=diff(y)

dy2=diff(y,2)

subplot(3,1,1)

ezplot(y,[-2 2])

subplot(3,1,2)

ezplot(dy1,[-2 2]),hold on,plot(-2:2,zeros(length(-2:2)))

subplot(3,1,3)

ezplot(dy2,[-2 2]),hold on,plot(-2:2,zeros(length(-2:2)))

x01=fsolve(@myfun1,[-15 -07 0 16])

x02=fsolve(@myfun2,[-19 -13 -05 13])

function f1=myfun1(x)

global dy1

f1=subs(dy1);%very inportamt!!!!!;

function f2=myfun2(x)

global dy2

f2=subs(dy2);%very inportamt!!!!!;

结果:

y =

x^2sin(x^2-x-2)

dy1 =

2xsin(x^2-x-2)+x^2cos(x^2-x-2)(2x-1)

dy2 =

2sin(x^2-x-2)+4xcos(x^2-x-2)(2x-1)-x^2sin(x^2-x-2)(2x-1)^2+2x^2cos(x^2-x-2)

Optimization terminated: first-order optimality is less than optionsTolFun

x01 =

-15326 -07315 0 15951

Optimization terminated: first-order optimality is less than optionsTolFun

x02 =

-19240 -12650 -04742 12404

可以考虑用 fmincon(),具体用法见 doc fmincon,记 a = x(1), b = x(2), c = x(3):

fun = @(x)(275257cos(x(2) -pi/2))/8000 

    - 1993803cos(x(3))/50000 

    - 585179cos(x(1) - pi/2 + x(2))/25000;

 

lb = [0, 0, pi/4];

ub = [pi, 5pi/36, pi/2];

 

x0 = [0, 0, pi/4];

x = fmincon(fun,x0,[],[],[],[],lb,ub)

结果:

x =

       15708   58188e-08       07854

其实你也可以先分析一下,比如你这里 c 和 a, b 是独立的那么可以分解成两个极值问题。画个图就很容易看出来了,在 c 和 b 的方向上都是单调的(所以肯定 b 取 0, c 取 pi/4 = 07854),最后就是一个关于 a 的一元极值问题(从图中也大概可以估出极小值点大约是 15 左右)。

syms x y

z=x^2-(y-1)^2;

diff(z,x)

diff(z,y)有上述命令计算得到:z对x的偏导数为ans =2x,对y的偏导数为ans =2 - 2y;因此当两个偏导数为零时有极值点,这是x=0,y=1,此时求得z(0,1)=0,也是极小值点;由方程也可以看出该式在负无穷到正无穷没有极大值点!

function m=fenduanhanshu(t)

m=t(t>=0 & t<1)+(-t+2)(t>1 & t<=2)+01(t<0 | t>2)

解释

在Matlab中,上述函数中的表达式m=t(t>=0 & t<1)+(-t+2)(t>1 & t<=2)+01(t<0 | t>2)的运算规则是当布尔表达式为true时,布尔表达式的值取1,参与运算,否则取0,参与运算。

例如,当表达式中的(t>=0 & t<1)成立时,t(t>=0 & t<1)=t1;此时表达式中的布尔表达式(t>1 & t<=2)和(t<0 | t>2)都不成立,取0参与运算,故此时m=t1+(-t+2)0+010=t。

Matlab中的这种设计极大地方便了用户进行科学计算,减少了用户书写的代码量,开发效率大大提高,个人非常喜欢,所以也极力推荐各位使用。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12182925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存