小编And*_*rew的帖子

"真正的*8"是什么意思?

用Fortran 90编写的程序手册说:"所有实际变量和参数都以64位精度(即real*8)指定."

根据维基百科,单精度对应于32位精度,而双精度对应于64位精度,因此显然程序使用双精度.

但是什么real*8意思呢?

我认为这8意味着8位数字跟随小数点.然而,维基百科似乎说单精度通常提供6-9位数,而双精度通常提供15-17位数.这是否意味着语句"64位精度"与real*8?不一致?

precision fortran bit fortran90

28
推荐指数
3
解决办法
5万
查看次数

在Fortran 90中,将行数组写入文本文件的好方法是什么?

我是Fortran的新手,我希望能够以行方式(列之间的空格和自己行上的每一行)将二维数组写入文本文件.我尝试了以下内容,它似乎在以下简单示例中工作:

PROGRAM test3
  IMPLICIT NONE

  INTEGER :: i, j, k, numrows, numcols
  INTEGER, DIMENSION(:,:), ALLOCATABLE :: a

  numrows=5001
  numcols=762
  ALLOCATE(a(numrows,numcols))
  k=1
  DO i=1,SIZE(a,1)
    DO j=1,SIZE(a,2)
      a(i,j)=k
      k=k+1
    END DO
  END DO

  OPEN(UNIT=12, FILE="aoutput.txt", ACTION="write", STATUS="replace")
  DO i=1,numrows
    WRITE(12,*) (a(i,j), j=1,numcols)
  END DO
END PROGRAM test3
Run Code Online (Sandbox Code Playgroud)

正如我所说,这似乎在这个简单的例子中工作正常:生成的文本文件aoutput.txt包含第1行的数字1-762,第2行的数字763-1524,依此类推.

但是,当我在一个更复杂的程序中使用上述想法(即,上面的倒数第五个,倒数第四个,倒数第三个,倒数第二个以上的代码行)时,我运行陷入麻烦; 看来,每一行都是间歇性地(通过一条新线)划界.(我没有发布,也可能不会发布,这里是我的整个复杂的程序/脚本 - 因为它很长.)在我复杂的程序/脚本中缺少一致的行分隔符可能表明我的代码中存在另一个错误,而不是上面的四行写入文件例程,因为上面的简单示例似乎工作正常.不过,我想知道,你能不能帮我想一想,如果有一个更好的行写文本文件例程,我应该使用它?

非常感谢您的宝贵时间.对此,我真的非常感激.

arrays fortran text-files

12
推荐指数
2
解决办法
7万
查看次数

删除Matlab图的刻度标签中的科学记数法

我在Matlab中制作了一个情节,使用:

hold on
plot(t1,Dx1,'r')
xlabel('t (ps)')
ylabel('Deviation of coordinate from initial coordinate (Å)')
plot(t1,Dy1,'g')
plot(t1,Dz1,'b')
hold off
Run Code Online (Sandbox Code Playgroud)

但是,y轴上的刻度标签是用科学记数法生成的:

y轴上的科学记数法

有什么方法可以删除科学记数法,并且y标签的范围是-0.0025到0.0005吗?谢谢!

matlab plot label

11
推荐指数
2
解决办法
3万
查看次数

使用键盘删除Emacs/XEmacs中的特定文本列

是否可以仅使用键盘删除Emacs/XEmacs中的特定文本列(即特定列号)?我知道可以使用鼠标(或箭头键)选择文本矩形,但对于100万行文本文件,这可能非常耗时.

谢谢!

emacs text gnu xemacs

8
推荐指数
1
解决办法
3419
查看次数

计算Fortran 90中两个向量的叉积

我想计算Fortran 90中两个向量的叉积.例如,在单词中,(1,2,3)和(4,5,6)的叉积结果为(-3,6, -3)在笛卡尔坐标系中.我编写了以下代码(主程序后跟函数定义):

PROGRAM crosstest
  IMPLICIT NONE

  INTEGER, DIMENSION(3) :: m, n
  INTEGER, DIMENSION(3) :: cross
  INTEGER, DIMENSION(3) :: r

  m=(/1, 2, 3/)
  n=(/4, 5, 6/)
  r=cross(m,n)

END PROGRAM crosstest

FUNCTION cross(a, b)
  INTEGER, DIMENSION(3) :: cross
  INTEGER, DIMENSION(3), INTENT(IN) :: a, b

  cross(1) = a(2) * b(3) - a(3) * b(2)
  cross(2) = a(3) * b(1) - a(1) * b(3)
  cross(3) = a(1) * b(2) - a(2) * b(1)
END FUNCTION cross
Run Code Online (Sandbox Code Playgroud)

但是,我收到一条错误消息:

crosstest.f90:10.9:

  r=cross(m,n)
         1
Error: Rank mismatch …
Run Code Online (Sandbox Code Playgroud)

fortran function cross-product

7
推荐指数
2
解决办法
2万
查看次数

在Fortran中逐行读取逗号分隔的文本文件

