【数学建模】Lingo

文章目录

  • A 基本界面与解方程
    • 1 基本界面
    • 2 用Lingo解方程
    • 3 Lingo变量
  • B 集合(矩阵工厂)
    • 1矩阵工厂:生产一维矩阵
    • 2 矩阵的赋值
    • 3 循环与求和
    • 4 工厂合并
  • C运算符
    • 1 算数运算符
    • 2 关系运算符
    • 3 逻辑运算符
  • D 内置函数

在这里插入图片描述

A 基本界面与解方程

1 基本界面

Ctrl+鼠标滚轮可以放大代码

写方程(注意分号)并求解(靶子图标)
【数学建模】Lingo_第1张图片

运行结果:
【数学建模】Lingo_第2张图片

2 用Lingo解方程

  • 每个方程必须以分号;结束
  • Lingo的所有符号都是英文格式下的符号
  • Lingo的加减乘除分别是:+、-、*、/

例题:
在这里插入图片描述

【数学建模】Lingo_第3张图片

结果:
【数学建模】Lingo_第4张图片

3 Lingo变量

  • Lingo默认所有变量为大于等于0的数字,因此非负的条件不必多写。
  • 可以使用@free函数,将变量定义域变为R
  • Lingo变量不区分大小写。
  • 变量均有字母数字下划线组成,且字母在首位

【数学建模】Lingo_第5张图片
注意:x,y默认大于0
【数学建模】Lingo_第6张图片

结果:
在这里插入图片描述

线性规划例题
【数学建模】Lingo_第7张图片

max=200*x1+300*x2;
x1<100;
x2<=120;
x1+2*x2<=160;

B 集合(矩阵工厂)

例题引入:
【数学建模】Lingo_第8张图片
【数学建模】Lingo_第9张图片

a1=1;
a2=2;
a3=3;
a4=4;
a5=5;
max=s;
s=a1*x1;
s=a2*x2;
s=a3*x3;
s=a4*x4;
s=a5*x5;
x1+x2+x3+x4+x5=5000;

【数学建模】Lingo_第10张图片

用暴力枚举法比较笨拙,所以要使用结合(矩阵工厂)

1矩阵工厂:生产一维矩阵

例子:

sets:
factory /1..6/:a,b;
plant /1..3/:x,y;
endsets
!A、B矩阵有6个元素,X,Y有3个元素。

【数学建模】Lingo_第11张图片
注意:1.2345678为统一初值。

知识点:
【数学建模】Lingo_第12张图片

2 矩阵的赋值

矩阵工厂不能只生产矩阵,还要给矩阵赋初值才行,例子如下:

sets:
factory /1..6/:a,b;
plant /1..3/:c,x;
endsets
data:
a=1,2,3,4,5,6;
b=6.0,5.0,4.0,3.0,2.0,1.0;
c=10,20,30;
enddata

结果:
【数学建模】Lingo_第13张图片

注意:
赋值不能是计算式如:1/2;2*2
【数学建模】Lingo_第14张图片

3 循环与求和

【数学建模】Lingo_第15张图片

sets:
gc /1..5/:a,x;
endsets
data:
a=1,2,3,4,5;
enddata
max=s;

题目中第一个约束条件可以用for循环一步到位。

@for(gc(i):s=a(i)*x(i));

【数学建模】Lingo_第16张图片题目中第二个约束条件可用sum求和一步到位。

@sum(gc(i):x(i))=5000;

【数学建模】Lingo_第17张图片

注意:
在这里插入图片描述

使用矩阵工厂创建矩阵后,整个程序要用model和end包起来:

model:
sets:
gc /1..5/:a,x;
endsets
data:
a=1,2,3,4,5;
enddata
max=s;
@for(gc(i):s=a(i)*x(i));
@sum(gc(i):x(i))=5000;
end

4 工厂合并

生成6行8列矩阵c,x:

sets:
factory /1..6/:a;
plant /1..8/:d;
Cooperation(factory,plant):c,x;
endsets

【数学建模】Lingo_第18张图片

model:
sets:
factory /1..6/:a;
plant /1..8/:d;
Coo(factory,plant):c,x;
endsets
data:
a=60,55,51,43,41,52;
d=35,37,22,32,41,32,43,38;
c=6,2,6,7,4,2,5,8
  4,9,5,3,8,5,8,2
  5,2,1,9,7,4,3,3
  7,6,7,3,9,2,7,1
  2,3,9,5,7,2,6,5
  5,5,2,2,8,1,4,3;
enddata
min=@sum(coo(i,j):c(i,j)*x(i,j));
!或:min=@sum(factory(i):@sum(plant(j):c(i,j)*x(i,j)));
@for(factory(i):@sum(plant(j):x(i,j))<=a(i));
@for(plant(j):@sum(factory(i):x(i,j))=d(j));
end

C运算符

1 算数运算符

在这里插入图片描述

x=2;
y=3*x^10+6/(15-x^(1/2));

2 关系运算符

【数学建模】Lingo_第19张图片

B=10;
e=0.0001;
A-e>B;

3 逻辑运算符

【数学建模】Lingo_第20张图片
在这里插入图片描述
在这里插入图片描述

model:
sets:
fac /1..6/:a;
endsets
data:
a=6,5,4,3,2,1;
enddata
y=@sum(fac(i)|i#ge#5:a(i));  ! i>=5;
end

i#ge#5是对sum求和进行了限制,当然也可以写成#gt4#

b站:https://space.bilibili.com/358229576

在这里插入图片描述

model:
sets:
fac /1..6/:a;
endsets
min=@sum(fac(i):a(i));
@for(fac(i)| i#le#2 #or# i#ge#5 :a(i)>5);
end

在这里插入图片描述

model:
sets:
fac /1..3/:;
coo(fac,fac):a;
endsets
data:
a=1,2,3
  4,5,6
  7,8,9;
enddata
y=@sum(coo(i,j)|i#le#j :a(i,j));
end

D 内置函数

【数学建模】Lingo_第21张图片

【数学建模】Lingo_第22张图片


你可能感兴趣的:(#,数学建模)