作者个人信息:交通大学致远学院 数学与应用数学专业 19级本科生https://www.lindo.com/www.lindo.com
创作原因:作者本人和两名计算机专业的队友在准备即将到来的两场数学建模竞赛,C++、python、javascript等有助于建模的计算机语言自然就交给两位大神队友去精通,作为数学方向的本科生,matlab自然需要熟练掌握,同时,有一个在线性规划问题方面比matlab更便捷,解决问题更广阔的计算机语言--Lingo,一直不为大家所知晓,这里简单地介绍一下Lingo语言的基本语法,以及通过两个例子来具体介绍一下它的便捷性。欢迎广大数学爱好者和我交流并指出文章中存在的错误,谢谢!
参考书籍:《数学建模算法与应用》(第2版) 司守奎、孙兆亮
Lingo官网:
(如有版权问题请及时与作者联系,谢谢)
1、Lingo函数
1.1 算术运算符
^:乘方
*:乘
/:除
+:加
-:减
1.2 逻辑运算符
Lingo具有9种逻辑运算符:
- #not#:否定该操作数的逻辑值,#not#是一个一元运算符。
- #eq#:若两个运算符相等,则为true,否则为false。
- #ne#:若两个运算符不相等,则为true,否则为false。
- #gt#:若左边的运算符严格大于右边的运算符,则为true,否则为false。
- #ge#:若左边的运算符大于或等于右边的运算符,则为true,否则为false。
- #It#:若左边的运算符严格小于右边的运算符,则为true,否则为false。
- #Ie#:若左边的运算符小于或等于右边的运算符,则为true,否则为false。
- #and#:仅当两个参数都为true时,结果为true,否则为false。
- #or#:仅当两个参数都为false时,结果为false,否则为true。
1.3 关系运算符
在Lingo中,关系运算符是用在模型中指定一个表达式的左边是否等于、小于等于或大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符完全不同,逻辑运算符仅为判断一个关系是否被满足,满足为真,不满足为假。
Lingo有三种关系运算符:"="、"<="、">=",此外还可以用"<"表示小于等于关系,用">"表示大于等于关系。在Lingo中不支持严格的小于或大于,因为线性规划的约束条件都不是严格大于或小于的。
1.4 数学函数
Lingo提供了大量的标准数学函数:
- @abs(x):返回x的绝对值。
- @sin(x):返回x的正弦值,x采用弧度制。
- @cos(x):返回x的余弦值。
- @tan(x):返回x的正切值。
- @exp(x):返回常数e的x次方。
- @log(x):返回x的自然对数。
- @lgm(x):返回x的gamma函数的自然对数。
- @mod(x,y):返回x除以y的余数。
- @sign(x):如果x<0则返回-1;否则,返回1。
- @floor(x):返回x的整数部分。当x>=0时,返回不超过x的最大整数;当x<0时,返回不低于x的最大整数。
- @smax(x1,x2,...,xn):返回x1,x2...xn中的最大值。
- @smin(x1,x2,...,xn):返回x1,x2...xn中的最小值。
1.4.1 补充:gamma函数
对于自变量
,
,则关于
的
函数:
关于
函数有很多有趣的性质,感兴趣的读者可以在文献中阅读。
[1]
[2]
可以看出在Lingo语言中,所有的函数都是以@...的形式出现,而且有些语句和matlab及python的不一样,使用的时候建议仔细查询函数名称。
1.5 变量界定函数
变量界定函数实现对变量取值范围的附加限制,共有4种:
- @bin(x)限制x为0或1.
- @bnd(L,x,U)限制L
xU。
- @free(x)取消对变量x的默认下界为0的限制,即x可以取任意实数。
- @gin(x)限制x为整数。
在默认情况下,Lingo规定变量是非负的,也就是下界为0,上界为