gauss-操作入门.doc
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《gauss-操作入门.doc》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- gauss_ 操作 入门
- 资源描述:
-
1、1 GaussGauss 系统介绍系统介绍 目录目录 1. 系统初步 2. 矩阵介绍 3. 矩阵运算及其它运算 4. Gauss 程序控制 5. 过程与模块化程序设计 6. 文件输入输出 7. Gauss 图形简介 8. 重要函数及语句分类参考 Gauss 系统是 Aptech Systems 公司出品的一个矩阵语言软件包,它可以十分方 便地编制矩阵计算程序,并内建了许多矩阵运算、概率统计函数,还可以绘制印 刷质量的图形。它可以在命令行交互计算,也可以编程计算,编程时具有通常的 分支、循环、模块化子程序等功能,并以矩阵为基本运算单位。利用附加的模块 可以进行经济财务分析、统计分析等等。我们主要
2、用它来编制统计计算、模拟程 序。它进行矩阵运算时速度很快,甚至比编译的 C 代码还要快,这是因为它采用 了优化的矩阵计算内核。 Gauss 系统有微机版本,也可以运行于工作站等高档 机型。这里以 DOS 版 Gauss v2.2 为例说明。 系统初步系统初步 在安装好 Gauss 系统后,一般用一个批命令进入 Gauss 系统,比如说是 G0.BAT。 进入系统后,出现一个命令行的界面,命令提示为“”形状。在命令提示下可 以输入 Gauss 语句。用 Alt+H 可以启动帮助系统,在帮助系统内按 H 键后输入问 号然后回车可以得到一个帮助菜单。 为了退出 Gauss 系统,可以在命令行发布 S
3、YSTEM 命令,或者按 ESC 键并回答 Y。 Gauss 的基本计算单位是矩阵。定义标量、向量、矩阵用等号赋值即可。例如, a = 15.2; b1 = 1 2 3; b2 = 1, 2, 3; c = 1 2 3, 4 5 6, 7 8 9; name=My first Gauss program 分别定义了标量 a、行向量 b1、列向量 b2、矩阵 c、字符串标量 name。矩阵定 义中一行的元素间用空格分隔,各列用逗号分隔。字符串两边用双撇号包围,不 2 能用单撇号。 Gauss 中除了字符串常量外不区分大小写,所以变量名既可以用 大写,也可以用小写。语句以分号结束,但在命令行界面可
4、以省略分号。 要显示定义的变量的值,在命令行界面下只要键入变量名就可以显示其值,例如 c 1.00000002.00000003.0000000 4.00000005.00000006.0000000 7.00000008.00000009.0000000 显示变量值的正规方法是使用 PRINT 语句,如“print c;”。 PRINT 语句可以 输出几项,各项之间用空格分开,所以 PRINT 语句中如果有表达式,表达式中一 定不能有空格。例如: print A = a b1 = b1 A = 15.200000 b1 = 1.0000000 2.0000000 3.0000000 有一些函
5、数可以生成常见的向量和矩阵。 SEQA(start, step, length)可以产生 从 start 开始, 按 step 递增, 长度为 length 的等差数列列向量, 如 seqa(1,2,4) 产生元素为 1、 3、 5、 7 的列向量。 SEQM(start, rate, length)可以产生从 start 开始,每次乘以 rate 的长度为 length 的等比数列列向量。 ZEROS(n,m)产生 n 行 m 列的元素全为零的矩阵。 ONES(n,m)产生 n 行 m 列的元素全为 1 的矩阵。 RNDU(n,m)产生 n 行 m 列的元素服从(0,1)均匀分布的伪随机数矩
6、阵。RNDN(n,m) 产生 n 行 m 列的元素服从标准正态分布的伪随机数矩阵。 EYE(n)产生 n 阶单位 阵。 为了从键盘输入一个矩阵,使用函数 CON(n,m),其中 n 和 m 分别是要输入的行 数和列数。输入时用空格、回车、逗号分隔输入的数值。例如: c2 = con(2,3) ? 1 2 3 4 ? 5 6 c2 1.0000000 2.0000000 3.0000000 4.0000000 5.0000000 6.0000000 3 要输入字符串,一般用如“s= CONS;PRINT;”的方法,其中 s 是用来存放输入的 字符串的变量。 矩阵可以直接进行通常的矩阵运算。例如,
7、 c1=1 2 3, 4 5 6; c2=3 2 1, 7 6 5; c3=c1+c2; c3; 4.0000000 4.0000000 4.0000000 11.000000 11.000000 11.000000 c4=1 2, 3 4; c5=c4*c3; c5; 26.000000 26.000000 26.000000 56.000000 56.000000 56.000000 矩阵 X 的转置可以用 X表示。 两个矩阵 X 和 Y 横向并接用 XY 表示。 矩阵 X 和 Y 纵向并接用 X|Y 表示。 为了解方程 A X = B,只要写 X = B/A 即可,当 A 为满秩方阵时即
8、联立线性方程组求解, 当 A 的行数大于列数时求的是最小二乘 解。 矩阵与标量可以进行加减乘除运算。 除了可以使用命令行界面直接输入并运行 Gauss 语句, 我们还可以编辑一个程 序文件并运行这个程序文件。可以预先编辑好一个程序文件,比如 TEST.GSP, 里面有如下程序行: x=1 2 3; y=4,5,6; print x y; 4 把这个文件放在 Gauss 的当前目录下,在 Gauss 命令行用 RUN TEST.GSP 命令就可以运行这个程序文件。事实上, Gauss 提供了一个内建的程序编辑器, 比如,在命令行用 EDIT TEST.GSP 就可以打开 TEST.GSP 到 G
9、auss 的内部编辑器中,如果原来没有这个文件将生成 一个新文件。编辑完毕按 Alt+X 出现一个选单,选 W 可以保存文件但不执行,选 R 可以保存并运行程序,并且运行时带有调试信息,可以显示出错行号。在运行 了一个程序后按 Ctrl+F1 键就可以之间调入刚刚执行的程序进行修改。 矩阵介绍矩阵介绍 Gauss 系统提供了一个完整的以矩阵为基本运算单位的程序设计语言。 Gauss 是一种解释性语言,但因为它的每一个操作都是对矩阵进行的,所以运行速度很 快。自己写程序时要尽量利用矩阵运算而应避免使用循环对单个元素运算。 Gauss 有矩阵和字符串两种数据类型。变量类型不需要预先说明。数据类型、
10、元 素个数、矩阵形状可以在运行时改变。可以用 DECLARE 语句声明数据类型。矩阵 元素允许为字符串,字符矩阵的元素最多存储 8 个字符。 Gauss 的矩阵是按行存储的。矩阵元素都以 IEEE 8 字节双精度浮点数格式存在 内存中,称为“长实数”,有效位数有 1516 位,绝对值范围在 4.19E-307 到 1.67E308。 Gauss 计算由表达式完成。表达式是用运算符连接起来的常数、矩阵、字符串、 函数或过程调用。 Gauss 程序由语句构成,语句以分号结尾。 上一节我们已经看到了矩阵赋值的一些办法。 矩阵赋值还有一些灵活的方法, 如: let x2,2 = 1 2 3 4; 结果
11、得到方阵 x,第一行为 1 2,第二行为 3 4。 let x2,3 = 1; 结果得到一个元素全为 1 的 2 行 3 列方阵。 let x2,3; 5 结果得到一个元素全为 0 的 2 行 3 列方阵。 LET 语句用来对矩阵赋值,但右边 只能是一些常数而不能是计算表达式。为了计算,省略 LET 并用和|连接行列, 例如: x (1/3) (1+1/4) | 3 4; 用 RESHAPE 函数可以改变一个矩阵的形状。例如, x = reshape(seqa(1,1,12), 3, 4); 把原始的列向量改成了 3 行 4 列矩阵: 1.0000000 2.0000000 3.0000000
12、 4.0000000 5.0000000 6.0000000 7.0000000 8.0000000 9.0000000 10.000000 11.000000 12.000000 可以很方便地得到矩阵的子阵。例如, x2,3为第 2 行第三列元素, x1, . 为 x 的第一行, x., 2为 x 的第二列, x1 3,2 4为 x 的第 1、3 行和第 2、 4 列组成的子阵(注意方括号中不允许有多余的空格): x1 3,2 4; 2.0000000 4.0000000 10.000000 12.000000 下标可以用冒号表示一个范围,比如 x1 3,2:4; 2.0000000 3.0
13、000000 4.0000000 10.000000 11.000000 12.000000 矩阵运算及其它运算矩阵运算及其它运算 Gauss 提供了丰富的运算符来进行矩阵运算和字符串操作。矩阵运算除了一般线 性代数中的运算外还有一些针对元素的运算, 为此定义两个矩阵 X 和 Y 是元素匹 6 配(ExE conformable)的,如果 X 和 Y 为图 1 情况之一。 元素运算为对应行、列元素的运算,如果行、列中只有一项是匹配的则只对这一 项匹配运算,例如: 7 上面的各运算交换后仍是匹配的。 Gauss 的矩阵运算包括: +加法。要求两矩阵元素匹配。 减法。要求两矩阵元素匹配。 *矩阵乘
14、法或数乘。要求为 mk 阵乘以 kn 阵,或者两矩阵之一为标量。 /标量除或解线性方程组或最小二乘。 x = b / A 中如果 A 和 b 均为标量 则为标量除法; 如果 A 和 b 之一为标量则 x 为元素与标量分别相处得到的 矩阵。如果 A 为方阵, b 为与 A 阶数相同的列向量,则 b / A 用三角分 解方法解线性方程组 A x = b。如果 A 非方阵,与 b 行数相同,则求最小 二乘解。 %求余数运算。要求两矩阵元素匹配。对非整数先四舍五入。 !阶乘。比如 y= x!对 x 的每个元素求阶乘。非整数先四舍五入。 .*元素间乘积。要求两矩阵元素匹配。 ./元素间相除。要求两矩阵元
15、素匹配。 元素间乘方。当底数为负数时指数必须取整数。 .与“”等价。 .*. Kronecker 积。 z = x .*. y 使 x 的每个元素的位置扩大为此元素乘 以 y 的结果。比如 *水平直积。计算 x * y, x 与 y 必须有相同行数,结果行数不变而列 数为 x 的列数与 y 的列数的乘积。比如 8 转置。 x为 x 的转置。 |垂直连接。比如 水平连接。比如 Gauss 提供的比较运算符包括: .= 或 .EQ 两矩阵元素间相等的比较,要求两矩阵元素相配,比较结果 为元素取 01 值的矩阵。 ./= 或 .NE 或 .$/= 两矩阵元素间不等的比较。 . 或 .LT 或 .$
16、两矩阵元素间小于关系比较。 .= 或 .LE 或 .$ 或 .GT 或 .$G 两矩阵元素间大于关系比较。 .= 或 .GE 或 .$= 两矩阵元素间大于等于关系比较。 如果上面的比较算符中没有点则比较结果为标量结果,用于比较两个标量,如果 比较两个矩阵,则元素间所有比较结果都为真时才为真,否则为假。 Gauss 提供的逻辑运算符有: NOT x x 的否。 x AND y x 和 y 都成立时才为真。 x OR y x 和 y 只要有一个为真则结果为真。 x XOR y x 和 y 的异或。 x EQV y x 和 y 的等价。 上面的逻辑运算为标量运算, x 和 y 应为标量。逻辑运算也可
17、以在两个矩阵的 元素之间进行,只要在运算符前加点,如 .AND, .OR。 其它运算符还有: 赋值:如 y=x1; 逗号:用作分隔符,比如 clear x, y, z; y = x3,5 9 y=momentd(x,d); 句点:在下标处代表“所有行”或“所有列”,例如 y=x.,5; /* 表示 x 的第 5 列所有行的元素组成的列向量 */ 空格:用来分开下标,例如: y=x1 3 5, 3 7; 冒号:在下标处表示连续的下标范围,如: y=x1:5,.; /* x 的第一到第五行 */ vnames = age,pay,sex; create f1 = dset with vname,
18、0, 2; 结果等效于在 create 语句中直接写入字符串变量的值。 GaussGauss 程序控制程序控制 由于采用了矩阵作为基本运算单元, 所以 Gauss 程序经常用顺序结构就可以完成 任务。比如,要解方程组 只要用以下四个语句: A = 2 3,3 7; b = 9,11; x = b/A; print x; 10 结果得到: 6.0000000 -1.0000000 但是,对于比较复杂的问题,我们不可避免地要使用分支、循环等运算结构。 Gauss 提供了这些程序控制结构,但是我们再次提醒读者, Gauss 是一个基于矩 阵的语言,我们应该尽可能基于矩阵运算去实现算法。 Gauss
19、分支结构使用 IF-ELSEIF-ELSE-ENDIF 结构,格式为: IF 标量表达式; (语句组) ELSEIF 标量表达式; (语句组) ELSE; (语句组) ENDIF; 其中各判断条件应为标量表达式,不允许是矩阵。标量值为非零时表示真值,为 零时表示假值。 “语句组”可以是一个或多个语句,每个语句以分号结尾。注 意 Gauss 的 IF 结构不使用 THEN 关键字。 Gauss 的循环结构为 DO WHILE 和 DO UNTIL 结构,没有计次循环结构。格式为: DO WHILE 标量表达式; (语句组) ENDO; 和 DO UNTIL 标量表达式; (语句组) ENDO;
20、11 要注意其结束语句是 ENDO 而不是 ENDDO。为了从循环中退出可以用 BREAK 语句。 在循环中执行 CONTINUE 语句可以忽略循环体内后面的语句而返回到判断条件处 继续执行。 Gauss 也提供了 GOTO 语句,格式为:“GOTO 标号;”,其中标号为一个普通的 Gauss 名字,在定义时尾随一个冒号,引用时不写冒号,例如: goto errout; errout: Gauss 可以在程序中加注释,用/*和*/包围,或用和包围起来。 Gauss 的符号名(变量名、过程名、标号名等)要求由字母、数字、下划线组成, 第一个字符只能是字母或下划线,最多 8 个字符。 为了在程序运
21、行时提供调试信息,可以在程序文件开头加上一个“#lineson;” 语句。这样出错时可以显示出错的行号。 过程与模块化程序设计过程与模块化程序设计 作为一个程序设计语言 Gauss 也提供了模块化的过程,可以实现模块化程序设 计。过程中可以使用局部变量,也可以引用外部的全局变量,并可以递归调用。 Gauss 使用用户自己编写的过程与使用内部过程一样方便。 Gauss 提供了一种单行函数定义可以很方便地把一个公式定义为一个函数,例 如: fn area(r) = 2*pi*r*r; 定义了面积函数,调用时只要用如“a=area(4);”。 过程可以使用复杂的程序逻辑,可以返回零到多个值,定义格式
22、如下: PROC 返回值个数过程名(参数 1,参数 2, ,参数 N); LOCAL 语句; (语句组) RETP(表达式 1, ,表达式 N); 12 ENDP; 其中内的内容表示是可选的。当返回值个数为 1 个时可以省略“返回值个数 ”的说明。当没有参数时可以省略括号。没有返回值时要说明“(0)= ”即返 回值个数为 0,可以省略 RETP 语句。过程的调用格式为: 返回值 1, ,返回值 N= 过程名(参数 1,参数 2, ,参数 N); 或 CALL 过程名(参数 1,参数 2, ,参数 N); 使用 CALL 语句时无返回值或者忽略返回值。 例如,下面的过程计算回归分析: /* re
23、gress * Input: * x - design matrix * y - dependent variable * Output: * b - regression coefficients * sd - standard deviation * t - t variable for every coefficient */ PROC (3)=regress(x, y); LOCAL xxi, b, ymxb, sse, sd, t; xxi = invpd(xx); b = xxi*(xy); ymxb = y - x*b; sse = ymxb*ymxb/(rows(x)-cols
24、(x); 13 sd = sqrt(diag(sse*xxi); t = b ./ sd; retp(b, sd, t); ENDP; 调用可用如 b, sd, t = regress(x, y); 或 call regress(x, y); 使用 CALL 调用时忽略返回值。 在过程内使用的变量是局部变量,必须用 LOCALS 语句说明,对变量不必说明类 型,对过程名应说明为 PROC,单行函数说明为 FN,例如: locals x, y, f:proc, g:fn; 其中 x,y 是变量, f 是过程, g 是单行函数。 过程内可以使用全局变量,有两种全局变量,一种是所有在主程序中使用的变
25、量 (即在所有过程外部定义的变量),例如: g_x = 1; call sub1; proc (0)=sub1; print in sub1; print global g_x = g_x; endp; 结果为: in sub1 global g_x = 1.0000000 14 我们注意到,这种用法很方便,但是也不利于程序调试(数据隐藏不够)。使用 Gauss 变较大的程序可能出现的一个问题就是在过程中无意中使用了主程序中 的变量名而造成不易发现的错误。 另一种全局变量在过程中使用 DECLARE 语句来声明, 声明的变量可以在其它过程 中使用。例如: call sub1; proc (0)
展开阅读全文