关键词不能为空

当前您在: 主页 > 英语 >

gauss 操作入门

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-28 08:37
tags:

-

2021年2月28日发(作者:电量)


Gauss


系统介绍



目录



1.



系统初步



2.



矩阵介绍



3.



矩阵运算及其它运算



4.



Gauss


程序控制



5.



过程与模块化程序设计



6.



文件输入输出



7.



Gauss


图形简介



8.



重要函数及语句分类参考



Gauss


系统是


Aptech Sy stems


公司出品的一个矩阵语言软件包,它可以十分方


便地 编制矩阵计算程序,


并内建了许多矩阵运算、


概率统计函数,< /p>


还可以绘制印


刷质量的图形。


它可以在命 令行交互计算,


也可以编程计算,


编程时具有通常的

< p>
分支、


循环、


模块化子程序等功能,


并以矩阵为基本运算单位。


利用附加的模块


可以进行 经济财务分析、


统计分析等等。


我们主要用它来编制统计计算、


模拟程


序。


它进行矩阵运算时速度很快 ,


甚至比编译的


C


代码还要快,


这是因为它采用


了优化的矩阵计算内核。


G auss


系统有微机版本,也可以运行于工作站等高档


机型。这 里以


DOS



Gauss v2.2


为例说明。



系统初步



在安装好


Gauss


系统后,一般用一个批命令进入


Gauss


系统,比如说是



进入系统后,


出现一个命令行的界面,


命令提示为“》


”形状。


在命令提示下可


以输入

< p>
Gauss


语句。



Al t+H


可以启动帮助系统,


在帮助系统内按

H


键后输入问


号然后回车可以得到一个帮助菜单。



为了退出


Gauss


系统,可以在命令行发布


SYSTEM


命令,或者按


ESC


键并回答


Y


。< /p>



Gauss


的基本计算单位是矩阵。 定义标量、向量、矩阵用等号赋值即可。例如,




a = 15.2;



b1 = {1 2 3};



b2 = {1, 2, 3};



c = {1 2 3, 4 5 6, 7 8 9};



name=


分别定义了标量


a


、行向量


b1


、列向 量


b2


、矩阵


c


、字符串标量


name


。矩阵定


义中 一行的元素间用空格分隔,


各列用逗号分隔。


字符串两边用双撇 号包围,




1


能用单撇号。


Gauss


中除了字符 串常量外不区分大小写,所以变量名既可以用


大写,也可以用小写。语句以分号结束,但 在命令行界面可以省略分号。



要显示定义的变量的值,


在命令行界面下只要键入变量名就可以显示其值,


例如





c




1.0000000 2.0000000 3.0000000


4.0000000 5.0000000 6.0000000


7.0000000 8.0000000 9.0000000


显示变量值的正规 方法是使用


PRINT


语句,如“print c;”。


PRINT


语句可以


输出几 项,


各项之间用空格分开,


所以


PRI NT


语句中如果有表达式,


表达式中一


定不能有空格。例如:




print


A = 15.200000 b1 = 1.0000000 2.0000000 3.0000000


有一些函数可以生成常见的向量和矩阵。


SEQA(start,


step,


length)


可以产生



start


开始,



step


递增,

< p>
长度为


length


的等差数列列向量,



seqa(1,2,4)


产生元素为


1



3



5



7


的列向量。


SEQM(start,


rate,


le ngth)


可以产生从


start


开始 ,每次乘以


rate


的长度为


leng th


的等比数列列向量。


ZEROS(n,m)


产生


n



m


列的元素全为零的矩阵。


ONES(n,m)


产生< /p>


n



m


列的元素 全为


1


的矩阵。


RNDU(n,m)


产生


n



m


列的元素服从


(0,1)


均匀分布的伪随机数矩阵。


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



2


要输入字符串,一般用如“s=


CONS;PRINT;”的方法,其中


s

是用来存放输入的


字符串的变量。



矩阵可以直接进行通常的矩阵运算。例如,




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< /p>



Y


横向并接用


X~Y


表示。



矩阵

< br>X



Y


纵向并接用


X|Y


表示。



为了解方程


A X = B


,只要写


X = B/A


即可,当< /p>


A


为满秩方阵时即联立线性方程组求解,




A


的行数大于列数时求的是最小二乘


解。



矩阵与标量可以进行加减乘除运算。



除了可以使用命令行界面直接输入并运行


Gauss


语句,< /p>



我们还可以编辑一个程


