#r#仅当两个参数都为 false时,结果为 false;否则为true 这些运算符的优先级由高到低为: 高#not# #eq##ne##gt##ge##lt##le# 低#and##or# 例5.2逻辑运算符示例 2#gt#3#and#4#gt#2,其结果为假(0)。 51.3关系运算符 在 LINGO中,关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于 小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符 #eq#、#le#、#ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后 者仅仅判断一个该关系是否被满足:满足为真,不满足为假。 LINGO有三种关系运算符:“=”、“<=”和“≥=”。LING0中还能用“<”表示小 于等于关系,“〉”表示大于等于关系。LING0并不支持严格小于和严格大于关系运算符 然而,如果需要严格小于和严格大于关系,比如让A严格小于B: A<B 那么可以把它变成如下的小于等于表达式: A+E<=B 这里ε是一个小的正数,它的值依赖于模型中A小于B多少才算不等。 下面给出以上三类操作符的优先级 高#not# (取反) #eg##ne##gt##ge##lt##le# 低 52数学函数 LINGO提供了大量的标准数学函数 龟abs(x):返回x的绝对值。 esin(x):返回x的正弦值,x采用弧度制。 cos(x):返回x的余弦值。 @tan(x) 返回x的正切值 Cexp(x) 返回常数e的x次方 @log(x) 返回x的自然对数 @lgm(x) 返回x的 gama函数的自然对数 emod (x) @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中的最小值 例5.3给定一个直角三角形,求包含该三角形的最小正方形 解:如图所示。 -324
-324- #or# 仅当两个参数都为 false 时,结果为 false;否则为 true 这些运算符的优先级由高到低为: 高 #not# #eq# #ne# #gt# #ge# #lt# #le# 低 #and# #or# 例 5.2 逻辑运算符示例 2 #gt# 3 #and# 4 #gt# 2,其结果为假(0)。 5.1.3 关系运算符 在 LINGO 中,关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于、 小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符 #eq#、#le#、#ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后 者仅仅判断一个该关系是否被满足:满足为真,不满足为假。 LINGO 有三种关系运算符:“=”、“<=”和“>=”。LINGO 中还能用“<”表示小 于等于关系,“>”表示大于等于关系。LINGO 并不支持严格小于和严格大于关系运算符。 然而,如果需要严格小于和严格大于关系,比如让 A 严格小于 B: A<B, 那么可以把它变成如下的小于等于表达式: A+ε<=B, 这里ε是一个小的正数,它的值依赖于模型中 A 小于 B 多少才算不等。 下面给出以上三类操作符的优先级: 高 #not# ﹣(取反) ^ ﹡ / ﹢﹣ #eq# #ne# #gt# #ge# #lt# #le# #and# #or# 低 <= = >= 5.2 数学函数 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) @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 中的最小值 例 5.3 给定一个直角三角形,求包含该三角形的最小正方形。 解:如图所示
CE=asin x. AD= bcos x. DE= acos x+bsin x 求最小的正方形就相当于求如下的最优化问题 min max CE, AD, DE) E 0sx≤ LINGO代码如下 sets object/1. 3/: fi B a,b=3,4;!两个直角边长,修改很方便 nagata f(1)=a* Gsin(x)) f(2)=b*@cos(x); @cos(x)+b @sin(x)i min=@smax(f(1),f(2),f(3)); bnd(0,x,1.57); 在上面的代码中用到了函数ebnd,详情请见4.5节。 53金融函数 目前 LINGO提供了两个金融函数。 @fpa(I, n) 返回如下情形的净现值:单位时段利率为I,连续n个时段支付,每个时段支付单 位费用。若每个时段支付x单位的费用,则净现值可用x乘以efpa(I,n)算得。@fpa的 计算公式为 1-(1+1) (1+1) 净现值就是在一定时期内为了获得一定收益在该时期初所支付的实际费用。 例5.4贷款买房问题贷款金额50000元,贷款年利率5.31%,采取分期付款方 式(每 还固定金额,直至还清)。问拟贷款10年,每年需偿还多少元? LINGO0代码如下: 50000= x* @fpa(.0531,10); 答案是x=6573.069元 2. @fpl( I, n) 返回如下情形的净现值:单位时段利率为I,第n个时段支付单位费用。efpl(I,n) 的计算公式为 (1+D) 细心的读者可以发现这两个函数间的关系 @fpa(I, n)=>@fpl(, k) 54概率函数 二项分布的累积分布函数。当n和(或)x不是整数时,用线性插值法进行计算
-325- CE = a sin x, AD = b cos x, DE = a cos x + bsin x, 求最小的正方形就相当于求如下的最优化问题: { } CE AD DE x min max , , 2 0 π ≤ ≤ LINGO 代码如下: model: sets: object/1..3/: f; endsets data: a, b = 3, 4; !两个直角边长,修改很方便; enddata f(1) = a * @sin(x); f(2) = b * @cos(x); f(3) = a * @cos(x) + b * @sin(x); min = @smax(f(1),f(2),f(3)); @bnd(0,x,1.57); end 在上面的代码中用到了函数@bnd,详情请见 4.5 节。 5.3 金融函数 目前 LINGO 提供了两个金融函数。 1.@fpa(I,n) 返回如下情形的净现值:单位时段利率为 I,连续 n 个时段支付,每个时段支付单 位费用。若每个时段支付 x 单位的费用,则净现值可用 x 乘以@fpa(I,n)算得。@fpa 的 计算公式为 I I I n n k k − = − + = + ∑ 1 (1 ) (1 ) 1 1 。 净现值就是在一定时期内为了获得一定收益在该时期初所支付的实际费用。 例 5.4 贷款买房问题 贷款金额 50000 元,贷款年利率 5.31%,采取分期付款方 式(每年年末还固定金额,直至还清)。问拟贷款 10 年,每年需偿还多少元? LINGO 代码如下: 50000 = x * @fpa(.0531,10); 答案是 x=6573.069 元。 2.@fpl(I,n) 返回如下情形的净现值:单位时段利率为 I,第 n 个时段支付单位费用。@fpl(I,n) 的计算公式为 n I − (1+ ) 。 细心的读者可以发现这两个函数间的关系: ∑= = n k I n I k 1 @fpa( , ) @fpl( , )。 5.4 概率函数 1.@pbn(p,n,x) 二项分布的累积分布函数。当 n 和(或)x 不是整数时,用线性插值法进行计算。 A B C D E a b x