如何从外部文件对数组进行求和?
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
我是编程学习的新手大学生, 所以最近我有任务从外部文件计算高斯约旦数值方法的矩阵,在我提供的 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