序文件并运行这 个程序文件。可以预先编辑好一个程序文件,比如



< p>
里面有如下程序行:



x={1 2 3};


y={4,5,6};


print x y;



3


把这个文件放在


Gauss


的当前目录下,在


Gauss


命令行用




RUN


命令就可以运行这个程序文件。事实上,


Gauss


提供了一个内建的程序编辑器,


比如,在命令行用




EDIT


就可以打开




Gauss


的内部 编辑器中,如果原来没有这个文件将生成


一个新文件。


编辑完毕 按


Alt+X


出现一个选单,



W


可以保存文件但不执行,



R


可以保存并运行程序,并且运行时带有调试信息,可以显示出错行号。在运行


了一个程序后按


Ctrl+F1


键就可 以之间调入刚刚执行的程序进行修改。



矩阵介绍



Gauss


系统提供了一个完整的以矩阵为基本运算单位的程序设计语言。


Gauss


是一种解释性语言,


但因为它的每一个操作都是对矩阵进行的,


所以运行速度很


快。自己写程序时要尽量利用矩阵运算而应避免 使用循环对单个元素运算。



Gauss

有矩阵和字符串两种数据类型。变量类型不需要预先说明。数据类型、元


素个数、< /p>


矩阵形状可以在运行时改变。


可以用


DE CLARE


语句声明数据类型。


矩阵


元 素允许为字符串,字符矩阵的元素最多存储


8


个字符。



Gauss


的矩阵是按行存储的。矩阵元素 都以


IEEE 8


字节双精度浮点数格式存在

< br>内存中,称为“长实数”,有效位数有


15


< p>
16


位,绝对值范围在


4.19E-307



1.67E308




Gauss


计算由表达式完成。表达式是用运算符连接起 来的常数、矩阵、字符串、


函数或过程调用。


Gauss


程序由语句构成,语句以分号结尾。


< p>
上一节我们已经看到了矩阵赋值的一些办法。


矩阵赋值还有一些灵活的方法 ,


如:




let x[2,2] = 1 2 3 4;


结果得到方阵


x


,第一行为


1 2


,第二行为


3 4





let x[2,3] = 1;


结果得到一个元素全为


1< /p>



2



3


列方阵。




let x[2,3];



4


结果 得到一个元素全为


0



2



3


列方阵。


LET


语句用来对矩阵赋值,但右边


只能是一些常数而不能是计算表达式。 为了计算,省略


LET


并用


~



|


连接行列,


例如:




x



(1/3) ~ (1+1/4) | 3 ~ 4; < /p>



RESHAPE


函数可以改变一个矩阵 的形状。例如,




x = reshape(seqa(1,1,12), 3, 4);


把原始的列向量改成了


3



4


列矩阵 :



1.0000000 2.0000000 3.0000000 4.0000000


5.0000000 6.0000000 7.0000000 8.0000000


9.0000000 10.000000 11.000000 12.000000


可以很方便地得到矩阵的子阵。例如,


x[2,3]


为第


2


行第三列元素,


x[1, .]



x


的第一行,


x[., 2]



x


的第二列,


x[1 3,2 4]



x


的第


1



3


行和第


2



4


列组成的子阵(注意方括号中不允许有多余的空格):




x[1 3,2 4];


2.0000000 4.0000000


10.000000 12.000000


下标可以用冒号表示一个范围,比如




x[1 3,2:4];


2.0000000 3.0000000 4.0000000


10.000000 11.000000 12.000000


矩阵运算及其它运算



Gauss< /p>


提供了丰富的运算符来进行矩阵运算和字符串操作。


矩阵运算除了 一般线


性代数中的运算外还有一些针对元素的运算,


为此定义两 个矩阵


X



Y


是元素匹



5


配(


ExE conformable


)的,如果


X



Y

为图


1


情况之一。




元素运算为对应行、


列元素的运算,


如果行、


列中只有一项是匹配的则只对这一

项匹配运算,例如:






6





上面的各运算交换后仍是匹配的。



Gauss


的矩阵运算包括:



+


加法。要求两矩阵元素匹配。



?



-减法。要求两矩阵元素匹配。



?



*


矩阵乘 法或数乘。


要求为


m×k


阵乘以


k×n


阵,


或者两矩阵之一为标量。



?



/


标量除或解线性方程组或最小二乘。


x = b / A


中如果


A



b


均为标量


则为标量除法;

< br>如果


A



b

之一为标量则


x


为元素与标量分别相处得到的


矩阵。如果


