如何从外部文件对数组进行求和?

How to do SUM on array from outside file?

我是编程学习的新手大学生, 所以最近我有任务从外部文件计算高斯约旦数值方法的矩阵,在我提供的 txt 文件中有 10 (x) 和 (y) 数据,并用 do 函数声明来计算 txt 文件中的 10 个数据x^2, x^3, x^4, xy, x^2y

我的问题是:如何对程序计算的每个 x^2、x^3 ... 求和(计算总数)?我尝试在下面对文件求和,但仍然出现错误(求和的第一个参数不能是标量。)

我使用的 Fortran 应用程序是 Silverfrost 的 Plato cc。 如果我的英语不好并且我的程序看起来很有趣,我深表歉意。

我的 txt 中有 10 个数据,如下所示:

(x)  (y)
12   10
5    6
28   8
9    11
20   17
6    24
32   9
2    7
1    30
26   22

在下面的程序中,我打开这些文件并希望我提供的每个 x 和 y 都读取并计算得到 x^2、x^3、x^4、xy、x^2y

Program Gauss_Jordan
Real x(10),y(10),xj,yj,xj2,xj3,xj4,xjyj,xj2yj
 Open (10, file='Data.txt')
    Do j = 1,10
        Read(10,*) x(j), y(j)
        xj2 = x(j)**2
        xj3 = x(j)**3
        xj4 = x(j)**4
        xjyj = x(j)*y(j)
        xj2yj = (x(j)**2)*y(j)
            Do k = 1,10
            T(xj2) = SUM( xj2, dim=1)
            T(xj3) = SUM (xj3, dim=1)
            T(xj4) = SUM (xj4, dim=1)
            T(xjyj) = SUM (xjyj, dim=1)
            T(xj2yj) = SUM (xj2yj, dim=1)
            End Do
     End Do
 Close(10)
 End

for T(xj2) 我想从该程序计算出的所有 xj^2 中求和得到一个结果标量结果。

如 excel 预期:

(A) is 1st xj^2 value that has been calculated
.
.
. 
until (J) is 10th xj^2 value that has been calculated
sxj^2 = SUM(Xj^2)
SUM (A-J)

据我所知,我认为您误解了 SUM 内在函数的作用。由于您的示例未将 xj2、xj3 等存储在数组中,因此 SUM 对您没有用处。相反,您可以将总计声明为标量(如您所描述的那样),并简单地在循环中添加各个 xj2 变量,如下例所示。

此外,您应该养成使用隐式 none 声明的习惯。它将避免因拼写错误而导致的意外错误。

Program Gauss_Jordan

    implicit none
    Real x(10),y(10),xj,yj,xj2,xj3,xj4,xjyj,xj2yj
    real :: Txj2,Txj3,Txj4,Txjyj,Txj2yj
    integer :: j
    Txj2 = 0
    Txj3 = 0
    Txj4 = 0
    Txjyj= 0
    Txj2yj= 0

    Open (10, file='Data.txt')
    Do j = 1,10
        Read(10,*) x(j), y(j)
        xj2 = x(j)**2
        xj3 = x(j)**3
        xj4 = x(j)**4
        xjyj = x(j)*y(j)
        xj2yj = (x(j)**2)*y(j)
        Txj2   = Txj2   + xj2
        Txj3   = Txj3   + xj3
        Txj4   = Txj4   + xj4
        Txjyj  = Txjyj  + xjyj
        Txj2yj = Txj2yj + xj2yj
    End Do
    print *, 'Txj2 = ', Txj2
    Close(10)
 End

当我 运行 这个时,我得到了下面的输出,我相信这是你想要的:

3175

'sum' 内在需要一个数组参数,我们可以在不使用循环的情况下从输入数组计算它,因此您的程序可以是:

Program Gauss_Jordan
    Real x(10), y(10), x2(10), x3(10), x4(10), xy(10), x2y(10)
    Open(10, file='Data.txt')
    Do j = 1, 10
        Read (10, *) x(j), y(j)
    End Do
    Close(10)
    x2 = x**2
    x3 = x**3
    x4 = x**4
    xy = x*y
    x2y = (x**2)*y
    sx2 = SUM(x2)
    sx3 = SUM(x3)
    sx4 = SUM(x4)
    sxy = SUM(xy)
    sx2y = SUM(x2y)
End