matlab中fminsearch能不能求一元函数极小值

matlab中fminsearch能不能求一元函数极小值,第1张

fminsearch当然可以求一元函数极小值。

fminsearch('sin',9)会得到109956,因为那个点是最靠近初值9的极小值点(当然,所谓靠近只是一种形象化的说法,实际的优化算法并不一定找到最靠近的极值点)。用下面的代码画出图来可能更清楚一些:

1234ezplot('sin',[0 12])x=fminsearch('sin',9);hold onplot(x,sin(x),'ro')

解题方法:

clc

clear

A=[4 8 3 9 7 1 6 5 2]

min=min(A)

max=max(A)

%m为所在行 n为所在列

[m1,n1]=find(A==min)

[m2,n2]=find(A==max)

代码% By lyqmath。

clc; clear all; close all。

% f(x,y)=100(y-x^2)^2+(1-x)^2。

title('By lyqmath', 'FontWeight', 'Bold', 'Color', 'r')结果。

f(x, y) = 100(y-x^2)^2+(1-x)^2 = 0。

因为平方是非负数,所以得出:

y-x^2 = 0。

1-x = 0。

即:x = 1,y = 1。

所以 ezplot('100(y-x^2)^2+(1-x)^2') 实际上只画出了一个点。

必须注意

所谓二重极限存在,是指P(x,y)以任何方式趋于P0(x0,y0)时,f(x,y)都无限接近于A,因此,如果P(x,y)以某一特殊方式。

例如沿着一条定直线或定曲线趋于P0(x0,y0)时,即使f(x,y)无限接近于某一确定值,还不能由此断定函数的极限存在但是反过来,如果当P(x,y)以不同方式趋于P0(x0,y0)时,f(x,y)趋于不同的值,那么就可以断定这函数的极限不存在。

将这20个数用数组A表示,则最大值为max(A),最小值为min(A)具体在matlab命令行中输入doc max和doc min会有更详细的使用说明

另外用for求max(A),记为maxA:

maxA=A(1)

for i=1:length(A)

if(A(i)>maxA)

maxA=A(i)

end

end

需求:现实数据都是离散的,有时需要离散数据图像的 极大值点集 极小值点集 ,并用它们绘制原函数的上、下 包络线 。基于此需求,本文给出matlab的简单实现。

极大值 的寻找方式:

函数:findpeaks

使用1:findpeaks(x)

使用2:[top, location1] = findpeaks(x);

效果:找到原始数据x的 极大"值"们(top) 以及对应的 索引(location1)

极小值 的寻找方式:

说明:matlab里没有自带直接的找极小值的函数,可用下面这个小技巧

函数:findpeaks

技巧:findpeaks(-x);

使用:[low, location2] = findpeaks(-x);

效果:把原始数据相当于翻转或乘-1,这样原来的极小值就是极大值!翻转不会改变极小值的索引!

真实数据的实例:

效果:

其实包络线可以用 三次样条插值 绘制的更平滑一些!

三次样条插值的 *** 作参考 这篇文章 。

计算偏导,然后取零值,可以通过二阶导来判断极值性质。% 比如y=ax1^2+bx2^2 谢谢 % By lyqmath

clc; clear all; close all;

syms a b x1 x2

y = ax1^2 + bx2^2;

dy1 = diff(y, x1);

dy2 = diff(y, x2);

xt1 = solve(dy1, x1)

xt2 = solve(dy1, x2)

求函数极值,可以用fminsearch()极小值函数来解决。求函数极大值就求函数极小值的反函数。

1、函数极小值的求法

>> func=@(x)(sin(x)/x^2+xcos(x));

>> [x,f]=fminsearch(func,4)

x =

    34427  %极小值点

f =

   -33128  %极小值

2、函数极大值的求法

>> func=@(x)-(sin(x)/x^2+xcos(x));

>> [x,f,h]=fminsearch(func,4)

x =

    64407  %极大值点

f =

   -63647  %极大值

计算偏导,然后取零值,可以通过二阶导来判断极值性质。

%

matlab里面怎样求二元符号函数的极小值?

%

比如y=ax1^2+bx2^2

谢谢

%

By

lyqmath

clc;

clear

all;

close

all;

syms

a

b

x1

x2

y

=

ax1^2

+

bx2^2;

dy1

=

diff(y,

x1);

dy2

=

diff(y,

x2);

xt1

=

solve(dy1,

x1)

xt2

=

solve(dy1,

x2)

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

原文地址:https://54852.com/langs/12461524.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存