当前位置:文档之家› Fortran进行批处理的方法

Fortran进行批处理的方法

Fortran进行批处理的方法
Fortran进行批处理的方法

Fortran中批量处理文件的方法总结

—循环读取目录下的所有符合条件的文件=====================

一、简单的介绍

在一年之前,我写过一个程序,主要是对Micaps资料进行批量处理,将逐日资料处理为旬、月的数据,在那个程序中,始终有一个问题困扰我,就是如何自动生成该读取的下一个文件名,这使我真正开始关注fortran中的批处理,时隔一年,决定写下这些文字,将我用到的一些fortran批处理的方法和大家共享,交流。

对于那些只要会用程序,不求其中原理的朋友,请马上跳过这些文字,直接去下载附件吧!程序里有使用说明,但是,如果你不懂原理,估计现成的程序你使用起来也会碰壁哦!

这里所说的批处理是指对某一个目录下的指定后缀的文件的批量读取和处理。

我总结的批处理方法大概可以用下面这个示意图来说明:

|

|

|将文件目录写入一个文本文件,供fortran循环读取

|————手动输入文件名

|————运行程序之前命令行工具导出文件名

|————程序运行后,未开始计算之前,生成文件名

| ————调用CMD命令生成

| ————GETFILEINFOQQ方法生成

| ————调用WIN32API生成

|

|在程序运行时动态生成文件名

|

|

对于第一种方法,我将主要介绍如何将目录写入文件,然后举出一个小的示例来验证。第二种方法主要是说明其思路。

二、方法的介绍

1、将文件目录写入一个文本文件,供fortran循环读取

1.1、手动输入文件名

这是最基本的方法啦,如果文件个数不多,而且文件名中包含了空格等特殊字符的话,建议使用这种方法,在这里就不多说啦,至于在fortran中的处理,等几个小方法介绍完之后会有一个例子来说明。

1.2、运行程序之前命令行工具导出文件名

这是一个既高效又保险的方法,主要思路就是通过强大的CMD命令列出目录下的文件到一个指定的文件中,然后由fortran去循环读取该文件中的文件名信息,从而批量处理。

a、从运行工具打开你的CMD窗口;

b、转到要处理的当前目录(可省略):CD /d 路径,如:

CD /d e:\test

这样可以快速到达e:\test目录

c、使用DIR命令列出文件目录信息到指定的文件,通常使用的

Dir *.*>新文件名这个命令在这里已经不能满足要求,因为会列出一堆对于我们处理而言无用的信息,现在要使用的命令是:

DIR /b filter>newfile

注意,其中的filter为文件筛选,必须自己修改为所需的,比如你可以把它改成*.txt,这样,就会列出当前目录下的所有txt结尾的文件了。

Newfile就是你需要存放文件名的那个文件,比如可以是dir.txt,这样就成了 dir

/b*.txt>dir.txt,就会把当前目录下的所有文件都列出到dir.txt文件中,当然,由于dir.txt 也在当前目录,所以也会被算进去,这在处理的时候是需要注意的,下面几种方法中同样考虑了这个问题。你可以选择手动删掉,或者把dir.txt这个文件存到其他地方去,或者,不要和你需要的文件具有相同的后缀也行,比如:dir /b *.txt>e:\dir.txt (假设当前目录是e:\test)

如果省略了第二步中的转到当前目录的话,就需要在dir命令后输入完整的路径了,而且新生成的文件也要选择有权限建立新文件的地方存放,比如你在c:\users目录下输入:dir /b e:\test\*.txt>e:\dir.txt,这个命令和上面先转到e:\test目录下的效果是一样的。

现在你是不是比较好奇,/b 是干嘛的,其实就是只列出文件名,不要其他的附件信息,比如创建时间,文件大小等等这些对于我们批处理无关的信息。

如果你想包含某个目录下的子目录,那么,就可以这样写:

Dir /b/s filter>newfile

/s就表示包含子目录,但是,这样会有一个问题,那就是,批处理的时候必须获得正确的路径才能操作,这样得到的子目录里面的文件不会有任何标志说他是来自子目录的,因此fortran处理的时候就无法判断了,所以,如果包含了子目录,那么请用下面的命令:

Dir /a-d/b/s filter>newfile

现在去看看新生成的文件吧,怎么样,很惊喜吧!

懂了这个方法,下面一部分的第一个方法对你来说就是小菜一碟啦。

如果你使用的win7(或vista)系统,而且无法正常使用CVF编译器的话,那么第一部分到这里就算结束啦,除非,你会在其他fortran编译器中调用WIN32API。

1.3、程序运行后,未开始计算之前生成文件名

1.3.1、在程序中调用CMD命令

这个方法其实就是上一个方法的进化版,只不过变成了在程序运行的时候调用命令自动生成,这样整个过程显得少一点,只需要在程序里设置好相关的参数即可。

这个方法的关键在于SYSTEMQQ函数的使用,这是CVF编译器封装的调用CMD命令的一个函数,存在于DFLIB库中,其语法命令为:

result = SYSTEMQQ(commandline)

commandline:表示需要进行的CMD操作,字符串形式,函数中的实际长度由传入的参数决定,input类型(表示输入为参数);

Results:一个逻辑型变量(logical(4)),如果成功为true,失败为false(不解的是程序中要实现的东西都是正常的,比如仅仅传入dir命令,返回的结果仍然为F,请高手赐教)

给出一个简单的例子:

USE DFLIB

LOGICAL(4)result

result = SYSTEMQQ('copy e:\dir.txt e:\test\dir.txt')

这个命令将第一个路径中的文件复制到为第二个路径中的文件。通过这个例子再结合上面一个方法,就可以很方法便的构造出我们需要用来批处理的子函数,关键语句如下所示:

subroutine ListToFile(fPath,outPut)

character*(*),InTent(In):: fPath,outPut

character*100CMD

LOGICAL(4) res

CMD="dir/a-d/b/s "//trim(fPath)//" >"//trim(outPut)

res=SYSTEMQQ(CMD)

endsubroutine

其中传入的是文件筛选值和输出的路径,这个方法也是我在第一部分中最为推荐的一个方法了,代码简洁高效,能够输出完整的路径,可以包含子文件夹,唯一的缺点就是输出的文件个数不能直接在程序中调用(方便循环),需要在批处理的时候使用其他方法来判断文件是否读取结束。

1.3.2、使用GETFILEINFOQQ方法生成文件目录

该方法是下面一个方法的进化版,是由CVF对WIN32的API进行了封装,这样,我们就可以通过简单的调用函数来实现一些面向对象的功能。简单的翻译了一下官方给出的GETFILEINFOQQ函数信息:

Module: USE DFLIB (存在于DFLIB库中)

语法简介:

Syntax

result = GETFILEINFOQQ (files, buffer, handle)

files :输入类型的字符型变量,表示你需要查找的路径(也就是我们上面方法中的筛选值),同样可以使用*或者?这样的通配符。

buffer :在函数运行中会获得一个值,可供输出使用,这个值就是所找到的文件的相关信息,属于FILE$INFO类型的变量(该类型定义于:fortran安装路径DF98\INCLUDE路径下),其结构如下:

TYPE FILE$INFO

INTEGER(4)CREATION

