数学工具版FAQ - 数学工具(MathTools)版 - 北大未名BBS

数学工具版FAQ

[复制链接] 浏览该主题帖

lwolf [离线]

DSEC@SMS03|Mc L. Wolf

该用户不存在
<ASCIIArt> 置顶 #3

声明:本FAQ的许多内容来自FangQ著名的Mathtools FAQ,他的原文请参见

  http://bbs.dartmouth.edu/~fangq/MATH/FAQ/

本文是在上面的FAQ的基础上,以及版上常见的问题整理而成。由于Math-

Tools版的问题常常具有大量的重复性,很容易导致大量的重复劳动(事实

上,最近jpg转eps的问题便是这个FAQ最直接的动因)。这个FAQ便是为

了尽量防止这种重复劳动,并使提问者能尽快获得问题的答案而设立的。初

次设FAQ,以及个人水平所限,总有许多遗漏之处,希望今后的MathTools版

务们将其整理得更加方便、实用:)




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

                   目   录

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


第一章、一般问题



1).数学软件的主要分类有哪些?各有什么特点?


2).什么叫拟合?什么叫插值?二者的区别是什么?


3).如何生成任意分布的随机变量?


4).我有一组x,y,z值,非规则点阵,如何绘制曲面或者等高线或者插值?


5).请简要介绍一下作图软件?


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


第二章、LaTeX



1).为什么我的jpg图不能插入LaTeX文件中?


2).我只会产生jpg,bmp图,怎么产生eps图?


3).我用了Photoshop转EPS图,但EPS插图为什么显示"No Bounding Box"?


4).如果一定要插jpg图,还显示"No Bounding Box"怎么办?


5).为什么我的图形/表格乱跑?


6).我是新手,怎么学Latex?


7).我的表格特别长怎么办?


8).怎么引用公式、图、表?


9).怎么引用参考文献?


10).我想让参考文献的引用时出现在文字的右上角,怎么办?


11).怎么使用列表/枚举?


12). LaTeX如何修改行间距


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


第三章、Matlab



1).如何在给定句柄的axis里绘图?


2). 在Matlab中如何求最值点?如何求一维数组的极值?


3).Matlab中如何作线性拟合/线性回归/多元线性回归?


4) Matlab中如何作二维数据的插值?


5).Matlab中如何绘制三维数据阵?


6).Matlab中如何计算程序运行的时间?


7).Matlab中为什么只能在小数点后显示四位?


8). Matlab如何在命令窗口按照格式输出?


9).如何在Matlab中画隐函数曲线?


10).Matlab中什么函数可以删除矩阵的某一行或列?


11).如何得到contour线上的坐标点?


12).Matlab有没有求矩阵行数/列数/维数的函数?


13).Matlab中如何中断运算?


14).在Matlab中debug的时候能否跟踪变量?


15).为什么我的Matlab程序这么慢?


16). Matlab中如何作非线性回归?


17).Matlab中,函数里面怎样使用基本工作空间中的变量?为什么inline函数不

  能使用外面的变量?


18).请推荐一下Matlab的教材?


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


第四章、Mathematica



1).Mathematica 可以定义变量为实数么?


2).Mathematica中如何中断运算?


3).Mathematica中如何对离散点作积分?


4).请推荐Mathematica参考书 


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


第五章、高级编程语言(C,C++,FORTRAN)



1).如何在Visual Fortran中画图?


2).如何在Visual Fortran中使用LAPACK?   


3).如何在各种平台上编译含有Lapack的Fortran程序?



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






        

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

                        正      文

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





第一章、一般问题


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


