Matlab笔记之线性规划

 
LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min  xs.t.              A·x b              Aeq·x=beq              vlb x vub其中 ,b,beq均为向量,A,Aeq为矩阵,x为向量变量.矩阵A和向量b是线性不等式约束条件的系数,

Aeq和beq是等式

约束条件

的系数.

在MATLAB中,用于LP的求解函数为linprog.其调用格式为:[x,fval,lambda]=linprog(f,A,b,Aeq,beq,vlb,vub,x0,options)其中f,A,b,是不可缺省的输入变量,x是不可缺省的输出变量,它是问题的解.vlb,vub均是向量,分别表示x的下界和上界,x0为x的起始点,options为optimset函数中定义的参数的值,fval是目标函数在解x处的值,lambda为在解x处的lagrange乘子.lambda.lower对应于vlb,lambda.upper对应于ulb,lambda.ineqlin是对应于线性不等式约束的,lambda.eqlin是对应于线性等式约束的.

例子1

>>% 求解下列线性规划问题
% max z=2x1+3x2-5x3
% s.t. x1+x2+x3=7
%      2x1-5x2+x3>=10
%      x1+3x2+x3<=12
%      x1,x2,x3>=0

f=[2;3;-5];%目标函数列矩阵
A=[-2,5,-1;1,3,1];%不等矩阵
b=[-10;12];
Aeq=[1,1,1];%相等矩阵
beq=7;
x=linprog(-f,A,b,Aeq,beq,zeros(3,1));
%zeros(m,n)产生m×n的double类零矩阵,zeros(n)产生n×n的全0方阵
value=f‘*x%目标值,其值等于[x,y]=linprog(-f,A,b,Aeq,beq,zeros(3,1))的-y
Optimization terminated.

value =

   14.5714

>> x

x =

    6.4286
    0.5714
    0.0000

>>

例子2

>> % 求解下列线性规划问题
% min z=2x1+3x2+x3
% s.t. x1+4x2+2x3>=8
%      3x1+2x2>=6
%      x1,x2,x3>=0
f=[2;3;1];
A=[-1,-4,-2;-3,-2,0];
b=[-8;-6];
x=linprog(f,A,b,[],[],zeros(3,1))%无等式,用[]代替
value=f‘*x %其值等于[x,y]=linprog(f,A,b,[],[],zeros(3,1))的y
Optimization terminated.

x =

    0.8066
    1.7900
    0.0166

value =

    7.0000

>>

例子3

% min  z=|x1|+2|x2|+3|x3|+4|x4|;
% s.t.   x1-x2-x3+x4=0;
%        x1-x2+x3-3*x4=1;
%        x1-x2-2*x3+3*x4=-0.5
%目标函数
objfun[email protected](x)abs(x(1))+2*abs(x(2))+3*abs(x(3))+4*abs(x(4))
%等式约束
Aeq=[1 -1 -1 1
     1 -1 1 –3
     1 -1 -2 3];
beq=[0 1 -0.5]‘;
x0=[0 0 0 0];%给一个初值 很关键 和很重要哦
x=fmincon(objfun,x0,[],[],Aeq,beq)

%下面是根据的需要改进的程序

min z=[1 2 3 4 1 2 3 4]*[u1 u2 u3 u4 v1 v2 v3 v4]‘

s.t.

A=[1 -1 -1 1 1 -1 -1 1
   1 -1 1 -3 1 -1 1 –3
   1 -1 -2 3 1 -1 -2 3]

x=[u1 u2 u3 u4 v1 v2 v3 v4]‘

b=[0 1 -0.5]‘

Ax=b
x>=0

%目标函数
f=[1 2 3 4 1 2 3 4];
%等式约束
Aeq=[1 -1 -1 1 1 -1 -1 1
     1 -1 1 -3 1 -1 1 –3
     1 -1 -2 3 1 -1 -2 3];
beq=[0 1 -0.5]‘;
%边界条件
lb=zeros(8,1);
%调用linprog
x=linprog(f,[],[],Aeq,beq,lb)

Optimization terminated.

x =

    0.2500
    0.0000
    0.2500
    0.0000
    0.2500
    0.0000
    0.2500
    0.0000
