Следующий простой пример кода дает правильные результаты. Тем не менее, я хотел бы оптимизировать его или сделать его более эффективным. Массив конструкторов y, который я создаю для генерации межстрочного интервала, работает, но он очень неуклюже выглядит и неудобен, поскольку числа в нем очень специфичны c. Я хочу сделать числа в массиве y более общими переменными, которые зависят от ранее определенных параметров в моем коде. Вот код, и тогда я буду более ясен:
PROGRAM TestRuns
IMPLICIT NONE
INTEGER :: i, j, k !matrix indices (i,j), spatial index k
INTEGER,PARAMETER :: n=5 !matrix size
REAL, PARAMETER :: a = -6, b =6 !end points of grid
REAL :: h !step size on position grid
REAL :: y(0:6) = (/(k, k=-6,6,2)/) ! generating spatial grid array
DOUBLE PRECISION :: M(n,n) !nxn matrix
h = (b-a)/(n+1)
DO i = 1,n
DO j = 1,n
IF (i .EQ. j) THEN
M(i,j) = y(i)**2
ELSE
M(i,j) = 0
END IF
END DO
END DO
END PROGRAM TestRuns
Вместо того, чтобы
REAL :: y(0:6) = (/(k, k=-6,6,2)/) ! this line of code works but is not helpful in generalizing my code at all.
Я действительно хочу написать что-то более общее, например:
REAL :: y(0:n+1) = (/(k, k=a,b,h)/)
Я всегда вначале указываю a, b, n в своем коде, поэтому по этим параметрам я хочу вычислить h и массив y. Я не хочу автоматически вводить значения массива y вручную, как я делаю сейчас.