INTEGER(4)LASTWRITE

INTEGER(4)LASTACCESS

INTEGER(4)LENGTH

INTEGER(4)PERMIT

CHARACTER(255)NAME

END TYPE FILE$INFO

handle :接受输入和输出整型变量,表示文件控制信息(同样在DFLIB中定义),包含以下内容:

FILE$FIRST - First matching file found.

FILE$LAST - Previous file was the last valid file.

FILE$ERROR - No matching file found.

Results: 返回值是一个整型变量(integer(4)),表示的不含空格的文件名长度,如果文件未找到,则返回0。

了解了以上信息,我们就可以通过编程进行循环调用这个函数,每找到一个符合条件的文件,就把他输入到指定路径的文件中去,注意,凡是input类型的变量都必须传入数值,否则会出错。

如果你比较有探索精神,就试着用这个介绍和思路来编程一下吧,子程序如下所示(完整的请下载附件)

Subroutine GetFileList(cFileName,outPut,iFile)

UseDFLib,only:GetFileInfoQQ,GetLastErrorQQ,FILE$INFO,FILE$LAST,FILE$ERROR,FILE$ FIRST,ERR$NOMEM,ERR$NOENT,FILE$DIR !引入库函数

Implicit None

!根据上面的语法介绍来定义变量

Character*(*),Intent(In)::cFileName !筛选值

character*(*),intent(In)::output !输出路径

Integer,Intent(InOut)::iFile !记录已经找到几个文件

TYPE (FILE$INFO) info !找到的文件的信息

INTEGER(4)::Wildhandle,length !文件控制信息,文件大小,

Wildhandle = FILE$FIRST

iFile = 0

DOWHILE (.TRUE.) !循环找文件

length = GetFileInfoQQ(cFileName,info,Wildhandle) !调用函数找文件

!如果遇到错误或者不能再找到不同的文件,则进入选择,准备退出

IF ((Wildhandle .EQ. FILE$LAST) .OR.(Wildhandle .EQ. FILE$ERROR)) THEN SELECT CASE (GetLastErrorQQ())

CASE (ERR$NOMEM) !//内存不足

iFile = - 1

Return

CASE (ERR$NOENT) !//碰到通配符序列尾,正常退出

Return

CASE DEFAULT

iFile = 0

Return

END SELECT

END IF

iFile= iFile + 1

