1、首先在电脑中启动matlab,新建一个函数文件,用来写目标函数。
2、在编辑器窗口中写入要求的目标函数,并保存,注意使函数名与文件名相同。
3、然后再新建一个函数文件,用来编写非线性约束条件。步骤及其注意事项同上。额外需要注意的是,需要将两个函数文件放在同一个文件夹中。
4、最后,在命令行窗口处写入fmincon命令。此处需要注意的是,对于没有的线性约束条件的位置药用空矩阵代替,并且初始条件需要满足非线性约束条件。
5、敲下键盘上的enter建,结果得出。可以发现exitflag=1是大于0的,所以结果正确。
function main()
clc; clear all; close all;
options = optimset('Algorithm', 'interior-point', 'Display', 'off');
if exitflag == 1
fprintf('\n利用内copy点法:2113\n')
x(1), x(2), fval);
else
fprintf('\n未找到最优解!1653\n');
endfunction f = net_fun(x)
f = x(1)^2 + x(2)^2;
for k=1:100 %外点法e迭代循环.
x1=a(k);x2=b(k);e=m(k);
for n=1:100 %梯度法求最优值。
f1=subs(fx1); %求解梯度值和海森矩阵
f2=subs(fx2);
f11=subs(fx1x1);
f12=subs(fx1x2);
f21=subs(fx2x1);
f22=subs(fx2x2);
if(double(sqrt(f1^2+f2^2))<=0.001) %最优值收敛条件
a(k+1)=double(x1);b(k+1)=double(x2);f0(k+1)=double(subs(f));
扩展资料:
根据约束的特点,构造某种惩罚函数,然后加到目标函数中去,将约束问题求解转化为一系列的无约束问题。这种“惩罚策略”,对于无约束问题求解过程中的那些企图违反约束条件的目标点给予惩罚。
通过上述方法,可以把有约束的问题化为无约束问题求解。也就是所谓的外罚函数法。
但是外罚函数的原理主要是应用了近似最优并且近似可行的,近似最优可以接受,但是近似可行在实际运用中让人无法接受。这一点可以由内罚函数解决。
参考资料来源:百度百科-罚函数
本回答被网友采纳