如何正确记录fortran矩阵最小值和最大值之间的平均值计数
how to correctly record the counting of averages between the minimum and maximum of the matrix on fortran
我试图编写一个程序来计算平均值而不考虑列的最小值和平均值,最好的方法是什么?首先,我想简单地将列的平均值输出到文件中,没有错误,但没有输出。
Program Matrix
Implicit None
Real,Allocatable,dimension(:,:)::A
Real,Allocatable,dimension(:):: b
Integer varStr,varStlb
Integer i, j
real summa
Open(1,file='in.txt')
Open(8,file='out.txt')
Do
read(*,*)varStr,varStlb
Allocate(A(1:varStr,1:varStlb),B(1:varStlb))
Read(1,*) ( A(i,:), i = 1,varStr )
do j = 1, varStlb
summa = 0
do i = 1, varStr
summa = summa + a(j,i)
end do
b(j) = summa/varStr
write(8,'(A,F8.2,A)')'b = ',b(j), ' - сумма всех элементов'
end do
Deallocate(A)
Enddo
End Program Matrix
在文件中是
10.05 -22.0 3.0
4.0 0.0 60.0
8.0 13.0 22.5
正如我所写,你的问题中的要点太多了。因此很难做出一个答案,既能很好地涵盖你的问题,又不会在你没有真正理解问题的情况下只给你一个作业的解决方案。
你的代码有很多问题或者奇怪的地方
我看不出外 Do
循环的原因。在此循环中,您将尝试多次读取文件。没有读取文件末尾的保护。
从文件中读取时,您总是 allocate
您的数组。但是你永远不会 deallocate
它们在外 Do
循环的下一次迭代中你尝试再次分配它们,但这是不允许的,它们已经分配了。
也许您只想阅读整个文件一次?
我总是建议分步学习。首先根据需要阅读文件,打印它,确认它是您需要的形式。仅计算正常平均值。然后才计算排除最大值和最小值的平均值。
忽略最大值和最小值很简单,只需从总和中减去它们并将元素的计数减2。但是,由于您的其余代码如此混乱,这是不可能的将它添加到那里。我将只展示程序的草图:
数组的正常平均值 a(1:n)
:
avg = sum(a) / n
除最大值和最小值外所有元素的平均值:
avg2 = (sum(a) - minval(a) - maxval(a)) / (n - 2)
我试图编写一个程序来计算平均值而不考虑列的最小值和平均值,最好的方法是什么?首先,我想简单地将列的平均值输出到文件中,没有错误,但没有输出。
Program Matrix
Implicit None
Real,Allocatable,dimension(:,:)::A
Real,Allocatable,dimension(:):: b
Integer varStr,varStlb
Integer i, j
real summa
Open(1,file='in.txt')
Open(8,file='out.txt')
Do
read(*,*)varStr,varStlb
Allocate(A(1:varStr,1:varStlb),B(1:varStlb))
Read(1,*) ( A(i,:), i = 1,varStr )
do j = 1, varStlb
summa = 0
do i = 1, varStr
summa = summa + a(j,i)
end do
b(j) = summa/varStr
write(8,'(A,F8.2,A)')'b = ',b(j), ' - сумма всех элементов'
end do
Deallocate(A)
Enddo
End Program Matrix
在文件中是
10.05 -22.0 3.0
4.0 0.0 60.0
8.0 13.0 22.5
正如我所写,你的问题中的要点太多了。因此很难做出一个答案,既能很好地涵盖你的问题,又不会在你没有真正理解问题的情况下只给你一个作业的解决方案。
你的代码有很多问题或者奇怪的地方
我看不出外
Do
循环的原因。在此循环中,您将尝试多次读取文件。没有读取文件末尾的保护。从文件中读取时,您总是
allocate
您的数组。但是你永远不会deallocate
它们在外Do
循环的下一次迭代中你尝试再次分配它们,但这是不允许的,它们已经分配了。
也许您只想阅读整个文件一次?我总是建议分步学习。首先根据需要阅读文件,打印它,确认它是您需要的形式。仅计算正常平均值。然后才计算排除最大值和最小值的平均值。
忽略最大值和最小值很简单,只需从总和中减去它们并将元素的计数减2。但是,由于您的其余代码如此混乱,这是不可能的将它添加到那里。我将只展示程序的草图:
数组的正常平均值 a(1:n)
:
avg = sum(a) / n
除最大值和最小值外所有元素的平均值:
avg2 = (sum(a) - minval(a) - maxval(a)) / (n - 2)