Call WriteFileName( Trim(https://www.doczj.com/doc/9919029103.html,) ,outPut, iFile) !调用子函数输出文件名

ENDDO

End Subroutine GetFileList

注意,在调用子函数输出文件名时,要做一些处理,主要是判断文件是否存在(不存在则新建,如果是第一次找到,而且文件存在,则覆盖,否则追加),以及找到的是否为我们自己建立的这个dir.txt文件(如果是,则忽略,找到的文件数量-1)

这个方法也不错,如果不需要子目录的信息,其优越性不亚于上一种方法,因为该子函数能够直接返回找到的文件数量。

1.3.3调用WIN32API生成目录下的文件信息

有了上面的几种方法,其实这个方法可以不需要介绍,但是也许有和我一样喜欢刨根问底的朋友,还是贴出来,也算是分享一下CVF平台下对于API的调用方法。

fortran的最大强项是数值计算,他本身对于各种系统信息的处理功能实在不敢说好,如果要实现一些交互的功能目前来说还是比较复杂的。

该方法直接调用系统的API函数来实现功能,理论上只要是fortran编译器支持API调用,就可以使用该方法,也就是说可以用于win7和vista(linux的

不在本次讨论范围,上面的几种方法思路在linux均需要变换才能使用)。目前我还没有测试在MPF4.0等其他的编译器中使用API函数的情况,感兴趣的测试后不要忘了来分享啊^v^。

该方法主要使用了一下三个系统函数:FindFirstFile,FindNextFile和FindClose,这三个函数存在于系统的Kernel32.dll函数中,因此调用之前需要先引用这个函数库。简单给出这三个函数的介绍:

HRESULT FindFirstFile(

[in,string] LPCWSTR wsSearchFile

[out] LPWIN32_FIND_DATAW pFindFileData

[out] LPHANDLE pSearchHandle

);

wsSearchFile:字符串类型的变量,也就是上面说的筛选值,pFindFileData,表示所找到的文件的信息,类似上面方法中的那个FILE$INFO类型,也是在函数调用过程中生成信息,他的类型就是WIN32_FIND_DATA(一个结构体,在fortran中使用TYPE定义)。

pSearchHandle:这是一个表示文件地址的变量,类似于我们用OPEN命令打开一个文件时,前面给一个unit的意思,他可以用在后面的FindNextFile和FindClose函数中。

该函数的返回值为0表示文件未找到。

HRESULT FindNextFile(

[in] HANDLE hSearchHandle

[out] LPWIN32_FIND_DATAW pFindFileData

);

该函数可以用上面所获得HANDLE句柄来查找下一个符合条件的文件,函数运行过程中同样给pFindFileData生成了相关信息,文件名就从其中获取。返回值同FindFirstFile。

HRESULT FindClose(

[in] HANDLE hSearchHandle

);

根据上面的文件句柄关闭文件,返回值同上。

有了对这三个函数的了解,接下来的事情就是如何使用这三个函数了,给出关键的子程序并作说明:

subroutine FindName(FileExt,outFile,iFile)

Usekernel32 !载入函数库

integer,parameter::maxlen=80 ! 设置一个文件名长度的阈值

CHARACTER*(*) FileExt,OutFile !筛选值和目标路径

Integer(4) hFind,res !文件句柄和返回值

integer(4),intent(inout)::iFile !已找到的文件个数(不含dir.txt)

Type(t_WIN32_FIND_DATA) FindFileData !系统定义的一个结构体信息,具体的可以自行查阅WIN32API手册

character*maxlen cname ! 这个变量用来存放获得的文件名,长度为上面所设定的,不宜太长

res=1

iFile=0

hFind = FindFirstFile(FileExt,FindFileData) !找第一个文件

If(hFind == INVALID_HANDLE_VALUE)then

Return ! 没有找到匹配文件,返回结果=-1

else

!继续循环寻找下一个

do while(res)

iFile=iFile+1

!先把已有的写入文件

cname=FindFileData.cFileName

!这一段代码很特殊,主要是因为调用API之后,默认的文件名长度非常之长,用常用的trim()函数无法缩短,因为文件名后面并不是空格,而是一个值为0的ASCII字符,因此用循环将这个字符替换为空格,以便于后面的处理,这也是上面说阈值不宜过大的愿意,否则浪费时间

do i=1,maxlen

if(ichar(cname(i:i))==0) cname(i:i)=' '

enddo

callWriteFileName(trim(cname),outFile,iFile) !调用子函数写出文件名

res=FindNextFile(hFind,FindFileData) 继续查找下一个,用res 的值来控制循环是否退出

enddo

res=FindClose(hFind) !退出循环后关闭文件

endif

endsubroutine

肿么样,API函数看下来是否有点晕晕的,能看到这里相信你对fortran的理解又加深了一些吧。

该方法和上一种方法如出一辙,优缺点也近乎相同,同样没有包含子目录(你有兴趣的话可以试试能否使用FindFileData里面的信息让这个子程序包含子目录,如果有了结果,同样不要忘了来分享哦)。

总结一下上面的几种方法,手工输入适用于文件比较少,而且路径比较复杂的时候;使用dir命令几乎可以通吃,但是无法直接给出文件数目;PI函数功能较为一般,但是可以直接获得找到的文件个数,而且通过writefile子函数的处理,可以让dir.txt直接存在于当前目录下但不包含在本身的文件列表中。选哪一种,完全看你的需要和喜好啦!

一个小小的例子(使用SYSTEMQQ实现):在当前目录下有1.txt…4.txt这样4个文本文件(注意路径以及文件名中不要有空格,否则fortran中就得按字符读取了),分别存放一个数字:1,2,3,4,要求循环读取这些文件中的数字,并且相加,给出最终的和,程序如下:

program listfile

character*100 fPath

character*200 path

character*7 outPut

integer a,b

b=0

fPath="*.txt"

outPut="dir.txt"

call ListToFile(fPath,outPut) !先生成文件列表

open(1,file='dir.txt',status='old') !打开生成的列表文件

10continue !由于不知道有多少行,所以下面使用END标签来控制文件是否结束

read(1,*,end=20)path

if(index(Path,"dir.txt")==0)then !我生成的是绝对路径,所以,用该函数检查读取的这一行是否为文件列表本身,如果不是再往下操作

open(2,file=''//trim(Path)//'',status='old')

read(2,*)a

close(2)

b=b+a

endif

goto 10

20 close(1) !文件读取结束

print*,b !输出和

end program listfile

二、运行时动态生成文件名

这个是针对具有特殊需求,或者是文件名有着非常好的规律性才这样做,比如我开始的时候说的调用MIcpasd的文件进行处理,由于需要每天都运行程序,而且每天不同时候都会有新的文件生成,显然,使用第一部分中说的方法是不合理的,工作量太大(当然,如果你愿意写一个批处理定时生成文件名也未尝不可),重要的是Micaps数据文件具有相当好的文件名格式(不是数据格式,嘿嘿),基本是按照年月日时.时效样的格式来生成的,因此,就可以设置某种规则来自动生成需要处理的文件名。

具体的例子就不举例了,也许以后有空会把我那个程序翻出来共享一下,主要的思路就是获取系统时间,根据时间生成这时候应该处理的文件的文件名(年月日时,时效都有,文件名就不愁啦),你可以在这次程序运行结束后,就把下次需要处理的文件名事先生成好(我就是这样做的),然后下次直接处理那些文件就行,如果遇到文件不存在等信息,最好也记录下来。

=========================================

下载附件请去:https://www.doczj.com/doc/9919029103.html,/forum.php?mod=viewthread&tid=30

FORTRAN程序设计复习题及答案

FORTRAN程序设计复习题 一、选择题 B (1)下列各FORTRAN表达式中合法的是 A) S+T*2P >= B) .NOT. (A*B+C) C) A2+B2/(C+D) <= D) (A+B).NOT.A*B.GT.(.NOT.只跟一个表达式) C (2)数学式(3/5)ex+y的FORTRAN表达式是 A) 3*EXP(X+Y)/5 B) 3*E* *(X+Y)/ C) (3/5)*EXP(X+Y)D) EXP(X+Y) D (3)下列FORTRAN77表达式中不合法的是 A) A.GT.B.EQV.C.GT.D B) A.AND.B.AND.C.AND.D C) .NOT.(X.LE.D) A.LT.B.LT.C.LT.D D(4)下列叙述中不正确的是 A) FORTRAN子程序可以单独编译 B) 对一个FORTRAN源程序进行编译和连接无误后可生成可执行文件 C) 即使编译和连接都正确无误,FORTRAN程序运行时仍可能出错 D) FORTRAN连接的主要任务是把函数库中的函数翻译成机器指令(正确描述:主要任务为连接目标文件) B (5)在下列FORTRAN77运算符中,优先级最高的是 A) .AND. B) .NOT. C) .OR. D) .EQ. B (6)FORTRAN表达式"6/5+9/2**3/2"的值为 A) 33 B) 1 C) 5 D) 3 A (7)下列FORTRAN77表达式中,合法的是: A) .AND.. B) 10.0 C) D) 提示:A)相当于 .AND.(.NOT.()) D (8)关于编译一个FORTRAN源程序文件,下列说法中错误的是 A) 允许编译只有一个主程序而没有子程序的源文件 B) 允许编译有多个子程序的源文件 C) 允许编译只有一个子程序而没有主程序的源文件 D) 允许编译有多个主程序的源文件 C (9)在FORTRAN77源程序中,续行标志符必须放在 A) 第1列 B) 第1-6列C) 第6列D) 第5列 D (10)下列关于"SUBROUTIN E MAP(X,Y)"语句行的叙述中,不正确的是 A) 这是子程序的第一个语句 B) 字符串"MAP"是子程序名 C) 变量X是子程序的形参D) 子程序执行后,MAP将返回整型数据 提示:子程序无返回值,自定义函数才有) A (11)FORTRAN表达式"2/4+"的值是 A) B) 1 C) D) 0 提示:2/4默认等于整型,=》 D (12)FORTRAN表达式"MOD,"的值是 A) B)0.0 C) D) A (13下列FORTRAN运算符中,优先级最低的是 A)逻辑运算符.AND. B)算术运算符*

总结求矩阵的逆矩阵的方法

总结求矩阵的逆矩阵的方法 课程名称: 专业班级: 成员组成: 联系方式:

摘要:矩阵是线性代数的主要内容,很多实际问题用矩阵的思想去解既简单又快 捷.逆矩阵又是矩阵理论的很重要的内容, 逆矩阵的求法自然也就成为线性代数研究的主要内容之一.本文将给出几种求逆矩阵的方法. 关键词:矩阵逆矩阵方法 Method of finding inverse matrix Abstract: Matrix in linear algebra is the main content,many prictical problems with the matrix theory is simple and fast. The inverse matrix andmatrix theory the important content, the solution of inverse matrix nature has become one of the main research contents of linear algebra. The paper will give some method of finding inverse matrix. Key words: Matrix inversematrix method

正文: 1.引言:矩阵是线性代数的主要内容,很多实际问题用矩阵的思想去解既简单又快捷.逆矩阵又是矩阵理论的很重要的内容, 逆矩阵的求法自然也就成为线性代数研究的主要内容之一.本文将给出几种求逆矩阵的方法. 2.求矩阵的逆矩阵的方法总结: 2.1 矩阵的基本概念 矩阵,是由个数组成的一个行列的矩形表格,通常用大写字母表示,组成矩阵的每一个数,均称为矩阵的元素,通常用小写字母其元素表示,其中下标都是正整数,他们表示该元素在矩 阵中的位置。比如,或表示一个矩阵,下标表示元素位于该矩阵的第行、第列。元素全为零的矩阵称为零矩阵。 特别地,一个矩阵,也称为一个维列向量;而一个矩阵,也称为一个维行向量。 当一个矩阵的行数与烈数相等时,该矩阵称为一个阶方阵。对于方阵,从左上角到右下角的连线,称为主对角线;而从左下角到右上角的连线称为付对 角线。若一个阶方阵的主对角线上的元素都是,而其余元素都是零,则称 为单位矩阵,记为,即:。如一个阶方阵的主对角线上(下)方的元素都是零,则称为下(上)三角矩阵,例如, 是一个阶下三角矩阵,而则是一个阶上三角矩阵。今后我们用表示数域上的矩阵构成