1)  数学软件的主要分类有哪些?各有什么特点?


        数学软件从功能上分类可以分为通用数学软件包和专业数学软件包,

        通用数学包功能比较完备,包括各种数学、数值计算、丰富的数学函

        数、特殊函数、绘图函数、用户图形届面交互功能,与其他软件和语

        言的接口及庞大的外挂函数库机制(工具箱)。常见的通用数学软件包

        包括Matlab和Mathematica和Maple,其中Matlab以数值计算见

        长,Mathematica和Maple以符号运算、公式推导见长。


        专用数学包包括绘图软件类(MathCAD,Tecplot,IDL,Surfer,Origin, 

        SmartDraw,DSP2000),数值计算类:(Matcom, IDL,

        DataFit,S-Spline,Lindo,Lingo,O-Matrix,Scilab,Octave), 数值计算

        库(linpack/lapack/BLAS/GERMS/IMSL/CXML), 有限元计算类(ANSYS, 

        MARC,PARSTRAN, FLUENT, FEMLAB,FlexPDE,Algor,COSMOS, 

        ABAQUS,ADINA),计算化学(Gaussian98,Spartan,ADF2000,ChemOffice),

        数理统计类(GAUSS,SPSS,SAS, Splus,statistica,minitab), 数学公式

        排版类(MathType,MikTeX,Scientific Workplace,Scientific Nootbook)


        上述分类比较笼统,很多软件的功能也有交叉,经验和篇幅限制,不

        能逐一而论。


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


2).什么叫拟合?什么叫插值?二者的区别是什么?


        插值和拟合都是函数逼近或者数值逼近的重要组成部分


        他们的共同点都是通过已知一些离散点集M上的约束,求取一个定义

        在连续集合S(M包含于S)的未知连续函数,从而达到获取整体规律的

        目的,即通过"窥几斑"来达到"知全豹"。


        简单的讲,所谓拟合是指已知某函数的若干离散函数值{f1,f2,…,fn},通

        过调整该函数中若干待定系数f(λ1, λ2,…,λ3), 使得该函数与已知点集的

        差别(最小二乘意义)最小。如果待定函数是线性,就叫线性拟合或者

        线性回归(主要在统计中),否则叫作非线性拟合或者非线性回归。表

        达式也可以是分段函数,这种情况下叫作样条拟合。



        而插值是指已知某函数的在若干离散点上的函数值或者导数信息,通

        过求解该函数中待定形式的插值函数以及待定系数,使得该函数在给

        定离散点上满足约束。插值函数又叫作基函数,如果该基函数定义在

        整个定义域上,叫作全域基,否则叫作分域基。如果约束条件中只有

        函数值的约束,叫作Lagrange插值,否则叫作Hermite插值。


        从几何意义上将,拟合是给定了空间中的一些点,找到一个已知形式

        未知参数的连续曲面来最大限度地逼近这些点;而插值是找到一个(

        或几个分片光滑的)连续曲面来穿过这些点。


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


3) 如何生成任意分布的随机变量?



        首先要生成一个平均分布的伪随机数a

        最简单的一种算法是同余法:

        y(n+1)=a*y(n) mod M

        其中(M, a) 常见的一组取值为(2^31-1= 2147483647, 7^5=16807),可以

        生成[0~M-1]上的随机数,通过线性变换可以得到0~1上的均匀随机数


        如果你需要产生概率分布函数(PDF)为f(x)的一维随机变量,首先计算

        它的概率累积函数(PCF) F(x)=Integrate[f(t),{t,0,x}],则F^-1(y)

        既为所需要的随机变量。其中F^-1为PCF的反函数,y为一个[0~1]上的

        平均分布随机变量。对于复杂的PDF无法求解反函数的,可以在资料上

        查找"变换抽样法"。


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


