请问Lingo中怎样修改数值解的精确度?

请问Lingo中怎样修改数值解的精确度?,第1张

里面有几处是中文符号:

(1)Title 投资组合模型;这里的“;”号

(2)Mean,X这里的“,”号

(3)STST/Stocks,Stocks/: COV这里的“,”号,另外这里二维集合的定义要改成:STST(Stocks,Stocks): COV

(4)Mean=0.003581 0.002352 0.00102 -0.00019;这里的“;”号

这样修改后运行的结果:

No feasible solution found.

Extended solver steps: 5

Total solver iterations:32

Model Title: 投资组合模型

Variable ValueReduced Cost

TARGET1.0500000.000000

MEAN( 1) 0.3581000E-020.000000

MEAN( 2) 0.2352000E-020.000000

MEAN( 3) 0.1020000E-020.000000

MEAN( 4) -0.1900000E-030.000000

X( 1) 0.73119432295194.

X( 2)1.1064542306261.

X( 3)2.4484072318256.

X( 4)13.412422329153.

COV( 1, 1) 0.1661327E-020.000000

COV( 1, 2) 0.9088240E-030.000000

COV( 1, 3) 0.6733000E-030.000000

COV( 1, 4) 0.6325350E-030.000000

COV( 2, 1) 0.9088240E-030.000000

COV( 2, 2) 0.1216098E-020.000000

COV( 2, 3) 0.7701690E-030.000000

COV( 2, 4) 0.6216930E-030.000000

COV( 3, 1) 0.6733000E-030.000000

COV( 3, 2) 0.7701690E-030.000000

COV( 3, 3) 0.9575310E-030.000000

COV( 3, 4) 0.5902240E-030.000000

COV( 4, 1) 0.6325350E-030.000000

COV( 4, 2) 0.6216930E-030.000000

COV( 4, 3) 0.5902240E-030.000000

COV( 4, 4) 0.9580890E-030.000000

RowSlack or Surplus Dual Price

OBJ 0.1152338E+09 -1.000000

ONE -16.698482327442.

TWO -1.044830 -9005313.

显示为无可行解,可能约束条件里存在问题。

例如:放宽对x取正的约束,使允许为负,修改的代码:

MODEL:

Title 投资组合模型

SETS:

STOCKS/ 1..4/:Mean,X

STST(Stocks,Stocks): COV

ENDSETS

DATA:

TARGET=1.05

Mean=0.003581 0.002352 0.00102 -0.00019

COV=0.001661327 0.000908824 0.000673300 0.000632535

0.000908824 0.001216098 0.000770169 0.000621693

0.000673300 0.000770169 0.000957531 0.000590224

0.000632535 0.000621693 0.000590224 0.000958089

ENDDATA

[OBJ]min=@sum(STST(i,j):COV(i,j)*x(i)*x(j))

[ONE]@sum(STOCKS:X)=1

[TWO]@sum(stocks:Mean*X)>=TARGET

@FOR(STOCKS:@FREE(X))

END

运行结果为:

Local optimal solution found.

Objective value: 92.90818

Extended solver steps: 5

Total solver iterations: 4

Model Title: 投资组合模型

Variable ValueReduced Cost

TARGET1.0500000.000000

MEAN( 1) 0.3581000E-020.000000

MEAN( 2) 0.2352000E-020.000000

MEAN( 3) 0.1020000E-020.000000

MEAN( 4) -0.1900000E-030.000000

X( 1)200.47850.000000

X( 2)148.95670.000000

X( 3) -69.803570.000000

X( 4) -278.63160.000000

COV( 1, 1) 0.1661327E-020.000000

COV( 1, 2) 0.9088240E-030.000000

COV( 1, 3) 0.6733000E-030.000000

COV( 1, 4) 0.6325350E-030.000000

COV( 2, 1) 0.9088240E-030.000000

COV( 2, 2) 0.1216098E-020.000000

COV( 2, 3) 0.7701690E-030.000000

COV( 2, 4) 0.6216930E-030.000000

COV( 3, 1) 0.6733000E-030.000000

COV( 3, 2) 0.7701690E-030.000000

COV( 3, 3) 0.9575310E-030.000000

COV( 3, 4) 0.5902240E-030.000000

COV( 4, 1) 0.6325350E-030.000000

COV( 4, 2) 0.6216930E-030.000000

COV( 4, 3) 0.5902240E-030.000000

COV( 4, 4) 0.9580890E-030.000000

RowSlack or Surplus Dual Price

OBJ92.90818 -1.000000

ONE0.000000 0.1438273

TWO0.000000 -177.1049

matlab控制运算精度用的是digits和vpa这两个函数。digits用于规定运算精度,比如:digits(20)这个语句就规定了运算精度是20位有效数字。但并不是规定了就可以使用,因为实际编程中,我们可能有些运算需要控制精度,而有些不需要控制。vpa就用于解决这个问题,凡是用需要控制精度的,我们都对运算表达式使用vpa函数。例如:digits(5)a=vpa(sqrt(2))这样a的值就是1.4142,而不是准确的1.4142135623730950488016887242097。

1、首先在电脑中打开Lingo软件,进入下面编程状态。

2、然后输入目标函数:min z = 2*x1 + 3*x2 + x3 如下图所示。

3、然后进行运行一下,看看自己是否输入正确,如果没有出现“error”,那么继续输入下面的约数条件。

4、最后输入约数方程之后,再次运行一下,若发现和下图一样则表示输入正确,若显示的不一样则表示输入的有误,在这里可以看出objective value给出的后面的数字是7,那么最优解就是7,就完成了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/8117930.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存