求多元函数f(x,y)=x3-y3+3x2+3y2-9x的极值
%%
clear
f=@(x)x(1)^3-x(2)^3+3*x(1)^2+3*x(2)^2-9*x(1);
g=@(x)-f(x);
[xmin,ymin]=fminunc(f,rand(2,1)) %求极小值点
[xmax,ymax]=fminsearch(g,rand(2,1)) %求极大值点
>>>>>>>>>>>>结果>>>>>>>>>>>
xmin =
1.0000
-0.0000
ymin =
-5.0000
xmax =
-3.0000
2.0000
ymax =
-31.0000 %这是-f(x)的最小值,即f(x)的最大值为31
下面给出验证f(x)的极小值的过程
%%
x=[-2:0.01:2;-2:0.01:2];
[x,y]=meshgrid(x(1,:),x(2,:));
%在三维空间坐标系中先构建xy平面,
... x刻画的是x轴的范围-2~2,y刻画的是y轴范围-2~2,形成很多网格坐标
f=x.^3-y.^3+3*(x.^2)+3*(y.^2)-9*x; %这里注意是 .^
mesh(x,y,f)
>>>>>>>>>>>>>下面我们来找f的最小值>>>>>>>>>>>>
>> min(min(f))
ans =
-5 %f的最小值是-5
>> [row,column]=find(f==-5)
row =
201
%最小值在f矩阵的(201,301)位置
column =
301
>> xpois=x(201,301)
%x行数是可以任意的,因为其值由列的位置决定
xpois =
1
>> ypois=y(201,301)
%y列数是可以任意的,因为其值由行的位置决定
ypois =
0
函数 f 的图像
%%
x=[-2:0.1:2;-2:0.1:2];
[x,y]=meshgrid(x(1,:),x(2,:));
%在三维空间坐标系中先构建xy平面,
... x刻画的是x轴的范围-2~2,y刻画的是y轴范围-2~2,形成很多网格坐标
f=x.^3-y.^3+3*(x.^2)+3*(y.^2)-9*x; %这里注意是 .^
minval=min(min(f))
[row,column]=find(f==-5)
mesh(x,y,f)
text(x(row,column),y(row,column),minval,'最小值','Fontsize',20,'color','r');
L = length(X)
返回 X 中最大数组维度的长度,返回的是一个数。对于向量,长度仅仅是元素数量。
对于具有更多维度的数据,长度为 max(size(X))。空数组的长度为零。
X = rand 返回一个在区间 (0,1) 内均匀分布的随机数.
X = rand(n) 返回一个 n×n 的随机数矩阵。
整数:
X = randi(imax) 返回一个介于 1 和 imax 之间的伪随机整数
X =randi(imax,n) 返回 n×n 矩阵,其中包含从区间 [1,imax] 的均匀离散分布中得到的伪随机整数。
r = randi([-5,5],10,1) 生成一个由样本区间 [-5,5] 中均匀分布的随机整数组成的 10×1 列向量
size(x)
返回一个行向量,其元素是 A 的相应维度的长度。例如,
如果 A 是一个 3×4 矩阵,则 size(A) 返回行向量
[3 4]
如果 A 是一个 1x4 矩阵,则 size(A) 返回行向量
[1 4]