4) 我有一组x,y,z值,非规则点阵,如何绘制曲面或者等高线或者插值?


        1.如果你使用matlab,有如下四种解决办法

          1.1: 

                         tri=delaunay(x,y);

                         trimesh(tri,x,y,z); or trisurf(tri,x,y,z);

          1.2: 如果你想得到更加精细和光滑的曲线,而且想绘制coutour

                   则需要用griddata()插值:

                         [xi,yi]=meshgrid(min(x):dx:max(x),min(y):dy:max(y));

                         [xi,yi,zi]=griddata(x,y,z,xi,yi,'cubic');

                         contourf(xi,yi,zi,20);

          1.3: 如果你的matlab安装有PDE Toolbox,可以使用pdeplot(),参见帮助

          1.4: 如果你可以连接国外,可以使用MIT的Kirill K. Pankratov写的SaGA

               工具箱,下载地址在:

        http://www.ai-geostats.org/software/Geostats_software/SAGA.htm

        http://globec.whoi.edu/software/saga/


        2.如果你使用Tecplot


          1.先将三列数据按照顺序保存在一个文本文件中

                data.dat文件格式为

                 x1 y1 z1

                 x2 y2 z2

                 ...

          2. Tecplot菜单File\Load Data file,在左上角选择2D

          3. 选中zone,菜单Data\Triangulate

          4. 双击该zone,将mesh掩藏掉,把contour打开,然后在

                 左上角选择3D

          5. 如果想插值,先创建一个更细的网格,然后用data菜单中

                     Interpolation


        3.如果你使用Mathematica


          data={{x1,y1,z1},{x2,y2,z2},......};

          fun=Interpolation[data];

          Plot3D[fun[x,y],{x,xmin,xmax},{y,ymin,ymax}];

          ContourPlot[fun[x,y],{x,xmin,xmax},{y,ymin,ymax}];


        当然,其他还有很多绘图工具,有待补充


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


5). 请简要介绍一下作图软件?


        很多软件都有画图的功能,大杂烩的比如matlab,mathematica,专业的

        如tecplot,opendx,origin等等。


        如果要细分的话,一维基本都还可以,matlab完全可以应付。

        比较专业的二维图tecplot也很不错,不过收费。

        三维的则专业分化更强,对比较专业的科学工程计算用户来说opendx是比较好的

选择,

        tecplot当然也不错,matlab功能就稍稍欠一点了。

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




第二章、LaTeX


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


1).为什么我的jpg图不能插入LaTeX文件中?


        如果产生dvi文件,也就是通常的latex命令的话,jpg,bmp等格式是不

        能直接插入latex中的,必须使用专门的eps图。产生eps图的方法见2).

        如果是直接产生pdf文件,也就是直接使用pdflatex命令(如做幻灯片,

        用beamer包时就会用pdflatex),这时才可以插入jpg图片。


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


2).我只会产生jpg,bmp图,怎么产生eps图?


        如果你喜欢的话(其实是强力推荐的),那么可以下载一套免费的

        ImageMagicK软件,里面的convert命令可以解决,如有a.jpg

        convert a.jpg a.eps

        就搞定了,非常的方便。


        如果觉得ImageMagicK不熟悉,那么需要用一点illegal的手段(其实也就是用

        一下photoshop)。方法是:

        打开a.jpg->另存为->Photoshop EPS->预览选项设为“无”->

        产生EPS文件



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


3).我用了Photoshop转EPS图,但EPS插图为什么显示"No Bounding Box"?


        在保存eps文件的时候,预览选项设为“无”。


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


4).如果一定要插jpg图,还显示"No Bounding Box"怎么办?


        jpg图也要一个bounding box的,这个box是为了让latex知道图的边界在哪,

        ctex套装(windows)和TexLive (Linux)都提供了一个小软件ebb

                ebb -b a.jpg

        就可以产生所需的bounding box文件,再插图就可以了。


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


5).为什么我的图形/表格乱跑?

        latex不是word这种“所见即所得”的工具,而是一种段落式的结构。latex

        在原则上是希望自动安排图表的位置的,当然,我们也可以在某种程度上

        控制浮动体的位置。最常见的是要求图表在当前位置上,这时对图为

        \begin{figure}[h]

        \end{figure}

        对表为

        \begin{table}[h]

        \end{figure}

        更详尽的关于浮动体的论述请见如"latex2e常用宏包使用指南"等书,或google


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