A


为方阵,


b


为与


A


阶数相同的列向量,则


b / A


用三角分


解方法解线性方程组


A x = b


。如果


A


非方阵,与

< p>
b


行数相同,则求最小


?



?



?



?



?



?



?



?



二乘解




%


求余数运算。要求两矩阵元素匹配。对非整数先四舍五入。



!


阶乘。比如


y= x!



x


的每个元素求阶乘。非整数先四舍五入。



.*


元素间乘积。要求两矩阵元素匹配。



./


元素间相除。要求两矩阵元素 匹配。



^


元素间乘方。当底数为负 数时指数必须取整数。



.^


与“^”等价。



.*. Kronecker


积。


z = x .*. y


使


x


的每个元素的 位置扩大为此元素乘



y


的结果。比如




?



*~


水平直积。计算


x *~ y



x



y


必须有相同行数,结果行数不变而列


数为


x


的列数与


y


的列数的乘积。比如< /p>




7



?



'


转置。


x'



x


的转置。



?



?



|


垂直连接。比如


~


水平连接。比如




Gauss


提供的比较运算符包括:



?



?



?



?



?



?



.==



.EQ

< br>两矩阵元素间相等的比较,要求两矩阵元素相配,比较结果


为元素取


0



1


值的矩阵。



./=



.NE



.$$/=


两矩阵元素间不等的比较。



.<



.LT



.$$<


两矩阵元素间小于关系比较。



.<=



.LE



.$$<=


两矩阵元素间小于等于关系比较。



.>



.GT



.$$G


两矩阵元素间大于关系比较。



.>=



.GE



.$$>=


两矩阵元素间大于等于关系比较。



如果上面的比较算符中没有点则比较结果为标量结果,


用于比较两个标量,


如果


比较两个矩阵,则元素间所有比较结果都为真时才为真,否则为假。



Gauss


提供的逻辑运算符有:



?



?



?



?



?



NOT x x


的否。



x AND y x



y


都成立时才为真。


x OR y x



y


只要有一个为真则结果为真。



x XOR y x



y


的异或。

< br>


x EQV y x



y< /p>


的等价。



上面的逻辑运算为标量运算,


x


和< /p>


y


应为标量。逻辑运算也可以在两个矩阵的


元素之间进行,只要在运算符前加点,如


.AND



.OR




其它运算符还有:



赋值:如


y=x1;


?



逗号:用作分隔符,比如



?



clear x, y, z;


y = x[3,5]



8


y=momentd(x,d);


?



句点:在下标处代表“所有行”或“所有列”,例如



y=x[.,5]; /*


表示


x< /p>


的第


5


列所有行的元素组成的列向量


*/


?



空格:用来分开下标,例如:



y=x[1 3 5, 3 7];


?



冒号:在下标处表示连续的下标范围,如:



y=x[1:5,.]; /* x


的第一到第五行


*/


&


:取过程指针。



?



$$+


:字符串连接。


x $$+ y< /p>



x


是字符串时结果为

< br>x



y


连接的结果,当


x


是字符矩阵时结果为连接的字符矩阵。



?



^


:字符串宏替换。例如:



?



dset =


vnames = {age,pay,sex};


create f1 = ^dset with ^vname, 0, 2;


结果等效于在


create


语句中直接写入 字符串变量的值。



Gauss


程序控制



由于采用了矩阵作为基本运算单元,


所以


Gauss


程序经常用顺序结构就可以完成


任务。比如,要解方程组




只要用以下四个语句:



A = {2 3,3 7};


b = {9,11};


x = b/A;


print x;



9


结果得到:



6.0000000


-1.0000000


但是,对于比较复杂的问题,我们不可 避免地要使用分支、循环等运算结构。



Gauss

< p>
提供了这些程序控制结构,


但是我们再次提醒读者,


Gauss


是一个基于矩


阵的语言,我们应该尽可能基于矩 阵运算去实现算法。



Gauss


分支结构使用


IF- ELSEIF-ELSE-ENDIF


结构,格式为:



IF


标量表达式


;


???(语句组)



ELSEIF


标量表达式


;


???(语句组)



ELSE;


???(语句组)



ENDIF; < /p>


其中各判断条件应为标量表达式,


不允许是矩阵。


标量值为非零时表示真值,



零时表示假值。



“语句组”可以是一个或多个语句,每个语句以分号结尾。注



Gauss



IF< /p>


结构不使用


THEN


关键字。

< p>


Gauss


