我使用的是OS X 10.9.1(Mavericks).
在Mac OS中安装到Gvim或MacVim的系统步骤是什么?如果使用1,2,3,......编写步骤,则很容易理解.
我必须承认我无法理解MacVim页面上提供的所有说明.其他谷歌搜索的网页不澄清.例如
什么是$VIMRUNTIME?我应该为我的操作系统安装什么版本的vim?
现在不知怎的,我已经在我的系统中安装了MacVim(我不相信系统).我可以看到我有一个文件夹/Applications/gvim.app/MacVim.app/.
现在,当我从MacVim打开文本文件时,MacVim已经使用vi-editor编写,但MacVim无法识别它.此外,vi无法识别MacVim中写的任何内容!
我该如何解决这个问题?
这看起来像是一个微不足道的问题,但我无法通过谷歌搜索找到任何答案。我有这个小程序:
Program Test_spacing_print
Integer:: N
Real:: A,B
N=4; A=1.0; B=100.0
print*,'N =',N
print*,'A =',A,' B =',B
print '(2(A3,F8.2,1X))' ,'A =',A,' B =',B
print 20, A,B
20 format('A =',F8.2,x,'B =',F8.2)
End Program Test_spacing_print
Run Code Online (Sandbox Code Playgroud)
这给了我输出:
N = 4
A = 1.00000000 B = 100.000000
A = 1.00 B 100.00
A = 1.00 B = 100.00
Run Code Online (Sandbox Code Playgroud)
我想去掉=符号后得到的不需要的空格,即我想要的输出应该如下所示(后 1 个空格=):
N = 4
A = 1.00000000 B = 100.000000
A = 1.00 B = 100.00
A = 1.00 B = …Run Code Online (Sandbox Code Playgroud) 1)fortran 90代码中NxN矩阵中N的最大值是多少,这样就不会出现分段错误?
例如,当我使用大小为2 ^ 8 x 2 ^ 8的矩阵并将它们用于乘法(使用内在的'matmul'函数)时,我没有任何问题.
但是,当我使用2 ^ 12 x 2 ^ 12矩阵时,我没有发现任何编译错误,但是我在程序中间出现了分段错误.
我是否耗尽了内存分配,或者我的代码中可能存在错误?
我使用了动态分配,我使用64位RedHat OS和64 GB RAM.
2)最大大小也取决于编译器或系统配置?
提前致谢.
[除非真的需要回答,否则请不要让我粘贴.我相信我的问题很笼统.]
Fortran 90 及更高版本强烈建议不要使用goto语句。
但是,我仍然觉得必须在以下两种情况下使用它:
情况 1 -- 指示重新输入输入值,例如
program reenter
10 print*,'Enter a positive number'
read*, n
if (n < 0) then
print*,'The number is negative!'
goto 10
end if
print*,'Root of the given number',sqrt(float(n))
stop
end program reenter
Run Code Online (Sandbox Code Playgroud)
案例 2 —— 注释程序的一个大的连续部分(相当于/* ... */C 中的)。例如。
print*,'This is to printed'
goto 50
print*,'Blah'
print*,'Blah Blah'
print*,'Blah Blah Blah'
50 continue
print*,'Blahs not printed'
Run Code Online (Sandbox Code Playgroud)
goto在 Fortran 90 中的上述两种情况下,如何摆脱 using语句并使用一些替代方案?
我正在使用LAPACK库中的DSYEV和DSYEVD来查找特征值和特征向量(编译语法:gfortran -llapack).但是,我找到-0.44,0.35,0.88了特定矩阵的错误特征值().出了什么问题?
可以很容易地看出矩阵具有零行列式,因此至少一个特征值必须为零.
这是我的代码(希望它不是太大):
Program Real_Eigenvec
implicit none
integer, parameter:: n=3
integer:: i,j, flag
real*8:: A(n,n),X(n,n)
real*8:: lambda(n)
real*8, parameter:: p=0.5d0/dsqrt(2.d0), q=1.d0-1.d0/dsqrt(2.d0)
Print*,'Enter flag: 0 for DSYEV, 1 for DSYEVD'
Read*, flag
A= transpose(reshape((/ 0.d0, 1.d0, 0.d0, p, q, p, 0.5d0, 0.0d0, 0.5d0 /), shape(A)))
print*,'Dimension of the matrix, n=',int(sqrt(float(size(A))))
Print*,'A matrix in full form:'
Do i=1,n
print 100, (A(i,j),j=1,n)
End Do
call Eigen(A,lambda,X,n,flag)
! Print the eigenvalues and eigenvectors.
PRINT 200
DO i = 1, n
PRINT …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
Program function_as_an_array
implicit none
integer:: i
integer, parameter:: N=10
real*8:: x(N),y(N),f(N)
do i=1,N
x(i)=float(i)
end do
call func(f,N,x)
open(unit=20, file='test.dat')
do i=1,N
y(i)=f(i)
write(20,*) x(i),y(i)
end do
close(20)
Stop
End Program function_as_an_array
Subroutine func(f,N,x)
implicit none
integer i,N
real*8:: x(N),f(N)
do i=1,N
f(i)=x(i)**2
end do
end Subroutine func
Run Code Online (Sandbox Code Playgroud)
我想让程序确实用于"作为arrray的功能",即我想替换Subroutine funcby function f和得到相同的结果(在主程序中,我希望保持一个声明y=f(x,N)).我怎样才能做到这一点?
谢谢.
我正在尝试将trim/adjustl用于以下代码。似乎我得到了X_eq_ 10.0.dat或者X_eq_10.0 .dat作为输出文件的名称,我期望它是X_eq_10.0.dat(没有空格)。有什么补救办法吗?
Program Test
double precision:: X
character (len=10) :: tag
character (len=100) :: outfile
X=10.0
write(tag,'(f10.1)') X
print*,'tag=',tag
outfile='X_eq_'//trim(tag)//'.dat'
print*,'Output file: ',outfile
outfile='X_eq_'//trim(tag)//trim('.dat')
print*,'Output file: ',outfile
outfile='X_eq_'//adjustl(trim(tag))//adjustl(trim('.dat'))
print*,'Output file: ',outfile
End Program Test
Run Code Online (Sandbox Code Playgroud)
我曾经gfortran作为编译器使用过。
有没有一种方法可以为不同的变量分配相同的值,而无需在单个语句中构造数组?
例如,如果我有变量a,b,c,d和e,我可以分配类似
a=b=c=d=e=10.0
Run Code Online (Sandbox Code Playgroud)
?
我知道我可以单行执行:
a=10.0; b=10.0; c=10.0; d=10.0; e=10.0
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的,因为如果以后我想将值10.0更改为其他值,则必须在各处进行更改。
有什么帮助吗?
可能是一个愚蠢的问题,但有没有办法为变量的离散值运行循环?最新版本怎么样?
就像是
for i in 1 5 9 11 31 77
Run Code Online (Sandbox Code Playgroud)
在Unix shell脚本中使用?
谢谢.
假设我有矩阵A并且B都有大小 nxn 。现在我想把A的每一列当作一个列矩阵ColA(i)[i=1,n],把B矩阵的每一行当作一个行矩阵RowB(j)[j=1,n]。
现在我可以使用matmul函数来构造一个新矩阵,称为C其元素是通过将所有可能的 i 和 j 值乘以 ColA 和 RowB 来找到的吗?就像是
do i = 1, n
do j= 1, n
C(i,j) = matmul( ColA(i), RowB(j) )
end do
end do
Run Code Online (Sandbox Code Playgroud)