6).我是新手,怎么学Latex?

        

        latex不是一夜就能全部掌握的。在初始学习阶段应该找一个比较熟悉latex的人

        给一个模板,对必要的东西指点一下,然后自己鼓捣一下午,试着写一篇文章

        练一下基本结构。当稍微有一点感觉(也就是能顺利的编译通过一个还算像样

        的文章段落后),拿一本书开始系统学习,我认为

                邓建松的Latex科技排版指南

        是很不错的书,等有一点经验后

                Latex2e及常用宏包使用指南

        也是很有用的。


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



7).我的表格特别长怎么办?


        使用longtable宏包。


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


8).怎么引用公式、图、表?


        在公式、图、表的位置上写\label{...},在需要引用的位置上\ref{...}

        初学者建议:公式、图、表的编号应该分开,不要全部混在一起,如

        公式用{eqn:xxx}

        图用{fig:xxx}

        表用{tab:xxx}

        定理用{thm:xxx}

        定义用{defn:xxx}

        

        养成良好的习惯,在写长的论文或书时你会受用不尽。



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


9).怎么引用参考文献?


        \cite{xxx}


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


10).我想让参考文献的引用时出现在文字的右上角,怎么办?


        \let\supercite=\cite

        \renewcommand\cite[1]{\textsuperscript{\supercite{#1}}}


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


11).怎么使用列表/枚举?


        使用\begin{enumeration}环境是列表,前面有1. 2.这种编号,

        \begin{itemize}环境是枚举,没有数字编号,而是\bullet号(小圆点)。


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



12). LaTeX如何修改行间距



        \renewcommand{\baselinestretch}{**}

        把行距改为默认行距的**倍。


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




第三章、Matlab


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



1).如何在给定句柄的axis里绘图?


        plot(data,'parent',haxis);

        或者

        hbar=bar(data);

        set(hbar,'parent',haxis);


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


2). 在Matlab中如何求最值点?如何求一维数组的极值?


        最值:

        一维或多维数组最值用max(data(:))

        如果想返回最值所在的位置,用[Y,I]=max(data)



        极值:

        data是你的数据,

        find(diff(sign(diff(data)))==-2)+1

        找到极大值的位置


        find(diff(sign(diff(data)))==2)+1

        找到极小值的位置


        data(find(diff(sign(diff(data)))==-2)+1)和

        data(find(diff(sign(diff(data)))==2)+1)

        返回的是极大值和极小值



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


3).Matlab中如何作线性拟合/线性回归/多元线性回归?



        即用y=a*x+b来拟合一组数据{{x1,y1},{x2,y2}…{xn,yn}}

        matlab中使用polyfit

        x=data(:,1);

        y=data(:,2);

        p=polyfit(x,y,1);

        p(1)为斜率a,p(2)为截距b


        多元线性回归即用y=a1*x1+a2*x2+..+am*xm来拟合数据点{x1i,x2i,…xmi,yi} 

        (i=1~n)


          |x11,x21,…xm1|

        A=|x12,x22,…xm2|

          |……………   |

          |x1n,x2n,…xmn|


        Y={y1,y2,y3,…,yn}'


        则系数{a1,a2,…,am}'=pinv(A)*Y

        在matlab中使用

        coeff=A\Y

        则可以得到最小二乘意义上的拟合系数



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



4) Matlab中如何作二维数据的插值?



        对于一维、二维、三维规则数据点阵使用interp1/interp2/interp3,

        二维、三维非规则数据用griddata/griddata3



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


5).Matlab中如何绘制三维数据阵?



        如果使用matlab,打开帮助窗口,在目录树上找到

        MATLAB\Using Matlab\

           3-D Visualization: Volume Visualization Techniques

           

        如果图形复杂,建议使用Tecplot,参见Tecplot手册中数据格式,将你

        的三维数据读入Tecplot,双击zone,可以设置mesh/contour/surface 

        transparency等。

        

        在Field菜单中有3D Iso-surface Details和3D Slice Details,可以绘制等值

        面和任意平面的截面图。



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


6).Matlab中如何计算程序运行的时间?



        tic

          your_code;

        toc

        或者使用

        t=cputime; 

          your_operation; 

        cputime-t



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


