本帖最后由 厚积薄发 于 2010-6-22 18:22 编辑
第二阶段:报告(数学中国社区站长:madio) 1、报告 活动发言人(291269111) 21:10:26
由于时间原因,所以只能讨论到这了,下面我们进入下一个报告 活动发言人(291269111) 21:10:51
下面由数学中国站长madio做报告! madio-admin(75822904) 21:11:30
首先,很高兴有这个机会和大家交流,我的报告分为两个部分!
madio-admin(75822904) 21:12:29
前面是我的同事王镁老师关于matlab的一些介绍,他没有时间过来讨论,我带他发表一下!后面一部分是一个关于Lingo集合的介绍! madio-admin(75822904) 21:13:18
好的,我们先来看看王镁老师关于Matlab的介绍。 madio-admin(75822904) 21:13:48
应数学中国之邀,写一个Matlab介绍,想了好久,不知该写些什么。Matlab太庞大了,自己对其了解可以说是九牛一毛,全面的把握不住,专题的不够深入贻笑方家。讲讲自己使用Matlab的经历吧。 madio-admin(75822904) 21:14:39
1996年7月,第一次接触数学软件Mathematica,感觉符号演算非常神奇。之后又使用Maple,用MathCAD备课。一直比较捧奉Mathematica和Maple,尽管有朋友极力推荐Matlab,但总觉得它不会比这些软件好到哪里去,所以一直抵触。 madio-admin(75822904) 21:15:50
后来经常评审文章,不得不了解一下Matlab。慢慢地工作中也用用它,现在很少使用Mathematica和Maple了,主要用Matlab。我感觉,Matlab的最大好处是工具箱非常丰富,你能想到的事,几乎都有现成函数,编程量小。 madio-admin(75822904) 21:16:47
本质上是由于其开源性,全世界的使用者都是开发者和测试者,所以大多数函数的算法非常专业。使用Matlab的另一个原因就是容易学习。除了其自身丰富完整的帮助文档外,国内使用者非常多,网上提问总有满意的回答,所以入门快,遇到问题容易求救。 madio-admin(75822904) 21:17:34
我最早使用Matlab是做土壤渗流问题,主要用统计方法处理数据。除了回归、相关性检验非常方便外,逐次回归、数据分布检验、参数检验也很方便。 madio-admin(75822904) 21:18:20
2001年全国大学生数学夏令营期间,用神经网络探索过乳腺癌诊断问题。此后用神经网还做过交通流问题。2003年后在做生物神经元问题时,经常用Matlab探索常微分方程解的性态,主要是常微分方程数值解和作图。 madio-admin(75822904) 21:19:12
2006年与人合作,做土壤风蚀项目时,用过Matlab插值、数据拟合等功能,特别是三次样条插值非常方便。期间还做过偏微分方程数值解,主要是想解决水气界面空气流动问题,由于项目没有得到批准,没有深入下去。2008年做过干旱地区植被问题,主要是多元统计的聚类和因子分析。在指导数学建模竞赛过程中,还用过Matlab的最优化工具箱和Simulink工具箱。 madio-admin(75822904) 21:20:11
我还使用Matlab给数学教材做过插图,尤其是二次曲面的图形。这里多说一句,Matlab的图形功能非常强大,如果做过面向对象编程,可以非常好地驾驭Matlab图形,作出理想效果。有时间的话,和大家一起探讨一下图形功能的使用技术。 matlabfan-ppf606ppf(48339364) 21:20:45
buhaoyisi madio-admin(75822904) 21:21:19
我现在备课用的最多的是Matlab。高等代数、微积分、解析几何中的计算和绘图几乎都可以用Matlab来做,昨天数学实验课还做了一个分形程序,画了一棵树。尤其是出考试题时,想把数字凑得简单一点,Matlab是很方便的。 madio-admin(75822904) 21:22:22
Matlab的程序写起来也比较容易。如果熟悉矩阵的思想,程序可以写得比其它语言简短,少用不少循环。Matlab程序可以写成结构性的,也可以按解释性语言的方式写。Matlab的数据结构也容易组织,使用cell类型可以模仿C语言的指针,构造多重链表也可以。 madio-admin(75822904) 21:23:40
程序调试也比较方便,设置断点后可以利用函数中的局部变量进行各种运算测试。另外Matlab也提供了丰富的外部接口,可以进行数据的导入导出,可以混合语言编程。 madio-admin(75822904) 21:24:16
Matlab的最大缺点就是慢,特别是数据量较大的时候。 madio-admin(75822904) 21:24:29
罗嗦了半天,非常愿意与大家就具体问题进行讨论。 madio-admin(75822904) 21:25:25
上面是王镁老师的发言稿,接下来我关于Lingo的集合给大家介绍一下! madio-admin(75822904) 21:26:14
Lingo中的集合 madio-admin(75822904) 21:26:33
Lindo 和 Lingo 是美国 Lindo 系统公司开发的一套专门用于求解最优化问题的软件包。Lindo 用于求解线性规划和二次规划问题,Lingo 除了具有 Lindo 的全部功能外,还可以用于求解非线性规划问题,也可以用于一些线性和非线性方程(组)的求解,等等。 madio-admin(75822904) 21:27:25
Lindo 和 Lingo 软件的最大特色在于可以允许优化模型中的决策变量是整数(即整数规划),而且执行速度很快。据lindo公司人员介绍最新的12..0版本可以轻松解决2亿个变量的整数规划问题。 madio-admin(75822904) 21:28:30
由于很多现实问题都可以在一定程度上化为优化问题,且大部分都是整数规划问题,因此Lingo在现实应用中非常重要。应用的范围包含生产线规划、运输、财务金融、投资分配、资本预算、混合排程、库存管理、资源配置等等 madio-admin(75822904) 21:29:07
Lingo不仅仅是一个软件工具,而且是一种建模语言,我们可以用Lingo的语言来描述优化模型。在LINGO语言的模型中,集合及其属性的使用占据了相当重要的作用。集合能够实现只输入少数几行文字就能建立起含有大规模变量的目标函数或成千上万条约束条件的数学模型。我觉得这个是Lingo最大的特色,所以专门拿出来和大家讨论一下! madio-admin(75822904) 21:30:17
集合的定义包含以下几个部分:集合的名字(setname);集合的成员(member_list);集合中成员的属性(attribute_list)。其表达式为以“SETS:”开始,以“ENDSETS”结束,各字母不区分大小写,集合成员之间可以以逗号或空格分开,各属性之间也以逗号分开。
一般形式为(以下语法中凡是在方括号“[]”中的内容,表示是可选项,即该项可以有也可以没有):
SETS:
setname[/member_list/][:attribute_list];
ENDSETS
当隐式罗列成员时,不必罗列出每个集成员。可采用如下语法:
setname/member1..memberN/[: attribute_list];
madio-admin(75822904) 21:31:11
这里的member1是集的第一个成员名,memberN是集的最末一个成员名。LINGO将自动产生中间的所有成员名。LINGO也接受一些特定的首成员名和末成员名,用于创建一些特殊的集。 madio-admin(75822904) 21:31:44
可以把集、集成员和集属性同C语言中的结构体作个类比。如下图:
集 ←→ 结构体
集成员 ←→ 结构体的域
集属性 ←→ 结构体实例
madio-admin(75822904) 21:32:35
有了这个图大家就可以利用集合解决问题了,就像是在C语言中利用结构体描述对象一样! madio-admin(75822904) 21:33:30
LINGO软件中可以定义和使用的集合有两种:基本集合和派生集合。我们前面定义的集合都是基本集合;而由其他集合派生出来的二维或**集合称为派生集合。派生集合的一般定义格式为: setname(parent_set_list)[/member_list/][:attribute_list]; madio-admin(75822904) 21:34:40
这样我们在C++中对象的继承关系也可以等效地利用集合来实现了! madio-admin(75822904) 21:35:32
最后我们来看一个例子:(最短路问题)已知图中各城市之间的连线及连线上的距离,问应选择哪一条路线,使从A到E的总的路程为最短? madio-admin(75822904) 21:37:14
在Lingo中的可以用下面的代码来描述这个问题
sets:
CITIES/A,B1,B2,B3,C1,C2,C3,D1,D2,E ;
ROADS(CITIES,CITIES)/A,B1 A,B2 A,B3 B1,C1 B1,C2 B1,C3 B2,C1 B2,C2 B2,C3
B3,C1 B3,C2 B3,C3 C1,D1 C1,D2 C2,D1,C2,D2 C3,D1 C3,D2 D1,E D2,E ;
ENDSETS
DATA:
D=2 5 3 7 5 6 3 2 4 5 1 5 1 4 6 3 3 3 3 4;
L=0, , , , , , , , ,;
ENDDATA
@FOR(CITIES(I)|I#GT#1 (I)=@MIN(ROADS(J,I) (J)+D(J,I)););
END
madio-admin(75822904) 21:38:21
在上述程序中,基本集合为CITIES,共有十个元素,代表十个城市,属性L(I)表示城市A到城市I的最优路线的长度。派生集合ROADS代表的是上面图形中的道路(弧),其元素是任意连线的两城市。由于并非所有城市都有道路相连,即派生集合中的元素并没有包含基本集合构成的有序对的所有元素,所以该派生集合是稀疏集合。属性D(I,J)是城市I到城市J的直接距离。 madio-admin(75822904) 21:39:12
LINGO求解得到A到E的最短路线为A→B3→C2→D2→E,最短距离为11。 madio-admin(75822904) 21:39:45
好了,我讲的内容就这么多,谢谢大家! 活动发言人(291269111) 21:40:00
感谢数学中国站长马老师和王老师的精彩报告! 2、讨论
活动发言人(291269111) 21:40:09
(由于时间关系,会议做临时调动,会议第三阶段和第四阶段进行调换,把第二阶段的讨论放到调整后的第四阶段进行!) |