IDL入门教程一Word文档.docx
- 文档编号:14528692
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:26
- 大小:32.29KB
IDL入门教程一Word文档.docx
《IDL入门教程一Word文档.docx》由会员分享,可在线阅读,更多相关《IDL入门教程一Word文档.docx(26页珍藏版)》请在冰点文库上搜索。
IDL入门教程一Word文档
第一章起步篇
本章概述
本章意在解释写这本书的目的,通过阅读本书能学到什么,以及为读者提供一些能使读者更方便地使用本书中IDL编程例子的信息。
将学会如下几点:
1.本书是如何组织的。
2.怎样使用本书。
3.如何下载和组织随本书附带的文件。
4.如何使用IDL的变量,关键字和命令。
5.如何创建和运行IDL的矢量和数组。
6.如何使用IDL的图形窗口。
书写本书的背景
本书是在多年来教科学家和工程师使用和操作IDL(InteractiveDataLanguage)的基础上创作的,而且教学的绝大部分时间是为IDL的开发者ResearchSystems公司工作。
当笔者在回答一个又一个问题之后,笔者意识到多数问题属于一些同类问题。
事实是,多数人想用IDL做许多同样的事情。
想做的是分析和演示数据,写出高效率的程序来解决科学问题,并且最主要的是快速做完工作。
多数人并不想做的事情是阅读计算机软件教科书。
IDL是一套大型软件并且在不但壮大。
随之而来的是大量的文档资料,笔者知道没有人愿意去读这些资料。
如果让某人独自开始学习IDL的奥秘,IDL将是件可怕的事情,甚至对有经验的用户来说也是一样。
本书意在使读者掌握IDL,教给读者在日常运行IDL所必需知识的80%。
更为重要的是,本书的例子使IDL更容易理解。
无论如何,本书将演示如何使用IDL。
本书的读者是IDL初学者,特别是哪些不得不自学IDL的读者。
学好IDL需要很长的阶段。
多数人不能利用工作中的时间学习IDL,笔者想写一本能满足这两类人学习IDL的书。
总之,本书为不喜欢读教科书并能通过例子学得最好的人全面介绍IDL的精髓。
本书在IDL编程技术和技巧方面只做了简要概略,而这些技术只能通过练习获取。
最根本的是,这是一本笔者在学习IDL时所期望的书。
运用本书
笔者曾试图使本书每章能具有独立性,这样能拿起本书就可翻到任何一章去学习最需要的知识。
但在安排章节时,或多或少是根据笔者在IDL教学时的顺序安排。
如果刚开始学IDL,那么按照书中的顺序从头开始学完本书将更合理。
书中后面的几章编程教程是建立在前面几章中讲过的概念和技巧的基础上的。
IDL所需的版本
希望读者在学习本书时使用的是最新的IDL版本。
本书写作时使用的是IDL5.2版。
使用较早版本可以使用本书中编程例子的大部分,但笔者没有试图使本书中的例子程序与较早的IDL软件版本兼容。
特别是,较早版本的用户在使用长文件名(如果在Windows环境下)、指针(必须用句柄代替它)以及方括号来引用数组下标时(必须用圆括号代替它)时存在困难。
如果需要升级软件,可以在ResearchSystems公司的WWW网址Systems公司和当地IDL代理商的信息,包括如何升级软件的信息。
IDL运行期间所需颜色的数量
书中程序例子是按IDL在256种颜色模式下运行编写的,使用通常称为索引颜色的模式(详细细节参考83页的“使用IDL的颜色”章节)。
这意味着所显示的颜色是索引号或是与色彩表相连的颜色,这样在色彩表中的颜色变化时,所显示的颜色也一同变化。
启动IDL并在IDL命令行键入如下IDL命令,能发现所用的颜色模式。
IDL>Window
IDL>Print,!
D.N_Colors
当!
D.N_Colors的值大于或等于256时,仍然能够使用书本中的例子,但必需对代码做一点改变。
大多数人使用的颜色值都小于256。
比较典型的颜色值介于200与245之间。
笔者推测在本书中至少要用150种颜色。
那就是说,!
D.N_Colors的值应在150至256之间。
少于150种颜色会怎样?
如果在IDL运行中少于150种颜色,并且计算机运行在公用桌面环境(CDE),可以将CDE环境下的颜色数设置为不是“高”的那种。
设置为“中”或“低”的情况下,程序将运行良好。
在视窗环境操作手册的在线帮助中查找如何改变这个设置。
如果不是用的共用桌面环境,颜色数也少于150,并且不是在PC机或Macintosh计算机上运行IDL的话,那么很可能运行了其它应用程序,该应用程序使用了要分配给IDL的颜色值。
网页浏览器很可能就是这样的应用程序。
退出当前任务,重新登录,并在重新登录后最先启动IDL。
键入以上命令,如果仍然得到少于150种的颜色,那么需要联系ResearchSystems公司的技术人员,以获取更多的帮助。
如果颜色数少于150种,并且是在PC或Macintosh计算机上运行的IDL,那么,检查显卡以确保设置为256色。
一般可通过显示器的控制面板完成。
详细细节参考计算机文档资料。
多于256种颜色将会怎么样呢?
如果在IDL运行中多于256种颜色,并且IDL是运行在XWindow环境下的计算机上,就可让IDL使用8位的伪彩色显示级别。
退出IDL,并重新启动IDL。
在做任何操作之前,键入以下命令:
IDL>Device,Pseudo_Color=8.Decomposed=0
为了确认是在使用8位伪彩色显示级别,键入:
IDL>Help,/Device
所显示的信息使读者确信使用的是伪彩色显示级别,并且所使用的颜色数为256或少于256。
如果想使用本书中的例子,每次进入IDL时都需要键入DEVICE命令。
可以将此命令放在IDL启动文件中。
查看IDL文档资料以获取更多的详细资料。
如果在IDL运行中多于256种颜色,并且是在PC或Macintosh计算机上运行IDL,需要检查显示卡的设置参数以确保设置为256色。
一般通过显示器或显示面板完成。
详细细节参考计算机文档资料。
修改参数后必须重新启动IDL。
如果喜欢在16位或24位的颜色模式(在Macintosh和PC计算机上只支持16位,而且如果是24位也将作为16位处理)中工作,那么键入以下命令以确保颜色分解已被关闭:
IDL>Device,Get_Visual_Depth=thisDepth
IDL>IFthisDepthGT8THENDevice,Decomposed=0
如果在这种模式下对颜色表做些修改,记住这些修改不会在显示窗口中立即更新。
必须在显示窗口中刷新图形以查看这些颜色改变是否起作用。
详细细节参考83页的“IDL的颜色运用”章节。
创建IDL的启动文件
记住,每次启动IDL来使用本书的命令时,都必须执行以上命令。
为此,可以将这些命令输入IDL的启动文件中。
当每次IDL启动时,启动文件中的命令都被执行,这就像在IDL命令提示符下键入这些命令。
为了解如何在使用的计算机中创建IDL开始文件,可在IDL命令行键入以下命令,以获取在线帮助:
IDL>?
Startup
本书的风格习惯
笔者尽量用统一的风格贯穿全书,这样不会被本书文字的功能和目的所迷惑。
首先,在IDL命令行或IDL编辑器窗口所键入的命令总是以Courier字体形式来书写:
Surface,data
在IDL命令行键入的命令都显示在IDL提示符“IDL>”的后面:
IDL>Surface,data
其它的IDL命令都是在文本编辑窗口键入的。
可以选择自己的文本编辑器或使用IDL提供的文本编辑器,这由读者决定。
大写
在本书中,用大写这种形式来书写IDL命令。
这种形式完全是任意的。
IDL对字母的大小写不敏感,但与操作系统打交道的命令(例如:
UNIX操作系统对IDL所打开的文件名的大小写敏感)和执行字符串比较命令时除外。
大写可以有助于记住命令和关键字名,并且一目了然地知道命令行中哪些单词是函数名。
所有IDL命令和关键字的第一个字母大写。
此外,任何有助于记忆的字母也用大写。
例如:
Surface,data,charsize=2.0,Color=180
XLoadCT
Widget_Control,tlb,Set_UValue=info,/No_Copy
变量名的第一个字母没有用大写字母,但是当变量名中的字母有可能构成单词时使用大写。
例如:
data=FIndGen(11)
buttonValue=thisValue
ptrToData=Ptr_New()
IDL的保留字全部用大写字母,例如:
REPEATtestUNTIL
FORj=0,10DOBEGIN
ENDWHILE
在IDL命令行或文本编辑器上,当键入命令时,可以随意使用大写字母。
注释
在IDL命令中,分号右边的任何文本都被视为是注释,IDL解释器将忽略它。
简言之,可在IDL的程序中写入注释。
通常在分号的前后加上空格,并让注释行缩进三个空格。
例如:
;Thisisthelooppartoftheprogram.
FORj=0,10DOBEGIN
data=j*2
count=count+j
ENDFOR
偶尔,会在命令行的末端看到一个注释,这是在定义IDL结构变量的字段时,特别这样做的。
例如:
info={r:
r,$;Theredcolorvector
g:
g,$;Thegreencolorvector
b:
b,};Thebluecolorvector
续行符
IDL中的续行符是美元的符号“$”。
这表示IDL命令延续到下一命令行(见上例)。
在本书中将看到很多续行符。
建议在IDL命令行中不使用续行符,应该在IDL命令行行输入完整的IDL命令。
IDL命令行将忽略续行符。
例如,可以用如下方法键入上述命令:
IDL>info={r:
r,g:
g,b:
b}
在出现输入错误或在以后需修改命令时,这将使得重新键入这些命令变得更加简单。
有时需要完全按照书中出现的IDL命令输入。
笔者将告知什么情况下这样做。
当在IDL命令行想键入For循环时就需要这样做。
在命令行中一次键入多行命令是非常聪明的做法。
必须让IDL解释器认为这些命令为一个命令。
这就需要在IDL的命令行上正确使用行续符($)和多行命令符(&)。
本书中所用的IDL程序和数据文件
当使用这本书时,许多IDL程序和数据文件已经准备就绪。
IDL程序文件经常有一个.pro扩展名,数据文件有一个.dat扩展名。
还有一些.txt扩展名的文件。
这些是文本文件。
安装程序和数据文件
建议创建一个名为coyote的子目录,并把所有的程序,文本,数据文件都放在其中。
coyote子目录通常是IDL目录下的一个子目录(让IDL内部的系统变量!
Dir指向这个目录),当然它并非一定要在这个目录下,可以在任何地方创建。
IDL主目录是另外一个存放这些文件的好地方。
当需要这些文件时,不直接在coyote子目录下修改,而是将这些文件拷贝到当前工作目录下是一个好注意。
这样就保留了原始的没有修改的文件。
如果没有选择创建一个coyote子目录,那么就将本书提供的程序将默认这些文件已经放在当前目录中。
这个目录是一个启动IDL时的目录,或者是在PC或Macintosh计算机上IDL的Preferences对话框中Startup所指定的目录。
获取IDL的主目录和当前目录
如果不知道IDL的主目录是什么。
启动IDL,键入以下命令:
IDL>CD,Current=homeDirectory
IDL>Print,homeDirectory
当前目录不一定是主目录。
在IDL运行期间,可以用同样的命令随时获得当前目录:
IDL>CD,Current=currentDirectory
IDL>Print,currentDirectory
注意,如果按上述做法装载数据文件时遇到问题,请确保是在所希望的目录下。
不用IDL主目录(例如:
5.2Windows版的IDL软件中,IDL5.2就是IDL的主目录)作为工作目录可能会是一个好注意,因为这样很容易删除重要文件。
下载本书所用的程序和数据文件
书中文件可以通过互联网以匿名FTP登录下载。
如果在使用网络浏览器,进入Coyote'sGuidetoIDLProgramming热连接,网址是:
如果用匿名ftp,文件可以通过网络浏览器在如下网址找到:
ftp:
//
用文本或ASCII模式下载所有的程序和文本文件(例如:
那些带.pro或.txt扩展名的文件),用BINARY模式下载所有的数据文件(例如:
那些带.dat扩展名的文件)。
如果愿意,并且电脑能解压缩zip文件,下载coyotefiles.zip文件就可一次性地将所有的程序、文本文件和数据拷贝下来。
确保Coyote目录在IDL的搜索路径内
无论在什么地方创建coyote目录或储存本书的文件,需要确保这个目录在IDL搜索路径中。
在IDL中,路径用!
path系统变量给出。
以后将学到更多关于该系统变量的作用,但现在只要知道它是一系列的子目录,当IDL遇到不认识的命令时就这些子目录查找相应的命令。
打印该系统变量可以看到当前的IDL搜索路径:
IDL>Print,!
path
如果使用的是PC机,这些子目录用分号隔开;在Macintosh或VMS机器上,它们用逗号隔开;在UNIX机器上,它们用冒号隔开。
想在IDL搜索路径中添加coyote目录,当IDL的当前目录在coyote目录下时键入AddPath命令即可(如果没有创建coyote目录,可以将IDL的当前路径改变为存放本书文件的目录名,然后键入AddPath命令)。
使用CD命令来转换到IDL的当前的目录。
例如,如果coyote目录是IDL主目录下的一个子目录,并且这个主目录是当前目录,可以键入如下命令来在IDL的搜索路径中添加coyote目录:
IDL>CD,'coyote'
IDL>AddPath
如果每次运行IDL时都想进入coyote目录(或本书文件所在的目录)并且运行AddPath程序,也许会想到将该命令添加到IDL启动文件中(详细细节参考第四页的“创建IDL的启动文件”)。
或者,想将coyote目录永久性地添加到IDL的搜索路径中。
(这取决于使用的操作系统和IDL的配置文件。
关于设置!
Path系统变量,可参考IDL的在线帮助)
拷贝数据文件
如果愿意,可从计算机上其它地方拷贝本书所用到的IDL数据文件,不必通过匿名的ftp来下载。
为此,可使用CopyData命令,这个命令是刚下载的文件之一。
进入coyote目录(或书中文件所在的目录),如果使用的是IDL5版,只需键入CopyData:
IDL>CopyData
如果运行的是IDL更早的版本,将通过Demo关键字为CopyData程序提供IDL的演示目录(演示目录名在IDL先前版本中各不相同,而且不一定被安装)。
如在PC机上演示目录经常命名为“C:
\RSI\IDLDEMO4”。
所以应该键入如下命令:
IDL>CopyData,Demo="C:
\RSI\IDLDEMO4"
数据文件将从不同的地方被选出并拷贝到当前目录上。
本书附有这些数据文件的一个列表,说明了它们的类型和大小。
见313页的“附录B:
数据文件描述”。
获取更多的帮助
当在安装这些程序文件或在IDL编程的其它方面需要帮助时,查看Coyote'sGuidetoIDLProgamming网页。
将找到关于本书和IDL常规编程的信息。
如果情况更糟的话,也可以在那里看到一张表格,通过该表格可以直接和笔者联系。
Fanning软件顾问和Coyote'sGuidetoIDLProgramming的网址为:
使用IDL命令
本书是一本实践性很强的书。
当阅读它时,笔者宁愿读者坐在电脑前,也不愿读者坐在火炉前。
笔者希望读者键入命令并查看发生了什么。
为此,本书前半部分的多数命令需要在IDL命令行上键入(如果想保存所键入的命令,可以创建一个日志文件来记下它们。
参考第11页的“创建日志命令”)。
随着IDL5.0的问世,IDL慢慢地变得越来越像程序语言。
例如,对象图形引擎并不真正地用来在IDL命令行上使用的,而是专门设计用在IDL编程中。
但是从命令行键入IDL命令中能学到很多东西。
特别是,能学会画出某些东西,测试一些东西,并可用数据文件做实验。
称之为“循序渐进”。
这是学习IDL的最好方法之一。
下面是刚开始所必需知道的。
首先,将看到本书中的许多类似下面的命令:
Contour,peak,lon,lat,XStyle=1,YStyle=1,/Follow,$
Levels=vals,C_Label=[1,0,1,0,0,1,1,0]
如果知道所看到的东西是什么将非常有助于学习。
IDL命令解析
在上面的命令中,单词Contour是IDL命令或所希望运行程序的名字。
它必须被完整地拼出。
一些命令会很长,但不能缩写。
命令行中peak,lon,以及lat是变量。
它们可以用来将信息传入或传出命令或程序。
XStyle,YStyle,Follow,Levels以及C_Lables为关键字。
一般来将关键字对命令来说可选的。
如同变量,它们用来将信息传入或传出IDL命令或IDL程序。
定位参数
在以上命令中的三个变量peak,lon,及lat称为定位参数。
在这个特殊例子中,这些定位参数为输入变量(例如,它们把数据传入命令),但仅仅看到她们并不能辨认出其是不是输入变量。
它们也可以简单地用作输出变量(或者,在某种情况下,它们既可以是输入变量也可以是输出变量)。
其命令行语法完全一样。
只有通过上下文,通过阅读关于这类命令或程序的公开文档才能辨别。
一个定位参数在命令名的右边有其确定的顺序。
(注意,以下讨论的关键字参数不会影响定位参数的顺序)。
在这个例子中,peak变量必须在Contour命令右边,在lon变量的左边。
lon变量必须在peak变量的右边,lat变量的左边。
不能遗漏第二个参数,只给定第一和第三个定位参数。
例如,下面这两条命令的格式是不正确的并会导致错误。
第一条命令的定位参数顺序被改变,第二条命令遗漏了第二个定位参数。
Contour,lon,peak,lat,XStyle=1,YStyle=1,/Follow,$
Levels=vals,C_Labels=[1,0,1,0,0,1,1,0]
Contour,peak,,lat,XStyle=1,YStyle=1,/Follow,$
Levels=vals,C_Labels=[1,0,1,0,0,1,1,0]
一般情况下,命令的定位参数必须给定参数,但并不总是如此。
例如,在上面正确的命令中,peak是Contour命令必需的参数,但是lon和lat是可选定位参数。
关键字参数
XStyle,YStyle,Follow,Level和C_Labels都是关键字参数。
与定位参数不同,关键字参数能任何顺序出现在命令名右边。
它们甚至能出现在定位参数中间而不影响定位参数之间的相对位置。
换句话说,关键字参数不能像定位参数那样对待。
以下的Contour命令是个有效构造。
Contour,peak,Level=vals,lon,XStyle=1,YStyle=1,$
/Follow,lat,C_Lavels=[1,0,1,0,0,1,1,0]
一般情况下,关键字参数是可选参数。
像定位参数一样,它们也能成为命令的输入变量或输出变量。
将通过本书或阅读命令的文档得知这一点。
注意在上列命令中关键字的使用方法。
关键字能设置为一个特定值(例如,XStyle=1),一个变量(例如,Levels=vals),一个数组(例如,C_Labels=[1,0,1,0,0,1,1,0]),甚至可以用一个斜杠字符来设定(例如,/Follow)。
注意最后的一条语法。
有些关键字有二进制特性。
换句话说,它们要么on/off,yes/no,true/false,1/0,等等。
能经常发现这些关键字通过/Keyword这种语法来设置或打开。
语法/Keyword等同于语法Keyword=1。
事实上,以上Contour命令能被写成这样:
Contour,peak,Levels=vals,lon,/XStyle,/YStyle,$
/Follow,lat,C_Lavels=[1,0,1,0,0,1,1,0]
这个命令和上面的命令是一回事。
命令不能写成这样的原因是,它可能错误地暗示了X轴和Y轴关键字有二进制特性,但它们不是,它们能被设置为除0和1以外的其它值。
IDL过程和函数
这个特殊的命令Contour是一个IDL过程。
IDL命令要么是过程,像这个命令一样,要么是函数。
如下的IDL命令BytScl就是一个函数:
scaled=BytScl(image,Top=199,Min=0,Max=maxValue)
注意Contour过程和BytScl函数的不同。
首先,在函数命令中,定位参数和关键字放在一对圆括号中的。
在过程命令中,参数和关键字仅排列在一个命令行上。
但是,最重要的区别是函数命令显示地返回一个值,等号左边的一个变量用于返回该值。
这是IDL中函数命令和过程命令根本的区别。
函数命令总是显示地返回一个值,这个数值必须赋予给一个变量。
函数返回值可能是任一种IDL变量,包括数值,数组和结构。
在这个例子中,返回值scaled是一个与image定位参数具有相同维数的字节型数组。
有时将看到一个函数和过程写在一起,例如,考虑一下这两个命令:
scaled=BytScl(image,Top=199,Min=0,Max=maxValue)
TV,scaled
第一个命令是一个函数命令,另一个是过程命令,此过程使用函数的返回值作为其定位参数,两个命令写成如下这样在IDL中很常见:
TV,BytScl(image,Top=199,Min=0,Max=maxValue)
在这种情况下,BytScl命令首先被执行并得到一个返回值,此返回值作为TV命令的定位参数。
花一些时间熟悉各种IDL命令,就能立即识别哪个是过程,哪个是函数,但尽量记住这一点:
当正在从一个命令中寻找某个值时,要想到这个命令可能是一个函数。
在本书后面中将学会怎样写IDL过程和函数。
用IDL命令帮助
IDL有全面的在线帮助系统,能为读者提供有关IDL命令和参数的非常有帮助的信息。
通过在IDL命令行中输入一个问号,或在IDL开发环境下拉菜单中选择Help菜单项目获得在线帮助。
IDL文档集中的大部份信息都可通过在线帮助获得。
为了获得IDL在线系统帮助,仅仅需要在IDL的命令行中输入一个问号,如下:
IDL>?
创建命令日志
也许希望将在命令行里面输入的命令保存为日志或记录。
如果是这样,可创建一个日志文件。
日志文件是一个IDL批处理文件(参考205页的“创建IDL批处理文件”)。
在IDL中用Journal命令打开一个日志文件,并指定想打开的文件名。
该文件将是一个用于写信息的新文件。
从IDL命令行不能添加日志文件。
例如,为了写一个命名为book_commands.pro的日志文件,键入:
IDL>Journal,'book_commands'
随后所有在IDL命令行上键入的命令都将写入这个日志文件。
IDL>a=[3,5,7,3,6,9]
IDL>Help,a
IDL>Plot,a
当想关闭日志文件时,再次在IDL命令行键入Journal命令,如下:
IDL>Journal
日志文件是能编辑的一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IDL 入门教程 Word 文档