7).Matlab中为什么只能在小数点后显示四位?



        用format命令来改变命令窗口数字的显示格式和精度,但不会影

        响matlab的计算精度,matlab的矩阵运算默认都是双精度浮点型运算。


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


8). Matlab如何在命令窗口按照格式输出?


        fprintf(1,"your_format_string",var1,var2,…);


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


9).如何在Matlab中画隐函数曲线?



        在http://www.mathworks.com/matlabcentral/fileexchange/index.jsp

        查找implicit,会找到一个Arthur Jutan写的implot.m

        Mathematica中绘制隐函数用ImplicitPlot[]

        或者ImplicitPlot3D[]

        Maple中为implicitplot(),implicitplot3d()

        参见

        http://engineering.dartmouth.edu/~fangq/MATH/download/source/

         ImplicitPlot3D.htm


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


10).Matlab中什么函数可以删除矩阵的某一行或列?



        A(j,:)=[];  %删除A的第j行

        A(:,i)=[];  %删除A的第i列


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


11).如何得到contour线上的坐标点?



        lcount=5;

        [c,h]=contour(peaks,lcount);

        x=get(h,'xdata');

        y=get(h,'ydata');


        这里得到的x和y都是cell数组,用x{1}/y{1}来得到每条线上的坐标对,

        注意,每条线的最后一个数据是NaN


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


12).Matlab有没有求矩阵行数/列数/维数的函数?



        ndims(A)返回A的维数

        size(A)返回A各个维的最大元素个数

        length(A)返回max(size(A))

        [m,n]=size(A)如果A是二维数组,返回行数和列数

        nnz(A)返回A中非0元素的个数


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


13).Matlab中如何中断运算?



        在命令窗口按Ctrl+C,在UNIX/LINUX会立即中断运算,在Windows可

        能由于操作系统的原因,有时会出现死机和等待的情况。


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


14).在Matlab中debug的时候能否跟踪变量?



        可以,如果使用medit,设置断点后可以用鼠标移到所看的变量上,显

        示当前的值,或者在命令窗口打该变量名直接回车。如果在代码中实

        现调试断点等功能,参

        见dbstop,dbcont,dbstep,dbclear,dbtype,dbstack,dbup,dbdown,dbstatus,

        dbquit


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


15).为什么我的Matlab程序这么慢?


        我们工学院的收发室的门上贴着一张小纸条,写的是

        "Our policy is always blaming the computer"


        大多数的人在遇到问题的时候,总是责备计算机如何如何,别人如何

        如何,其实,最最主要的因素是在于自己。


        一个程序运行快慢,有很多因素决定,最主要的是算法,简炼而优美

        的的数学公式胜过100遍的优化。能从算法上改进,才能比别人有根

        本的优势。计算机也很重要,以前我总把自己用的PC看成万能的加

        以崇拜,对UNIX嗤之以鼻,结果当自己真正开始算起来,才知道差

        别有多大。搞大型数值计算的,没有好的工作站或者并行系统,就输

        在了起跑线上了。然后是程序的优化,看看变量是否占用太多内存,

        看看是否有功能重复的模块或者计算,经常的是用牺牲内存来换取速

        度,具体取舍,具体需要来决定。用profile看看哪些语句占用时间最

        多,然后把核心部分进行优化。


        如果是使用Matlab,使用vectorization和矩阵整体操作的代码要比大量

        的for循环快很多,eval/inline函数如果出现在核心循环,也会让速度下

        降几时倍的。


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


16). Matlab中如何作非线性回归?


        请参考

        http://www.mathworks.com/support/solutions/data/10652.shtml

        

        matlab默认只提供了多项式拟合的函数polyfit,对于其他稍微简单

        一点的拟合,如标准的指数、对数、高阶多项式拟合,都有解析公式,参见:

        http://mathworld.wolfram.com/LeastSquaresFitting.html

        对于更加复杂的非线性函数,建议使用Mathematica或者DataFit

                

        Mathematica中提供了Fit[],以及

        << Statistics`NonlinearFit`

        NonlinearFit[],NonlinearRegress[]

        可以拟合任意复杂的表达式。

                

        DataFit可以自定义拟合模型,适用于复杂系统的拟合。


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


