matlab 最优化我对matlab不太了解,有一个简单的问题如下:求f=x^3+y^4,在x^2+y^2==1的条件下的最大值.请高手给出程序.另外,orth(A)返回的不是对A做schmidt正交化得到的那组基底吧?

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/27 13:44:37
matlab 最优化我对matlab不太了解,有一个简单的问题如下:求f=x^3+y^4,在x^2+y^2==1的条件下的最大值.请高手给出程序.另外,orth(A)返回的不是对A做schmidt正交化得到的那组基底吧?

matlab 最优化我对matlab不太了解,有一个简单的问题如下:求f=x^3+y^4,在x^2+y^2==1的条件下的最大值.请高手给出程序.另外,orth(A)返回的不是对A做schmidt正交化得到的那组基底吧?
matlab 最优化
我对matlab不太了解,有一个简单的问题如下:求f=x^3+y^4,在x^2+y^2==1的条件下的最大值.请高手给出程序.另外,orth(A)返回的不是对A做schmidt正交化得到的那组基底吧?

matlab 最优化我对matlab不太了解,有一个简单的问题如下:求f=x^3+y^4,在x^2+y^2==1的条件下的最大值.请高手给出程序.另外,orth(A)返回的不是对A做schmidt正交化得到的那组基底吧?

前面那个相同问题的回答是错误的(question/577914643.html),所以请楼主再重新提问.

 

那个回答的问题有两个:

(1)你问的是最大值问题,他的回答却是最小化;

(2)那么,是不是把目标函数改个符号就行了呢?不是,不信的话,你把

fun = @(X)X(1)^3+X(2)^4;

改成

fun = @(X) -(X(1)^3+X(2)^4);

会发现,结果发散了,优化失败.

 

问题出在哪里呢?和初值有关.

 

下面是我的代码:

function zd
x0 = 0.1;
y0 = 0.1;
opt = optimset('Display', 'iter');
% 在图上标出最大值点
figure(1)
clf
hold on
h = ezplot('x^2+y^2-1');
set(h, 'linew', 2)
f = @(x,y) x.^3+y.^4;
x = get(h, 'xData');
y = get(h, 'yData');
z = f(x, y);
set(h, 'zData', z);
h = ezmesh(f, [-1.5 1.5]);
set(h, 'EdgeAlpha', 0.4, 'FaceAlpha', 0.4);
h = plot3(x0, y0, f(x0,y0), 'ro', 'markerfacecolor', 'r');
set(gca,'zlimmode','auto')
view(-45,10)
% 优化
xy = fmincon(@obj,[x0 y0],[],[],[],[],[],[],@nonlcon,opt,h)
function f = obj(x, h)
f = ( x(1)^3+x(2)^4 );
% 更新绘图
set(h, 'x', x(1), 'y', x(2), 'z', f);
title(['f = ' num2str(f)])
drawnow
pause(0.1)
% 由于fmincon用于求最小值,所以需要把目标函数取负号
f = -f;
function [c,ceq] = nonlcon(x, h)
% 目标函数尽管不需要使用附加参数h,但必须能够接受此参数
c = [];
y = x(2);
x = x(1);
ceq = x^2+y^2-1;

我的代码把优化过程动态表现出来,最终结果是否符合要求也一目了然.