MATLAB求解二元(多元)函数极值

matlab求解二元函数极值

依然是机房中的R2010a版本
命令:
1、x=fminsearch(fun,x0)或x=fminunc(fun,x0)求极小值点x,初值选为x0
2、[x,fmin]=fminsearch(fun,x0)或[x,fmin]=fminunc(fun,x0)
3、fminsearch采用单纯形法,fminunc采用牛顿法

除了fminsearch和fminunc这两种命令外,建立函数还可以用不同的方法:

建立函数的方法

以p191task2_2为例子,采用字符串建立函数

% p191task2_2
%求min(f(x))=(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)*exp(x(1))
clc,clear
f='(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)*exp(x(1))';
digits 15
x0=[0,0];
[x,fmin]=fminsearch(f,x0);
vpa(x,15)
vpa(fmin,15)

然而此题的问题在于,无法找到合适的初值,初值每变动一次,fmin也随之变动。
为此,画出函数图像:

[x,y]=meshgrid(-30:0.3:-10,-30:0.3:-10);
f=(4*x.^2+ 2*y.^2+4.*x.*y+2.*y+1).*exp(x);
figure(1)
surf(x,y,f)
figure(2)
contour(x,y,f,100)

结果

补充:contour为画等高线命令
contour(x,y,z,n) n为等高线条数;

由图可以大致得到,函数在所选区域内全部为正,最小值接近0,在另外选择的若干区域中,结果类似,看出最小值大概是0。

以p191task2_3为例子,用.m文件建立函数

先创建.m函数

%p192task2_3 fun
%fun2_3.m
function f=fun2_3(x)
f=4*x(1)^2+5*x(1)*x(2)+2*x(2)^2;

再在同一个目录下写

%p191task2_3.m
clc,clear
[x,y]=meshgrid(-10:0.3:10,-10:0.3:10);
z=4*x.^2+5*x.*y+2*y.^2;
figure(1)
surf(x,y,z)
figure(2)
contour(x,y,z)
x0=[-3,-3];
% [x,fmin]=fminsearch(@fun2_3,x0)
[x,fmin]=fminunc(@fun2_3,x0)

结果:
运行结果

  • 20
    点赞
  • 152
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Matlab中,可以使用fminsearch和fminunc这两种命令来求解二元函数极值。其中,fminsearch是一种用于求解无约束最小化问题的函数,而fminunc是一种用于求解有约束最小化问题的函数。通过提供一个初始点,这两个函数可以找到函数的极小值点。 除了这两种命令,还可以使用字符串建立函数的方法来求解二元函数极值。可以使用jacobian函数求解向量函数f关于自变量x的jacobian矩阵。该矩阵可以提供函数在给定点的梯度信息,从而帮助找到极值点。 以下是一个求解二元函数极值的示例代码: ``` % 建立函数 f = @(x) (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1) * exp(x(1)); % 设置初始点 x0 = [0, 0]; % 使用fminsearch函数求解无约束最小化问题 [x, fmin = fminsearch(f, x0); % 输出结果 x fmin ``` 请注意,上述代码中的函数f是一个匿名函数,通过将函数表达式以字符串的形式传递给fminsearch函数。 希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [实验五用matlab二元函数极值.doc](https://blog.csdn.net/weixin_27573409/article/details/115815815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [MATLAB求解二元(多元)函数极值](https://blog.csdn.net/cantjie/article/details/70476022)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值