chapter
LINGO是什么?
是最近很火的用来求解线性、非线性规划的软件,近年来数学建模等竞赛中使用频率很高,掌握没坏处的,尤其是数学专业,起码线代题不用Matlab了~
chapter
说说界面:
①打开后界面会自动弹出名为“Lingo Model – Lingo ”的窗口,用于书写代码
②在空白处写完代码后,点击红色的靶心就可以开始运行程序
③运行正确会弹出一个名为“Solution Report”的界面
④由此可解变量 x 的数值
chapter
用 Lingo 解方程:
① 每个方程必须以分号“;”结束。
② 注意Lingo 的所有符号都是英文格式下的符号
③ Lingo 的加减乘除分别是:+ − ∗ /
【特别注意】
()“ ∗ x”在Lingo中不可以简写为x,乘号不能省略。
()注意除号“/”的形状
【eg】求解方程组
∗x+∗y+=
∗x−∗y+=
【易错点】
① 不写结尾的分号。
② 不写乘号。
chapter
Lingo 的变量:
①Lingo默认所有变量为大于等于的数字,因而非负的条件不必多写。
②万一遇到一个变量可以小于,后面会讲到一个函数叫做@free,来使其定义域为R。
③Lingo不区分大小写,所以mmm、mMm、MMM被视作同一个变量。
④无论是C、Matlab还是Lingo,变量均由字母数字下划线组成,且字母在首位。
【eg】求解方程组:
x²+y²+*x=
*x+y=
x>
y>
线性规划基础:
① 一个线性规划中只含一个目标函数(两个以上是多目标线性规划,Lingo 无法直接解)
② 求目标函数的最大值或最小值分别用 max = …或 min = …来表示
③ 以 !开头,以 ;结束的语句是注释语句
④ 线性规划和非线性规划的本质区别是目标函数是否线性,其余一致,故不需要区分
⑤值得注意的是,非线性规划的求解十分困难,基本得不到全局最优解。
chapter
矩阵工厂:
㈠生产一维矩阵:
先来看看例子,当然不必在意其中的空格(Lingo 不读取空格):
sets:
A /../ : a,b;
B/../ : x,y;
endsets
以上程序对应:
①A和B都是制造矩阵的工厂,但它们是两家不同的工厂
②A工厂后面的 /…/ 说明它专门生产 ∗ 的矩阵。B工厂最后面出现的a和b,都是 ∗ 的矩阵
③A工厂后面的 /…/ 说明它专门生产 ∗ 的矩阵。B工厂最后面出现的x和y,都是 ∗ 的矩阵
④ 矩阵工厂的名字A是随便起的,工厂所生产行矩阵的名字a和b也是随便起的
⑤ 以上这四句话,本质是定义了四个行矩阵的大小,矩阵工厂只是中介
⑥ 生产完矩阵后,工厂和矩阵之间将脱开联系
⑦ Lingo 不是一行一行读代码的,所以用sets:和endsets表示矩阵工厂生产流程的起止
【eg】阅读以下Lingo代码,请问a和b两个矩阵有联系吗?
sets:
nanfu /../ : a,b;
endsets
答:没有特殊联系,只是 a 和 b 都是一行六列的矩阵
【eg】阅读以下Lingo代码,请问代码可否简洁一点?
sets:
ctgu /../ : a;
mcm /../ : b;
endsets
答:a,b可以合并,如下:
sets:
easy /../ : a, b;
endsets
【eg】阅读以下Lingo代码,请问有何问题?
sets:
ceshi /../ : apple, Apple;
endsets
答:Lingo 不区分大小写,所以 apple 和 Apple 是同一个矩阵,应该换个名字
㈡矩阵的赋值
矩阵工厂不能只生产矩阵,还要给矩阵赋初值才行,例子如下:
sets:
factory /../ : a,b;
plant /../ : c,x;
endsets
data:
a = , , , , , ;
b = ., ., ., ., ., .;
c = , , ;
enddata
以上程序对应以下知识点:
①不是每个矩阵都要赋值,有些矩阵正是我们要求解的变量
②需要赋值的矩阵必须赋满,不能给个元素的矩阵只赋个数值
③Lingo中可以给矩阵赋整数,也可以赋小数
④Lingo不是一行一行读代码的,所以用data:和enddata表示矩阵赋值的起止