我是Fortran新手.我希望能够读取文本文件并将其内容保存在单个变量中.我找到了一个非常有用的Fortran教程(http://www.math.hawaii.edu/~hile/fortran/fort7.htm#read),我试图按照那里列出的一个例子.具体来说,我使用以下文本创建了一个名为data.txt的文本文件:

1.23, 4.56, 7.89
11, 13, "Sally"
Run Code Online (Sandbox Code Playgroud)

我已将此文本文件保存在当前目录中.然后,我创建了一个文件test.f90(也保存在我当前的目录中),其中包含以下代码:

PROGRAM test
  IMPLICIT NONE

  REAL :: x, y, z
  INTEGER :: m, n
  CHARACTER first*20

  OPEN(UNIT = 7, FILE = "data.txt")
  READ(7,*) x, y, z
  READ(7,*) m, n, first

  PRINT *, x
  PRINT *, y
  PRINT *, z
  PRINT *, m
  PRINT *, n
  PRINT *, first
END PROGRAM test
Run Code Online (Sandbox Code Playgroud)

我正在使用GNU Fortran编译器,我认为它包括至少包括Fortran95在内的功能.上面的代码似乎编译好了,至少使用默认设置).但是当我运行生成的可执行文件时,我收到以下错误消息:

At line 10 of file test.f90 (unit = 7, file = 'data.txt')
Fortran runtime …
Run Code Online (Sandbox Code Playgroud)

file-io text fortran

6
推荐指数
1
解决办法
1万
查看次数

在Fortran 90中,是否必须事先声明数组维度?

是否有必要在任何其他代码之前声明数组维度?例如,我编写了以下简化示例代码:

PROGRAM mytest
  IMPLICIT NONE
  INTEGER :: i, j, k, mysum

  ! Let array c be a k-by-k**2 array
  ! Determine k within the program by some means...for example,
  mysum=0
  DO i=1, 3
    mysum=mysum+1
  END DO
  k=mysum

  REAL, DIMENSION(k, k**2) :: c

  WRITE(*,*) "k=", k
  WRITE(*,*) "k**2=", k**2
  WRITE(*,*)
  DO i=1,size(c,1)
    WRITE(*,"(100(3X,F3.1))") (c(i,j), j=1,size(c,2))
  END DO
END PROGRAM mytest
Run Code Online (Sandbox Code Playgroud)

我试图做的一点是,我想创建一个数组ck-by- k**2大小,并且k仅由代码中的其他计算确定; k一开始就不知道.

但是,上面的代码在编译时给出了以下错误消息:

mytest.f90:13.31:

  REAL, DIMENSION(k, k**2) :: c
                               1
Error: Unexpected …
Run Code Online (Sandbox Code Playgroud)

arrays fortran dimensions

5
推荐指数
1
解决办法
5828
查看次数

在 Fortran 90 中传递参数的智能方法

我是 Fortran 新手。我正在尝试编写一个子程序,它将从主程序中接收四个参数,然后向主程序输出一个包含最初传入的四个参数的数组。有什么好的/聪明的方法可以做到这一点?

例如,在我下面的测试程序,我创建四个实际变量(abc,并d在主程序)。然后我将这些实际变量传递给一个名为mysub. 我希望mysub能够接收a, b, c, 和d,使用它们来填充一个名为 的 2×2 数组o,然后发送o到主程序以在那里显示(和可能的修改)。所以,我尝试了以下方法:

SUBROUTINE mysub(w,x,y,z)
  IMPLICIT NONE
  REAL, INTENT(IN) :: w, x, y, z
  REAL, DIMENSION(:,:), ALLOCATABLE, INTENT(OUT) :: o

  ALLOCATE(o(2,2))
  o(1,1)=w
  o(1,2)=x
  o(2,1)=y
  o(2,2)=z
END SUBROUTINE mysub
END MODULE testsubs

PROGRAM test
  USE testsubs
  IMPLICIT NONE
  REAL :: a=1.1, b=2.2, c=3.3, d=4.4

  CALL mysub(a, b, c, d)

  PRINT *, …
Run Code Online (Sandbox Code Playgroud)

fortran argument-passing subroutine fortran90

5
推荐指数
1
解决办法
2万
查看次数

从包含gnuplot生成的图的PostScript文件中提取(近似)数据

假设我有一个PostScript文件,其中包含使用gnuplot生成的绘图。但是,我没有源数据,也没有用于生成图的gnuplot命令。

您是否知道以某种方式从图形表示形式(即PostScript文件)中提取数据的任何方法?这样的代码必须从像素表示中按字面意义“读取图形”(特别是我有一条平滑的线/散点XY图),而且我知道结果充其量只能算是近似值(但这仍然非常非常可取)。

您对此有任何经验吗?感谢您的时间!

plot gnuplot postscript

5
推荐指数
1
解决办法
1531
查看次数

在gnuplot for Windows中,如何列出当前/工作目录中的文件?

我正在运行gnuplot适用于Windows的4.6版(补丁级别0).该程序的Windows版本提供了一个控制台或命令提示符界面,类似于bashUnix/Linux中的shell或Windows中的DOS 命令提示符.

gnuplotWindows中的某些命令与Unix/Linux或DOS中的命令类似.例如,pwd打印当前/工作目录.另外,cd更改目录,所以我可以使用像cd 'C:\Documents and Settings'.

但是,我奇怪地无法弄清楚如何列出当前/工作目录中的文件(在Unix/Linux中将是ls和DOS中的文件dir).你知道怎么做吗?

gnuplot

5
推荐指数
1
解决办法
1万
查看次数