Как сделать SUM на массив из внешнего файла? - PullRequest
2 голосов
/ 16 мая 2019

Я новичок в колледже по программированию, поэтому недавно у меня появилась задача вычислить матрицу из внешних файлов для числового метода Гаусса-Джордана, в предоставленном мною текстовом файле содержится 10 (x) и (y) данных и объявить с помощьюделать функции, чтобы вычислить 10 данных из файла TXT для каждого x ^ 2, x ^ 3, x ^ 4, xy, x ^ 2y

мой вопрос: как СУММИТЬ (рассчитать общее количество) каждого x ^2, х ^ 3 ... что было рассчитано программой?я пытаюсь сделать файл суммы ниже и все еще получил ошибки (первый аргумент суммы не должен быть скалярным.)

приложения Fortran, которые я использую, были Plato cc из Silverfrost.Я извиняюсь, если мой английский плохой, и моя пограмма выглядит забавно.

У меня есть 10 данных в моем TXT выглядит так:

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

в программе ниже я открываю эти файлы и хочу каждый х иyi обеспечить чтение и вычислить, чтобы получить 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

для T (xj2) Я хочу получить один результат скалярный результат из SUM для всех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)

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Для присваивания '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
0 голосов
/ 16 мая 2019

Из того, что я вижу, я думаю, что вы неправильно понимаете, что делает СУМ. Поскольку ваш пример не хранит 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...