【数学建模】Lingo


在这里插入图片描述

A 基本界面与解方程

1 基本界面

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

写方程(注意分号)并求解(靶子图标)
在这里插入图片描述

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

2 用Lingo解方程

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

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

在这里插入图片描述

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

3 Lingo变量

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

在这里插入图片描述
注意:x,y默认大于0
在这里插入图片描述

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

线性规划例题
在这里插入图片描述

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

B 集合(矩阵工厂)

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

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;

在这里插入图片描述

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

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

例子:

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

在这里插入图片描述
注意:1.2345678为统一初值。

知识点:
在这里插入图片描述

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

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

注意:
赋值不能是计算式如:1/2;2*2
在这里插入图片描述

3 循环与求和

在这里插入图片描述

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));

在这里插入图片描述题目中第二个约束条件可用sum求和一步到位。

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

在这里插入图片描述

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

使用矩阵工厂创建矩阵后,整个程序要用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

在这里插入图片描述

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 关系运算符

在这里插入图片描述

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

3 逻辑运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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 内置函数

在这里插入图片描述

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/weixin_44378835/article/details/107515586