我是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,依此类推.
但是,当我在一个更复杂的程序中使用上述想法(即,上面的倒数第五个,倒数第四个,倒数第三个,倒数第二个以上的代码行)时,我运行陷入麻烦; 看来,每一行都是间歇性地(通过一条新线)划界.(我没有发布,也可能不会发布,这里是我的整个复杂的程序/脚本 - 因为它很长.)在我复杂的程序/脚本中缺少一致的行分隔符可能表明我的代码中存在另一个错误,而不是上面的四行写入文件例程,因为上面的简单示例似乎工作正常.不过,我想知道,你能不能帮我想一想,如果有一个更好的行写文本文件例程,我应该使用它?
非常感谢您的宝贵时间.对此,我真的非常感激.
我在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标签的范围是-0.0025到0.0005吗?谢谢!
是否可以仅使用键盘删除Emacs/XEmacs中的特定文本列(即特定列号)?我知道可以使用鼠标(或箭头键)选择文本矩形,但对于100万行文本文件,这可能非常耗时.
谢谢!
我想计算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新手.我希望能够读取文本文件并将其内容保存在单个变量中.我找到了一个非常有用的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) 是否有必要在任何其他代码之前声明数组维度?例如,我编写了以下简化示例代码:
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)
我试图做的一点是,我想创建一个数组c
是k
-by- k**2
大小,并且k
仅由代码中的其他计算确定; k
一开始就不知道.
但是,上面的代码在编译时给出了以下错误消息:
mytest.f90:13.31:
REAL, DIMENSION(k, k**2) :: c
1
Error: Unexpected …
Run Code Online (Sandbox Code Playgroud) 我是 Fortran 新手。我正在尝试编写一个子程序,它将从主程序中接收四个参数,然后向主程序输出一个包含最初传入的四个参数的数组。有什么好的/聪明的方法可以做到这一点?
例如,在我下面的测试程序,我创建四个实际变量(a
,b
,c
,并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) 假设我有一个PostScript文件,其中包含使用gnuplot生成的绘图。但是,我没有源数据,也没有用于生成图的gnuplot命令。
您是否知道以某种方式从图形表示形式(即PostScript文件)中提取数据的任何方法?这样的代码必须从像素表示中按字面意义“读取图形”(特别是我有一条平滑的线/散点XY图),而且我知道结果充其量只能算是近似值(但这仍然非常非常可取)。
您对此有任何经验吗?感谢您的时间!
我正在运行gnuplot
适用于Windows的4.6版(补丁级别0).该程序的Windows版本提供了一个控制台或命令提示符界面,类似于bash
Unix/Linux中的shell或Windows中的DOS 命令提示符.
gnuplot
Windows中的某些命令与Unix/Linux或DOS中的命令类似.例如,pwd
打印当前/工作目录.另外,cd
更改目录,所以我可以使用像cd 'C:\Documents and Settings'
.
但是,我奇怪地无法弄清楚如何列出当前/工作目录中的文件(在Unix/Linux中将是ls
和DOS中的文件dir
).你知道怎么做吗?
fortran ×6
arrays ×2
fortran90 ×2
gnuplot ×2
plot ×2
text ×2
bit ×1
dimensions ×1
emacs ×1
file-io ×1
function ×1
gnu ×1
label ×1
matlab ×1
postscript ×1
precision ×1
subroutine ×1
text-files ×1
xemacs ×1