17).Matlab中,函数里面怎样使用基本工作空间中的变量?为什么inline函数不

  能使用外面的变量?



        函数只能存取它自己的工作空间中的变量。要在函数之间,或者函数与基本

        工作空间之间传递数值,尝试以下方法:

        1、使用全局变量,用global定义全局变量

        2、使用evalin:

                evalin('base','v=1;');  %在基本工作空间中执行命令:v=1;

                evalin('caller','v=1;');%在调用该函数的函数的工作空间中

                        执行命令:v=1;

        3、参数传递

        4、使用assignin:

                assignin('base','v',v); %将v赋给基本工作空间中的变量v;

                assignin('caller','v',v);  %将v赋给调用者工作空间中的变量v;

        inline函数里面只能出现函数和参数,要传递一个可变系数,需要用evalin。

        如:fzero('f(evalin(''base'',''x1(i)''),x3)',求解区间)



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


18).请推荐一下Matlab的教材?


        最好的当然是Matlab的help,但对于初学者来讲,help博大精深,很难一下子

      掌握。张志涌的“精通Matlab”是很好的教材,虽然有点厚,但把基础的看了,


        再具体问题具体看是很不错的选择,现在好像已经有7.0版了,其实原来的6.5版


        就挺不错了。其它的Matlab书有很多,但注意不要买那些纯翻译help的书。


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




第四章、Mathematica


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


1).Mathematica 可以定义变量为实数么?


        1. 在Simplify/FullSimplify可以使用\[Element],如

                Simplify[Re[a+b*I],a\[Element]Reals]

        2. 可以使用ComplexExpand[]来展开表达式,默认:符号均为实数:

                Unprotect[Abs];

                Abs[x_] := Sqrt[Re[x]^2 + Im[x]^2];

                ComplexExpand[Abs[a + b*I], a]

        3. 使用/:,对符号关联相应的转换规则

                x /: Im[x] = 0;

                x /: Re[x] = x;

                y /: Im[y] = 0;

                y /: Re[y] = y;

                Re[x+y*I]


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



2).Mathematica中如何中断运算?


        Alt+. 直接终止当前执行的运算 

        Alt+, 询问是否终止或者继续

        如果不能终止,用菜单Kernel\Quit Kernal\Local来退出当前运算


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



3).Mathematica中如何对离散点作积分?



        离散的点通过插值或者拟合就可以得到连续的函数,然后可以对该函

        数求积分和微分。下面是一个例子:


        f[x_] := NIntegrate[Sin[Cos[x]], {x, 0, a}];

        data = Table[{a, f[x]}, {a, 0, 10}];

        expr = Interpolation[data];


        Plot[expr[a], {a, 0, 10}];

        Plot[Evaluate[D[expr[a], a]], {a, 0, 10}]


        如果想实现Matlab中的cumsum的功能:

        Drop[FoldList[Plus, 0, {a1,a2,…,an}], 1]


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



4).请推荐Mathematica参考书 


        我迄今为止看到的最好的一本就是Mathematica自己带的帮助里面

        的The Mathematica Book,内容全面,循序渐近,非常容易学习使用

        。其他所见到的一些中文书籍基本上都是直接翻译帮助的内容,没有

        什么新意。



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





第五章、高级编程语言(C,C++,FORTRAN)


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



1).如何在Visual Fortran中画图?



        可以使用ArrayVisualizer提供的函数,非常方便,一两句话就可以绘图

        ,缺点是系统必须安装有ArrayVisualizer,而且只能绘制比较简单的图

        形。


        如果要用Windows的绘图API,请在超星阅读器上查找邓巍巍,王越男

        编辑的Visual Fortran编程指南一书的第八章、第九章


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