ABAQUS中Fortran子程序调用方法

第一种方法: / o/ J5 @6 U/ ^- o$ 1. 建立工作目录/ ]" 2. 将Abaqus安装目录\6.4-pr11\site下的aba_param_dp.inc或aba_param_sp.inc拷贝到工作目录,并改名为aba_param.inc; # ~/ |0 I0 E6 {, @4 X3 q: W3. 将编译的fortran程序拷贝到工作目录; 4. 将.obj文件拷贝到工作目录; 5. 建立好输入文件.inp; 6. 运行abaqusjob=inp_name user=fortran name即可。 第二种方法: 在Job模块里,创建工作,在EditJob对话框中选择General选项卡,在Usersubroutine file中点击Select 按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for或.f)。 , D8 i7 d/r c6 @" | 以下是网上摘录的资料,供参考:. |$ t/ }$W7 Y6 m4 h6 D6 j 用户进行二次开发时,要在命令行窗口执行下面的命令: 4 O. R+ ^,@( ? abaqus job=job_name user=sub_name ABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库standardU.lib和动态库standardU.dll,还有其它一些临时文件,而它的主程序(如standard.exe和explicit.exe等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。这种运行机制与ANSYS、LS-DYNA、marc等都不同。 : j6 g' R-o( {0 [* N2 J3 X这些生成的临时文件要到文件夹C:\Documentsand Settings\Administrator\Local Settings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。 1子程序格式(程序后缀是.f; .f90; .for;.obj??) 答:我试过,.for格是应该是不可以的,至少6.2和6.3版本应该是不行,其他的没用过,没有发言权。在Abaqus中,运行abaqusj=jobname user=username时,默认的用户子程序后缀名是.for(.f,.f90应该都不行的,手册上也有讲过),只有在username.for文件没有找到的情况下,才会去搜索username.obj,如果两者都没有,就会报错误信息。 如果username包括扩展名for或obj,那么就根据各自的扩展名ABAQUS会自动选择进行操作。 2CAE中如何调用?Command下如何调用? 答:CAE中在creat job的jobmanager中的general中可以指定子程序; Command下用命令:abaqus j=jobnameuser=userfilename (无后缀); 3若有多个子程序同时存在,如何处理 答:将其写在一个文件中即可,然后用一个总的子程序调用(具体参见手册) 4我对VF不是很熟,是否可以用VC,C++编写子程序? A: 若要在vf中调试,那么应该根据需要把SITE文件夹中的ABA_PARAM_DP.INC(双精度)或ABA_PARAM_SP.INC(单精度)拷到相应的位置,并改名为ABA_PARAM.INC即可。 据说6.4的将可以,6.3的你可以尝试着将VC,C++程序编译为obj文件,没试过。在你的工作目录下应该已经存在ufield.obj和uvarm.obj这两个文件(这两个文件应该是你分别单独调试ufield.FOR和uvarm.FOR时自动编译生成的,你可以将他们删掉试试看),但是由于你的FOR文件中已经有了UV ARM 和UFIELD这两个subroutine,显然会造成重复定义,请查实。 用户子程序的使用 假设你的输入文件为:a.inp b.for 那么在ABAQUS Command 中的命令应该是这样的: abaqusjob=a user=b

批处理自动备份文件并且压缩以及自动删除旧文件

批处理自动备份文件并且压缩以及自动删除旧文件 首先计算机要安装Winrar,我是默认安装的,安装路径就是c:\Program Files\winrar\ 开始备份吧。 比如要备份D:\WEB这个文件夹到F:\bak文件夹下面, 命令如下 start c:\"Program Files"\winrar\rar a -k -r -s -m1 -agYYYYMMDD-{bak}-NN F:\BAK\ D:\WEB\ 就这一条命令就能搞定了,解释下这条命令,a是添加文件到压缩包,-k是锁定压缩包,-s 是转换文件为解压缩文件,-m1是压缩的标准,就是快速压缩,标准压缩,最好压缩......,-ag是指定生成的文件名,按照我的设置生成的文件名为20140416-bak-02.rar,生成以日期命名的压缩文件,F:\BAK\是生成压缩包存放路径,D:\WEB\是压缩目标。详细的压缩参数可在命令行输入c:\"Program Files"\winrar\rar /?或者进入c:\"Program Files"\winrar\ 目录,里面有个使用帮助.chm的文件。 如果生成的备份文件需要覆盖上次生成的文件,那命令就更简单了。 命令如下 start c:\"Program Files"\winrar\rar a -k -r -s -m1 F:\BAK\每日备份.rar D:\WEB\ 这条命令我不解释了,参照上面的应该能够理解。 下面是删除旧的备份文件。 由于我硬盘只有100G,每天大概备份文件是10G,所以我是设置为每周星期天删除7天前的备份文件。 命令如下: set deltime=date:~0,10% forfiles.exe /p E:\ /s /m *.rar /d -7 /c "cmd /c del/s @path >>D:\log\deltime%.txt" set deltime=date:~0,10%这句是取一个当前时间的变量,forfiles.exe是系统文件,查找文件的。/P是定义查找的路径 E:\是定义查找路径E盘下面 /S是定义查找范围包括子目录 /M *.rar 定义查找*.rar的文件 /D 是当前时间 -7 早于或者等于当前时间减7天,也就是7天前 /C 是调用命令行CMD.EXE的命令 "cmd /c del /s @path >>D:\log\deltime%.txt" 这个是删除查找到的文件,并且把删除文件的文件名导出到 D:\log\deltime%.txt这个txt文档 deltime%是系统变量,如果当前时间是20140416,那么生成的文件就是D:\log\20140416.txt,其实导出这个列表只是为了方便查看删除了那些东西 把两个批处理保存为bak.bat 和del.bat,前面是备份的,后面是删除旧的备份文件。然后利用任务计划设置运行的时间,按照我的需要,我设置是 每日01:30运行bak.bat 每周日23:00运行del.bat

批处理拷贝文件和文件夹方式

如何批处理拷贝文件和文件夹 经常做数据备份的人很清楚,如果是少量数据或文件,简单复制即可,可是要是大量数据的话,再用这种方法,则费力费时,那么如何批处理拷贝文件和文件夹,可以用xcopy实现,例如: C:\>xcopy C:\ppt\*.* D:\ppt\ /s /e 这条命令的意思就是把C盘下的PPT文件夹全部拷贝到D盘 XCOPY 还有众多的功能,是加参数来完成的。上面的/s /e 参数的作用分别是把子目录和空目录都复制过去,一些使用举例和参数说明如下: 1、如只是单纯地复制E:\ 盘上所有文件到D:\ 盘上,就输入“ xcopy e:\*.* d: /s /h "就行啦!如果在复制过程中,你不要他复制文件啦!那就按键盘热键“Ctrl " +"Pause /break" 二个热键来中断复制。 2、如果想把E:\ 盘上所有文件复制到D:\盘上,分为今天复制一点,明天再接着复制一些,后天再接着复制一些。或者是某种原因上次没有复制完成,今天想接着复制。(这种情况是经常在复制文件中出现的)那可怎么办才好呢? 那就输入“ xcopy e:\*.* d: /s /h /d /y ”就行啦。他能查出那些文件是已经复制过去啦,那些文件还没有复制过去的。 3、当然我们也会碰到这种情况,一些文件我们已经修改过啦!网上面又有最新版本的啦。原来备份的那份文件我们要及时更新啦。那怎么才能同步更新呢?当然我们可以把最新的好份文件复制过去,这也是一种解决办法。 如果修改的文件有很多的,自己到时候也记不清楚那份文件是更新过的。这么多的原来备份的那份文件都要更新,都要复制过去,可不是件省力气的活,而且容易出错和一些文件被忘记啦! 那和上面一样也同样输入" xcopy e:\*.* d: /s /h /d /y "就行啦! 4、还有一种情况我们经常也碰到的,因为复制某个文件出错或者这个文件在使用中,而停止了复制工作,(比如,复制C 盘上的windows xp )我们这时候想跳过某个出错的文件和某个正在使用中文件而继续复制其他文件。 在多加入一个参数" /c "就是" xcopy e:\*.* d: /s /h /d /c /y "就行啦! 5、有时候我们想XCOPY 变为自动复制,并且复制完成后关闭电脑,可以建立一个批处理文件,新建文本文档,更名为XCOPY.BAT 当然扩展名原来是TXT 格式的要更名为BAT 在这个XCOPY.BAT 中输入xcopy e:\*.* d: /s /h /c /y shutdown -s 然后双击xcopy.bat 运行它,你这时候可以出去玩啦。电脑会自己复制备份完成文件然后自动关闭电脑。 XCOPY source [destination] 参数(如/s /e) source 指定要复制的文件。 destination 指定新文件的位置和/或名称。 /A 只复制有存档属性集的文件, 但不改变属性。 /M 只复制有存档属性集的文件, 并关闭存档属性。 /D:m-d-y 复制在指定日期或指定日期以后改变的文件。 如果没有提供日期,只复制那些源时间 比目标时间新的文件。 /EXCLUDE:file1[+file2][+file3]... 指定含有字符串的文件列表。如果有任何

总结求矩阵的逆矩阵的方法

总结求矩阵的逆矩阵的方法-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

总结求矩阵的逆矩阵的方法 课程名称: 专业班级: 成员组成: 联系方式:

摘要:矩阵是线性代数的主要内容,很多实际问题用矩阵的思想去解既简单又快捷.逆矩阵又是矩阵理论的很重要的内容, 逆矩阵的求法自然也就成为线性代数 研究的主要内容之一.本文将给出几种求逆矩阵的方法. 关键词:矩阵逆矩阵方法 Method of finding inverse matrix Abstract: Matrix in linear algebra is the main content,many prictical problems with the matrix theory is simple and fast. The inverse matrix andmatrix theory the important content, the solution of inverse matrix nature has become one of the main research contents of linear algebra. The paper will give some method of finding inverse matrix. Key words: Matrix inversematrix method

正文: 1.引言:矩阵是线性代数的主要内容,很多实际问题用矩阵的思想去解既简单又快捷.逆矩阵又是矩阵理论的很重要的内容, 逆矩阵的求法自然也就成为线性代数研究的主要内容之一.本文将给出几种求逆矩阵的方法. 2.求矩阵的逆矩阵的方法总结: 2.1 矩阵的基本概念 矩阵,是由个数组成的一个行列的矩形表格,通常用大写字母表示,组成矩阵的每一个数,均称为矩阵的元素,通常用小写字母其元素表示,其中下标都是正整数,他们表示该元素 在矩阵中的位置。比如,或表示一个 矩阵,下标表示元素位于该矩阵的第行、第列。元素全为零的矩阵称为零矩阵。 特别地,一个矩阵,也称为一个维列向量;而一个矩阵,也称为一个维行向量。 当一个矩阵的行数与烈数相等时,该矩阵称为一个阶方阵。对于方阵,从左上角到右下角的连线,称为主对角线;而从左下角到右上角的连线称 为付对角线。若一个阶方阵的主对角线上的元素都是,而其余元素都是零,则称为单位矩阵,记为,即:。如一个阶

计算机程序设计语言(FORTRAN语言)

计算机程序设计语言(FORTRAN语言) (总分:36.00,做题时间:90分钟) 一、 (总题数:36,分数:36.00) 1.编译程序能将高级语言编写的源程序转换成( )。 A.解释程序 B.汇编程序 C.映象程序 D.目标程序 (分数:1.00) A. B. C. D. √ 解析: 2.一个完整的FORTRAN源程序( )。 A.至少包括一个主程序 B.至少包括一个主程序和一个子程序 C.由一个主程序与一个以上的子程序组成 D.由一个主程序与一个子程序组成 (分数:1.00) A. √ B. C. D. 解析: 3.语句函数定义语句在程序内合法的位置是( )。 A.在程序块开头语句之后,END语句之前 B.在程序块开头语句之后,可执行语句之前 C.在说明语句之后,END语句之前 D.在说明语句之后,可执行语句之前 (分数:1.00) A. B. C. D. √ 解析: 4.下列关于函数子程序虚实参数的错误说法是( )。 A.可以没有形参数 B.虚实结合的数组长度可以不同 C.实参表与虚参表类型可以不同 D.函数名可以作为虚参

(分数:1.00) A. B. C. √ D. 解析: 5.下列叙述中正确的是( )。 A.FORTRAN程序块中,无名公用语句只能有一个B.FORTRAN子程序中,至少应有一个RETURN语句C.FORTRAN程序块中,最后一行必须是END语句D.FORTRAN程序块中,必须有变量说明语句 (分数:1.00) A. B. C. √ D. 解析: 6.运行下面的程序时得不到所需的结果,其主要原因是( )。INTEGER X(11) DATA X/9,8,7,6,5,4,3,2,1,0,-1/ DO 10 1=1,X(1) ,-1 WRITE(*,*)1.0/SQRT(25.0-REAL(X(1) )* * 2) 10 CONTINUE END A.没有给X(11) 赋初值 B.发生除以零的情况 C.发生负数开平方的情况 D.循环参数设置错误 (分数:1.00) A. B. C. D. √ 解析: 7.下列数据中,不符合FORTRAN常量表示法的是( )。 A.-25.6 B.2.758D3 C.'FOOT"=' D.TRUE (分数:1.00) A. B. C. D. √ 解析:

求逆矩阵的方法

求逆矩阵的方法与矩阵的秩 一、矩阵的初等行变换 (由定理2.4给出的求逆矩阵的伴随矩阵法,要求计算矩阵A 的行列式A 值和它的伴随矩阵*A .当A 的阶数较高时,它的计算量是很大的,因此用伴随矩阵法求逆矩阵是不方便的.下面介绍利用矩阵初等行变换求逆矩阵的方法.在介绍这种方法之前,先给出矩阵初等行变换的定义.) 定义2.13 矩阵的初等行变换是指对矩阵进行下列三种变换: (1) 将矩阵中某两行对换位置; (2) 将某一行遍乘一个非零常数k ; (3) 将矩阵的某一行遍乘一个常数k 加至另一行. 并称(1)为对换变换,称(2)为倍乘变换,称(3)为倍加变换. 矩阵A 经过初等行变换后变为B ,用 A →B 表示,并称矩阵B 与A 是等价的. (下面我们把)第i 行和第j , ”;把第i 行遍乘k k ”;第j 行的k 倍加至第i 为“ + k ”. 例如,矩阵 A = ????? ?????321321321c c c b b b a a a ???? ? ?????321 3 21321 c c c a a a b b b ???? ??????32 1 321321c c c b b b a a a ???? ? ?????32 1321321 kc kc kc b b b a a a ???? ? ?????32 1 321321 c c c b b b a a a ??? ? ? ??? ??+++32 1 332 2113 21 c c c ka b ka b ka b a a a (关于初等矩阵内容请大家自己阅读教材) 二、运用初等行变换求逆矩阵 由定理2.7的推论“任何非奇异矩阵均能经过初等行变换化为单位阵”可知,对于任意一个n 阶可逆矩阵A ,经过一系列的初等行变换可以化为单位阵I ,那么用一系列同样的初等行变换作用到单位阵I 上,就可以把I 化成A -1.因此,我们得到用初等行变换求逆矩阵的方法:在矩阵A 的右边写上一个同阶的单位矩阵I ,构成一个n ?2n 矩阵 ( A , I ),用初等行变换将左半部分的A 化成单位矩阵I ,与此同时,右半部分的I 就被化成了1-A .即 ( A , I )初等行变换 ?→???( I , A -1 ) 例1 设矩阵 A = ???? ? ?????--23 2 311111 ③k ①,② ②+①k

MATLAB教程2012a第3章习题解答 张志涌

第3章 数值阵列及其运算 习题3及解答 1 在MATLAB 中,先运行指令A=magic(3), B=[1,2,1;3,4,3;5,6,7]生成阵列33?A ,33?B ,然后根据运行结果回答以下问题: 〖目的〗 ● 体验矩阵乘法次序不可交换; ● 体验矩阵左除、右除的不同; ● 体验数组乘法次序可交换; ● 体验数组左除、右除的相同性; ● 体验矩阵乘法与数组乘法的根本性差别 ● 体验矩阵求逆的两种方法; ● 体验数组“逆”概念 〖解答〗 A=magic(3), B=[1,2,1;3,4,3;5,6,7] %创建阵列 A = 8 1 6 3 5 7 4 9 2 B = 1 2 1 3 4 3 5 6 7 (1) C1amb=A*B %相乘矩阵的次序不可交换 C1bma=B*A C1amb = 41 56 53 53 68 67 41 56 45 C1bma = 18 20 22 48 50 52 86 98 86 (2) C2adb=A\B %矩阵左除和右除根本不同 C2bda=B/A C2adb = 0.0333 0.1000 0.1611 0.5333 0.6000 0.7444 0.0333 0.1000 -0.1722 C2bda = 0.0056 0.0889 0.1722 0.1389 0.2222 0.3056

0.2333 0.7333 0.2333 (3) C3amb=A.*B %数组乘法不分左、右乘,因为是“元素对元素的运算”C3bma=B.*A C3amb = 8 2 6 9 20 21 20 54 14 C3bma = 8 2 6 9 20 21 20 54 14 (4) C4adb=A.\B %数组除法不分左、右除,因为是“元素对元素的运算”C4bda=B./A C4adb = 0.1250 2.0000 0.1667 1.0000 0.8000 0.4286 1.2500 0.6667 3.5000 C4bda = 0.1250 2.0000 0.1667 1.0000 0.8000 0.4286 1.2500 0.6667 3.5000 (5) C5ada=A\A %相当于inv(A)*A,所以得到“单位阵” C5adda=A.\A %相当于“数组逆”乘数组,得到“单位数组” C5ada = 1 0 0 0 1 0 0 0 1 C5adda = 1 1 1 1 1 1 1 1 1 (6) C6ade=A\eye(3) %矩阵求逆的代数方程法 C6inv=inv(A) %直接利用求逆指令。两者结果相同 C6ade = 0.1472 -0.1444 0.0639 -0.0611 0.0222 0.1056 -0.0194 0.1889 -0.1028 C6inv = 0.1472 -0.1444 0.0639 -0.0611 0.0222 0.1056 -0.0194 0.1889 -0.1028 (7) A C7add1=A.\1 %求“数组逆” C7ade=A\eye(3) %求“矩阵逆” A = 8 1 6 3 5 7 4 9 2 C7add1 = 0.1250 1.0000 0.1667 0.3333 0.2000 0.1429 0.2500 0.1111 0.5000

fortran中批处理实现

********************************************* fortran中批处理命令的实现函数: 利用systemqq命令(需要调用DFLIB 数据库) ********************************************* 例1: USE DFLIB character*100 CMD LOGICAL(4) res CMD="dir/a-d/b/s "//trim(fPath)//" >"//trim(outPut) res=SYSTEMQQ(CMD) 例2: USE DFLIB LOGICAL(4) result result = SYSTEMQQ('copy e:\dir.txt e:\test\dir.txt') !将e:\dir.txt 复制到e:\test\dir.txt文件中。!****************实例3:复制文件************************* 例3: programmain_pro USE DFLIB implicit none integer,parameter::sta_num=123 character(5),dimension(sta_num)::sta_ID character(500)::filein,fileout character(5000)::cmd logical(4)::judge

integer::status,is open(1,file='山东.txt',status='old',action='read',iostat=status) read(1,*) do is=1,sta_num read(1,*) sta_ID(is) filein='Z:\data\降水逐小时数据-戴至修\precip_data\'//sta_ID(is)//'_precip.txt' open(2,file= filein,status='old',action='read',iostat=status) if(status/=0) goto 1000 fileout='Z:\data\降水逐小时数据-戴至修\山东省-降水数据\'//sta_ID(is)//'_precip.txt' cmd='copy '//filein//' '//fileout judge=SYSTEMQQ( cmd) 1000 continue enddo end program

矩阵求逆方法大全-1

求逆矩阵的若干方法和举例 苏红杏 广西民院计信学院00数本(二)班 [摘 要] 本文详细给出了求逆矩阵的若干方法并给出相应的例子,以供学习有关矩阵方面 的读者参考。 [关键词] 逆矩阵 初等矩阵 伴随矩阵 对角矩阵 矩阵分块 多项式等 引 言 在我们学习《高等代数》时,求一个矩阵的逆矩阵是一个令人十分头痛的问题。但是,在研究矩阵及在以后学习有关数学知识时,求逆矩阵又是一个必不可缺少的知识点。为此,我介绍下面几种求逆矩阵的方法,供大家参考。 定义: n 阶矩阵A 为可逆,如果存在n 阶矩阵B ,使得E BA AB ==,这里E 是n 阶单位矩阵,此时,B 就称为A 的逆矩阵,记为1-A ,即:1-=A B 方法 一. 初等变换法(加边法) 我们知道,n 阶矩阵A 为可逆的充分必要条件是它能表示成一系列初等矩阵的乘积A=m Q Q Q 21, 从而推出可逆矩阵可以经过一系列初等行变换化成单位矩阵。即,必有一系列初等矩阵 m Q Q Q 21使 E A Q Q Q m m =-11 (1) 则1-A =E A Q Q Q m m =-11 (2) 把A ,E 这两个n 阶矩阵凑在一起,做成一个n*2n 阶矩阵(A ,E ),按矩阵的分块乘法,(1)(2)可以合并写成 11Q Q Q m m -(A ,E )=(11Q Q Q m m -,A ,E Q Q Q m m 11 -)=(E ,1-A ) (3) 这样就可以求出矩阵A 的逆矩阵1-A 。 例 1 . 设A= ???? ? ??-012411210 求1-A 。 解:由(3)式初等行变换逐步得到: ????? ??-100012010411001210→ ????? ??-100012001210010411 →???? ? ??----123200124010112001→

(完整版)Fortran之COMMON语句

Fortran之COMMON语句 FORTRAN程序中各程序单位之间的数据交换可以通过虚实结合来实现,还可以通过建立公用区的方式来完成。公用区有两种,一种是无名公用区,任何一个程序中只可能有一个无名公用区;一种是有名公用区,一个程序中可以根据需要由程序员开辟任意多个有名公用区。建立无名和有名公用区都通过COMMON语句来进行。 按照结构化程序设计的指导思想,通常主张通过虚实结合的途径来传送数据而不主张使用公用区。因为前者使程序有较好的可读性,而且容易跟踪数据的流向,便于对程序进行调试和维护。但是虚实结合的传送方式速度较慢,特别是在各程序单位之间有大量的数据需要传送时速度问题就更为突出。不同程序单位利用公用区交换数据的速度却比虚实结合的方式传送速度快得多。所以在很多应用程序中如果各程序单位之间有大量数据需要传送时,程序员一般仍然采用开辟公用区的方式。 11.2.1 无名公用区 开辟无名公用区COMMON语句的一般形式如下: COMMON a1,a2,… 其中a1,a2,…允许是普通变量名、数组名和数组说明符(注意:不是数组元素),它们之间用逗号隔开。例如: 在主程序中写:COMMON X,Y,I,Z(3) 在子程序中写:COMMON A,B,J,T(3) 于是,在无名公用区中变量X和A,Y和B,I和J分别分配在同一个存储单元中,数组Z和T同占三个存储单元。占同一个存储单元的那些变量在不同的程序单位中,它们的名字不需要相同。

FORTRAN编译程序在编译时为COMMON语句开辟一个无名公用区,当把不同的程序单位连接在一起的时候,不同程序单位在COMMON语句中的变量按其在语句中出现的先后顺序占用无名公用区连续的存储单元,也就是说每个程序单位中的COMMON语句总是给出现在语句中的第一个变量分配在无名公用区的第一个存储区单元。 COMMON语句开辟公用区的主要用途就是使不同程序单位的变量之间 进行数据传送,另一种用途是用来节省存储空间。下面的例子通过公用区进行交换数据: PROGRAM MAIN COMMON Z1,Z2 READ(*,*)A1,A2,A3 CALL QUAD(A1,A2,A3) WRITE(*,*)Z1,Z2 END SUBROUTINE QUAD(A,B,C) COMMON X1,X2 . . . END 或者: PROGRAM MAIN COMMON Z1,Z2,A1,A2,A3 READ(*,*)A1,A2,A3 CALL QUAD() WRITE(*,*)Z1,Z2 END

自动删除30天前文件批处理方法

@echo off setlocal enabledelayedexpansion call:del30 "e:\admin" goto :eof :del30 call:getdate date call:date2day date pushd "%~1" if /i not "!cd!"=="%~f1" exit /b 1 for /f "delims=" %%i in ('dir /a:-d /b') do ( set "datei=%%~ti" call:getdate datei call:date2day datei set /a "date30=!date.num!-30" if !datei.num! lss !date30! del /f "%%i" ) exit /b 0 :date2day set /a "%~1.num=0" set /a "%~1.num+=(!%~1.y!-1)*365+(!%~1.y!-1)/4-(!%~1.y!-1)/100+(!%~1.y!-1)/400" set /a "d=28+^!(!%~1.y!%%4)-^!(!%~1.y!%%100)+^!(!%~1.y!%%400)" set /a "m=0" for %%i in (31 !d! 31 30 31 30 31 31 30 31 30 31) do ( set /a "m+=1" if !%~1.m! gtr !m! set /a "%~1.num+=%%i" ) set /a "%~1.num+=!%~1.d!" exit /b :getdate set "%~1.y=!%~1:~0,4!" set "%~1.m=!%~1:~5,2!" set "%~1.d=!%~1:~8,2!" set /a "%~1.y=10000!%~1.y!%%10000" set /a "%~1.m=10000!%~1.m!%%10000" set /a "%~1.d=10000!%~1.d!%%10000" exit /b 注:复制以上代码到TXT文档编辑为BA T即可。红色字体表示天数,蓝色为地址。 用ntbackup加Windows任务计划来实现自动删30天(30天为例,可根据实际情况更改)。方法跟用ntbackup加Windows任务计划来实现自动备份一样。

矩阵及逆矩阵的求法

矩阵的可逆性与逆矩阵的求法 目录 摘要 (1) 第1章.矩阵 (2) 1.1矩阵的定义 (2) 1.2矩阵的运算 (2) 第2章.矩阵的可逆性及逆矩阵 (5) 2.1矩阵的基本概念 (5) 2.2矩阵可逆的判断方法 (6) 2.3矩阵可逆性的求法 (10) 第3章.逆矩阵的拓展 (17) 3.1广义逆矩阵的引入 (17) 3.2广义逆矩阵的定义及存在 (17) 第4章.总结 (21) 参考文献 (22) 致谢 (23) 附件:论文英文简介

矩阵的可逆性与逆矩阵的求法 [摘要]:矩阵理论是现代代数学的重要分支理论之一,它也为现代科技及现代经济理论研究提供不可或缺的数学支持。在线性代数研究中引入矩阵的目的之一就是为了研究线性方程组B AX 求解及更一般的矩阵方程求解提供数学工具,其中矩阵的可逆性及逆矩阵的求法是最主要的内容。本文从矩阵的基本概念及运算入手,主要探讨和归纳矩阵可逆性的四种判定方法和求逆矩阵的五种方法,并引进Matlab这一数学软件求逆矩阵的程序,同时关注广义逆矩阵意义及求法。 [关键词]:矩阵可逆性逆矩阵广义逆求法

矩阵可逆性的判断和可逆矩阵的求法是矩阵理论学习的重点与难点,也是研究矩阵性质及运算中必不可少的一部分。本文在分析和归纳判断矩阵的可逆性和逆矩阵的求法,给出了四种判断矩阵可逆的方法,其中有初等矩阵的应用,有行列式的应用,还有向量的线性无关和线性方程组的应用。逆矩阵的求法给出了五种方法:分别是行变换、列变换、伴随矩阵、分块矩阵法以及Matlab 软件的解法,同时也讨论了广义逆矩阵的求法。对矩阵可逆性的判断与逆矩阵的求法将会给矩阵的学习带来很大的帮助。 第1章 矩 阵 1.1矩阵的定义 定义1 由st 个数ij c 排成一个s 行t 列的表 ???? ?? ? ??st s s t t c c c c c c c c c 2 1 2222111211 叫作一个s 行t 列(或t s ?)矩阵,ij c 叫作这个矩阵的元素。 定义2 矩阵的行(列)初等变换指的是对一个矩阵施行的下列变换: )(i 交换矩阵的两行(列); )(ii 用一个不等于零的数乘矩阵的某一行(列),即用一个不等于零的数乘矩阵的某一行(列)的元素; )(iii 用某一数乘矩阵的某一行(列)后加到另一行(列),即用某一数乘矩阵的某一行(列)的每一元素后加到另一行(列)的对应元素上。 矩阵的初等变换在线性方程组求解,求矩阵的秩及求矩阵的逆矩阵方面都有重要的作用。 1.2矩阵运算 定义1 数域F 的数a 与F 上一个n m ?矩阵)(ij a A =的乘积aA 指的是n m ?矩阵 )(ij aa ,求数与矩阵的乘积的运算叫作数与矩阵的乘法。 定义2 两个n m ?矩阵)(),(ij ij b B a A ==的和B A +指的是n m ?矩阵)(ij ij b a +,求两

差分码ASK信号抽样仿真

长沙理工大学 《通信原理》课程设计报告 李秉坤 学 院 城南学院 专 业 通信工程 班 级 通信1104 学 号 201185250429 学生姓名 李秉坤 指导教师 黄红兵 课程成绩 完成日期 2014年1月9日

课程设计成绩评定 学院城南学院专业通信工程 班级通信1104 学号20118525042 学生姓名李秉坤指导教师黄红兵 课程成绩完成日期2014年1月9日指导教师对学生在课程设计中的评价 指导教师对课程设计的评定意见

课程设计任务书 城南学院通信工程专业

差分码ASK信号PAM调制仿真 学生姓名:李秉坤指导老师:黄红兵 摘要本课程设计主要用matlab/Simulink平台仿真一个差分码ASK信号抽样仿真系统,利用图形输入法设计相关电路,用示波器和频谱模块分析系统性能。首先根据原理画出图形,构建调制解调电路,在Simulink中调出各模块组成电路,设置调制解调电路各模块的参数值并运行,把运行仿真结果输入显示器,根据显示结果分析所设计的系统性能。通过波形分析,达到仿真的目的。 关键词抽样仿真;差分码;Matlab/Simulink 1 引言 MATLAB的名称源自Matrix Laboratory,它是一种科学计算软件,专门以矩阵的形式处理数据[1]。MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作。本课程设计主要用matlab中的Simulink平台仿真一个差分码ASK信号抽样仿真系统分别在理想信道和非理想信道中运行,并把运行仿真结果输入显示器,根据显示结果分析所设计的系统性能。 1.1 课程设计目的 通信原理课程设计是《通信原理》理论课程的辅助实践环节。着重体现学生对通信原理教学知识的应用,培养学生理论与实际工程相结合的能力。以小课题的方式来加深、扩展通信原理知识[3]。通过设计差分码ASK信号抽样仿真系统,并使其在不同的噪声信道中运行,让学生进一步理解通信系统的基本组成、模拟通信和数字通信的基础理论、通信系统发射端信号的形成原理、通信系统信号传输质量的检测等方面的相关知识,并学会运用这些知识。 1.2 课程设计的步骤 学习MATLAB的基本知识,熟悉MATLAB集成环境下的Simulink仿真平台。 利用通信原理中所学到的相关知识,在Simulink仿真平台中设计差分码ASK信号

Fortran进行批处理地方法

Fortran中批量处理文件的方法总结 —循环读取目录下的所有符合条件的文件===================== 一、简单的介绍 在一年之前,我写过一个程序,主要是对Micaps资料进行批量处理,将逐日资料处理为旬、月的数据,在那个程序中,始终有一个问题困扰我,就是如何自动生成该读取的下一个文件名,这使我真正开始关注fortran中的批处理,时隔一年,决定写下这些文字,将我用到的一些fortran批处理的方法和大家共享,交流。 对于那些只要会用程序,不求其中原理的朋友,请马上跳过这些文字,直接去下载附件吧!程序里有使用说明,但是,如果你不懂原理,估计现成的程序你使用起来也会碰壁哦! 这里所说的批处理是指对某一个目录下的指定后缀的文件的批量读取和处理。 我总结的批处理方法大概可以用下面这个示意图来说明: | | |将文件目录写入一个文本文件,供fortran循环读取 |————手动输入文件名 |————运行程序之前命令行工具导出文件名 |————程序运行后,未开始计算之前,生成文件名 | ————调用CMD命令生成 | ————GETFILEINFOQQ方法生成 | ————调用WIN32API生成 | |在程序运行时动态生成文件名 | | 对于第一种方法,我将主要介绍如何将目录写入文件,然后举出一个小的示例来验证。第二种方法主要是说明其思路。 二、方法的介绍 1、将文件目录写入一个文本文件,供fortran循环读取 1.1、手动输入文件名 这是最基本的方法啦,如果文件个数不多,而且文件名中包含了空格等特殊字符的话,建议使用这种方法,在这里就不多说啦,至于在fortran中的处理,等几个小方法介绍完之后会有一个例子来说明。

利用.bat(批处理)来删除KEIL编译生成的无用文件

利用.bat(批处理)来删除KEIL编译生成的无用文件 新建一个.txt文件. 在里面输入如下内容: del *.bak /s del *.ddk /s del *.edk /s del *.lst /s del *.lnp /s del *.mpf /s del *.mpj /s del *.obj /s del *.omf /s ::del *.opt /s ::不允许删除JLINK的设置 del *.plg /s del *.rpt /s del *.tmp /s del *.__i /s del *.crf /s del *.o /s del *.d /s del *.axf /s del *.tra /s del *.dep /s del JLinkLog.txt /s del *.iex /s del *.htm /s del *.sct /s del *.map /s exit 然后,关闭.txt文件,同时把后缀名改为.bat.然后再把这个.bat文件拷贝到我们一个例程的主文件夹下.如下图所示(我的被命名为keilkill.bat):

然后我们打开user里面的工程,编译一次.可以看到N多垃圾文件(250个,总大小近20M),如下图所示:

然后我们在上一级目录点击keilkill.bat.会看到弹出一个DOS对话框,然后一闪就没了.再打开USER文件夹,看看里面.如下图所示:

此时发现刚刚的很多文件都被kill掉了,此时只剩下几个有用的文件了.总大小为232KB,比之前少了很多. 现在,你再把这个文件夹打包,发给别人,能节省不少流量.也能节约你硬盘的空间. 现在发现.bat的神奇了吧? 大家可以根据自己的需要,用文本工具打开.bat文件,在里面增加或者删除一些语句,来适合自己.当然前提是你对.bat要有一点点理解才可以. 具体的学习,这里有个参考,大家可以看看. 灵活的利用bat来帮我们做事,可以省去很多重复劳动.大家有时间多学学吧,我也是昨晚看了一下,觉得很不错,在这里介绍给大家.

相关主题
文本预览
相关文档 最新文档