的循环结构为


DO WHILE



DO UNTIL


结构,没有计次循环结构。格式为:



DO WHILE


标量表达式


;


???(语句组)



ENDO;




DO UNTIL


标量表达式


;


???(语句组)



ENDO;



10


要注意其结束语句是


ENDO


而不是


ENDDO


为了从循环中退出可以用


BREAK

语句。


在循环中执行


CONTINUE

语句可以忽略循环体内后面的语句而返回到判断条件处


继续执行。

< br>


Gauss


也提供了


GOT O


语句,格式为:“GOTO 标号;”,其中标号为一个普通的


Gauss


名字,在定义时尾随一个冒号,引用时不写冒号,例如:

< br>


goto errout;


???



errout:


???



Gauss

< br>可以在程序中加注释,用


/*



*/


包围,或用


@


< br>@


包围起来。



Gauss< /p>


的符号名


(变量名、


过程名、

< p>
标号名等)


要求由字母、


数字、

< br>下划线组成,


第一个字符只能是字母或下划线,最多


8< /p>


个字符。



为了在程序运行时提供调试 信息,可以在程序文件开头加上一个“#lineson;”


语句。这样出错时可以显示 出错的行号。



过程与模块化程序设计



作为一个程 序设计语言


Gauss


也提供了模块化的过程,可以实现模块化 程序设


计。过程中可以使用局部变量,也可以引用外部的全局变量,并可以递归调用。< /p>



Gauss


使用用户自己编写的过程与 使用内部过程一样方便。



Gauss


提供了一种单行函数定义可以很方便地把一个公式定义为一个函数,例


如:

< p>


fn area(r) = 2*pi*r*r;


定义了面积函数,调用时只要用如“a=area(4);”。



过程可以使用复杂的程序逻辑,可以返回零到多个值,定义格式如下:

< br>


PROC


〖返回值个数=〗过程名〖


(


参数


1


,参数


2




?,参数

< p>
N)



;


LOCAL


语句


;


???(语句组)



RETP



(


表达式


1




?,表达式


N)< /p>



;



11


ENDP;


其中


〖〗


内的内容表示是可选的。


当返回值个数为


1

< p>
个时可以省略“返回值个数


=”的说明。当没有参数时可以省略括号。没有 返回值时要说明“(0)= ”即返


回值个数为


0


,可以省略


RETP


语句。过程的调用格式为:



{


返回值


1




?,返回值


N}=


过程名〖


(


参数


1


,参数


2




?,参数


N)



;




CALL


过程名〖


(


参数


1

< br>,参数


2



< br>?,参数


N)



;

< p>
使用


CALL


语句时无返回值或者忽略返回值。< /p>



例如,下面的过程计算回归分析:



/* regress


** 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(x'x);


b = xxi*(x'y);


ymxb = y - x*b;


sse = ymxb'*ymxb/(rows(x)-cols(x));



12


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


是单行函数。



过程内可以使用全 局变量,


有两种全局变量,


一种是所有在主程序中使用的变量< /p>


(即在所有过程外部定义的变量),例如:



g_x = 1;


call sub1;


proc (0)=sub1;


print


print


endp;


结果为:



in sub1


global g_x = 1.0000000



13


我们注意到,这种用法很方便,但是也不利于程序调试( 数据隐藏不够)。使用


Gauss


变较大的程序可能出现的一个 问题就是在过程中无意中使用了主程序中


的变量名而造成不易发现的错误。



另一种全局变量在过程中使用


DECLARE< /p>


语句来声明,


声明的变量可以在其它过程


中使用。例如:



call sub1;




proc (0)=sub1;


declare g_x != 0;


g_x = 1;


call sub2;


endp;


proc (0)=sub2;


print


print


endp;


DECLA RE


语句中的


!=


表示赋初值,并且不 论变量是否已初始化。如果改成


?=


则表


示原来未初始化则按给定值初始化,如果已经初始化则不动。如果改成


=


则表示


如果未初始化则初始化,如果已初始化则为重复定义错误。不写初值表 示


=0



始化。



过程也可以作为参数传递给另一个过程,例如我们有一个二分法解方程的过程


binsolv




proc binsolv(&f, a, b, ascend);


/*


** f(x)


是一个单调函数


,


** f (a)



f(b)


符号相反

< p>
,


** ascend=1


表示增函数


,



14

-


-


-


-


-


-


-


-



本文更新与2021-02-28 08:37,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/679938.html

gauss 操作入门的相关文章