2).如何在Visual Fortran中使用LAPACK?        

                                                              

                                                                        

        (1)、CVF所包含的LAPACK函数库并不完全,在"\Microsoft                 

        Visual Studio\DF98\CXML\DOC\Cxmlref.pdf"中的Table 8-3和            

        8-4中列出了大多数LAPACK DRIVER ROUTINE。但这并不表示CVF中            

        

        就能直接调用这么多routine,具体哪些能调用可以参                      

   

        见                                                                   

   

        \Microsoft Visual Studio\DF98\CXML\INCLUDE\LAPACK_{S、D、           

        C、Z}_INCLUDE.F90 等四个文件。他们中有的就可以直接                   

   

        在CVF中调用,没有的就要参见 (3)。                                    

   

                                                                        

        (2)、CVF的环境变量设置。为了调用CVF的LAPACK函数,需要                

   

        将一些*.lib函数调入库函数的搜索范围,也需要设置CVF为查找             

   

        这些库函数所需要的搜索路径。具体方法是:                             

   

                                                                        

        I  project->setting->link->category->input->在object/library 

        modules   框内加入cxml.lib cxmldll.lib 两个文件名,中间以空格间隔。  

             

                                                                        

        II  分别在"tools->options->directories->"下的include files和library  

   

        files加上……\Microsoft Visual Studio\DF98\CXML\Include              

   

        和……\Microsoft Visual Studio\DF98\CXML\Lib 的搜索路径。Ⅲ  如      

   

        果在做了以上两个设置之后,程序仍然会出编译或连接错误,               

   

        可以做以下两项尝试(当然也可以不管错没错事先就做好):               

   

            一、在"project->setting->fortran->libraries"中勾上->use cxml选项

            二、在调用LAPACK函数的程序单元内的所有变量定义和可执             

   

                行语句之前加上: include 'cxml_include.f90' 语句。

                                                                        

                                                                        

        (3)、如果你通过各种途径查到LAPACK有某个函                            

   

        数,但LAPACK_{S、D、C、Z}_INCLUDE.F90四个文件中又没有                

   

        ,那就请到http://www.cs.colorado.edu/~lapack/网页下,在网页          

   

        左边选择你要的是何种routine。然后依提示逐步找到你所要的              

   

        算法源程序文件。注意如果选择"with dependencies"是不能下载            

   

        的,要选择"without dependencies"。当然也可以                         

   

        到http://www.cs.colorado.edu/~lapack/packages.html将所有             

   

        的LAPACK都下载下来。

                

        然后你就可以将你下载下来的源程序                

        拷贝到你的程序中作为一个subroutine了。                               

   

                                                                        


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



3).如何在各种平台上编译含有Lapack的Fortran程序?


        在Windows,使用Visual Fortran

           df yoursource.f90 -o exename /cxml

           df /optimize:5 /fast yoursource /link CXML.LIB /stack:4000000

        在LINUX中,使用

            -llapack 编译指令

        使用Compaq Alpha Tru64的f90,使用

           f90 yoursource.f90 -o exename -lcxml

        在SGI IRIX上使用MIPSpro 7 f90编译器,使用

           f90 yoursource.f90 -o exename -lcomplib.sgimath

        Sun Solaris/IBM AIX上还没有试过

        

        如果使用Intel Math Kernel Library(MKL),可以使用如下链接指令:

        Compile and Link Flags (Pentium III/Athlon): 

            -L$MKL_HOME/lib/32 -lmkl_lapack32 -lmkl_p3 -lpthread (使用LAPACK)

 

            -L$MKL_HOME/lib/32 -lmkl -lmkl_p3 -lpthread (使用BLAS)

        Compile and Link Flags (Pentium 4): 

            -L$MKL_HOME/lib/32 -lmkl_lapack32 -lmkl_p4 -lpthread (使用LAPACK)

            -L$MKL_HOME/lib/32 -lmkl -lmkl_p4 -lpthread (使用BLAS)



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


签名档

毕业前,能多学一点就多学一点吧


发表于2007-06-12 22:43:18

请您先 登录 再进行发帖

快捷回帖
标题
建议:≤ 24个字
签名档
发布(Ctrl+回车)

您输入的密码有误,请重新输入