时间: 2024-10-11 07:36:19

Matlab笔记之线性规划的相关文章

Matlab随笔之线性规划

原文:Matlab随笔之线性规划   LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min xs.t. A·x b Aeq·x=beq vlb x vub其中 ,b,beq均为向量,A,Aeq为矩阵,x为向量变量.矩阵A和向量b是线性不等式约束条件的系数, Aeq和beq是等式约束条件的系数. 在MATLAB中,用于LP的求解函数为linprog.其调用格式为:[x,fval,lambda]=linp

小美赛之matlab笔记

11月27日-11月30日在搞小美赛,仅以这篇笔记纪念带给我许多情绪也许以后都不会再碰的数学建模... matlab之基本函数 cumsum   累加 cumprod   累积 isnan   是否为NaN matlab之元胞 cell(a,b) matlab之数据类型转换 char() str2num() cell2mat() matlab之并集交集补集

机器学习笔记:线性规划,梯度下降

主要内容来自stanford Andrew Ng视频课程的总结. 讲的非常好,还有相应的习题,课程能够在以下站点搜索到. https://www.coursera.org/ 机器学习的目的是在训练数据的基础上得出一个模型,该模型对于给定的输入x.给出对应的输出y. 用公式表示就是:y = h(x). 注意x表示一维向量,x={x1,x2,x3...}.这里的xi也就是特征(feature),h就是模型. 若输出y是连续值.则是回归预測问题.若y是离散值,则是分类问题.假设给定的训练数据是(输入-

matlab笔记

函数: 在.m文件中编写可保存函数代码 函数声明 function [returnVal] = function(parameter)

matlab绘图--线性规划图解法示意

matlab绘图--线性规划图解法示意 图解法 matlab绘图 区域填充 线性规划问题: matlab绘图 L1=[4,0;4,4]; plot(L1(:,1),L1(:,2));hold on  text(4.1,3.5,'x_1=4','color','b');  L2=[0 3;5 3];  plot(L2(:,1),L2(:,2));hold on  text(0.8,3.1,'x_2=3','color','b');  L3=[0 2.4;5 0.4];  plot(L3(:,1),

matlab学习笔记之求解线性规划问题和二次型问题

一.线性规划问题 已知目标函数和约束条件均为线性函数,求目标函数的最小值(最优值)问题. 1.求解方式:用linprog函数求解 2.linprog函数使用形式: x=linprog(f,A,b)  x=linprog(f,A,b,Aeq,beq)  x=linprog(f,A,b,Aeq,beq,lb,ub)  x=linprog(f,A,b,Aeq,beq,lb,ub,x0)  x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)   [x,fval]=linp

Matlab学习笔记(1)

本文为本人学习Matlab基础知识是做的一些笔记,希望可以对大家有所帮助 (>_<) p.s. 英文来自于Matlab帮助文档 - 表示 指令的续行输入. 矩阵的输入: a)        A = [1, 2, 3; 4, 5, 6; 7, 8, 9] b)        A = [1, 2, 3 4, 5, 6 7, 8, 9] 3. 复数: z = 3 + 4i a)        real()       复数的实部Real part of complex number b)      

matlab学习笔记 bsxfun函数

matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下.   函数bsxfun [功能描述]两个数组间元素逐个计算. [应用场合]当我们想对一个矩阵A的每一列或者每一行与同一个长度相等的向量a进行某些操作(比较大小,乘除等)时,我们只能用循环方法或者利用repmat函数将要操作的向量a复制成和A一样尺寸的矩阵,进而进行操作.从MATLAB R2007a开始

matlab学习笔记(一)单元数组

matlab学习笔记(一)单元数组 1.floor(x) :取最小的整数 floor(3.18)=3,floor(3.98)=3 ceil(x)  :取最大的整数 ceil(3.18)=4,ceil(3.18)=42.单元数组和结构体作用差不多, 相同点:都是存放不同类型的数据,能实现不同类型数据的存储机制. 不同点:结构体数组的 各个元素下有成员,并且每个成员有自己的名字,而单元数组没有成员和成员 名字的感念.3.单元数组,用[]表示元素间隔:用,表示元素之间的间隔:用:表示行间隔. 例如:c