关于MATlab的问题,回答正确后再加100分~!急!!!

2024-12-03 17:20:33
推荐回答(3个)
回答1:

%by dynamic
%see also http://www.matlabsky.com
%contact me matlabsky@gmail.com
%2009.2.
%
matlab优化工具箱提供了fmin**系列函数可以进行目标函数最小值的求解

对于你的问题常用其中的两个fminunc和fminsearch ,从结果可以看出fminunc效果好些

clc
clear
%初建目标函数
fun=@(x)3*x(1).^2+2*x(1).*x(2)+x(2).^2;
%初值
x0=[0.1 0.1];
%优化选项
options=optimset('largescale','off','display','none','tolfun',1e-20,'tolx',1e-10);
%调用优化函数fminunc
[x,fval]=fminunc(fun,x0,options);
display(['使用fminunc函数,计算得:在x1=' num2str(x(1)) ',x2=' num2str(x(2)) ',取得目标函数最小值' num2str(fval)])
%调用fminsearch
[x,fval]=fminsearch(fun,x0,options);
disp(char(13))
display(['使用fminsearch函数,计算得:在x1=' num2str(x(1)) ',x2=' num2str(x(2)) ',取得目标函数最小值' num2str(fval)])

运行结果为(根据不同的初值,可能得到不同的结果)

使用fminunc函数,计算得:在x1=1.0087e-011,x2=-2.6502e-011,取得目标函数最小值4.7296e-022

使用fminsearch函数,计算得:在x1=-4.0519e-011,x2=1.308e-011,取得目标函数最小值4.0364e-021

可以看出很接近实际的x=[0 0]时的的0了

回答2:

[x,val]=fminsearch(@(x)3*x(1)^2+2*x(1)*x(2)+x(2)^2,[0,0]);
disp(['当x1=' num2str(x(1)) ',x2=' num2str(x(2)) '时,f有最小值' num2str(val)])

回答3:

(0,0)时有最小值0 。