资源简介

用matlab实现的牛顿外点罚函数法,求解n个未知变量

资源截图

代码片段和文件信息

%创建人:   常文静
% 功能:    当未知数有n个时,用罚函数法求最优解
%           本程序中的目标函数是f=(x1-0.2)^2+(x2-0.2)^2+...+(xn-0.2)^2约束条件为x1+x2+...
%           +xn=3
% 参数:   
% 返回值:   
% 主要思路: 
% 备注:    
% 调用方法: 
% 日期:     2015/4/23 
%================================================================

%定义要求的未知变量x1x2....xn罚因子M
n=20;
for i=1:n
    syms ([‘x‘num2str(i)]);
end
syms M positive;

x = [];
for i=1:n
    x = [xsym([‘x‘num2str(i)])];    %将未知变量x1x2....xn存到数组x中
end


m(1)=10;                    %c为递增系数。赋初值。
c=8;
d=0;
Q=3;%需要满足的约束条件

for i=1:n
    d=d+(x(i)-0.2).^2;   %目标函数
end
f=d+M*(sum(x)-Q).^2;    %增加罚函数的目标函数

f0(1)=5;   %f0为所求最优解下的f的值。赋初值5。

%求偏导、海森矩阵
for i=1:n
    fx(i)=diff(fx(i));  %f的一阶偏导
end

for i=1:n
    for j=1:n
        fxx(ij)=diff(fx(i)x(j));  %f的二阶

评论

共有 条评论