Форум программистов, компьютерный форум, киберфорум
palva
Войти
Регистрация
Восстановить пароль

Пример рекурсии в фортране

Запись от palva размещена 01.01.2014 в 19:46
Показов 13883 Комментарии 0

Современный фортран допускает рекурсивные подпрограммы и функции. Вот пример вычисления определителя при помощи разложения по строке. Определитель всегда разлагается по верхней строке, при этом вычеркивается верхняя строка и один из столбцов. Номера невычернутых столбцов передаются на нижний уровень рекурсии в массиве ia. Первоначально этот массив содержит номера всех столбцов матрицы. Параметр k содержит размер массива ia. Номер первой невычеркнутой строки равен n-k+1. Именно по этой строке будет сделано разложение на очередном уровне рекурсии.
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
! Д. К. Фаддеев, И. С. Соминский.
! Сборник задач по высшей алгебре. 1977.
! № 279. Вычислить определитель.
! Ответ: 900.
 
    integer, parameter :: n=4
    real*8 :: a(n,n) = &
! Обратите внимание, что матрица в фортране записывается по столбцам.
    (/ 1, -2,  3,  4, &
       2,  1, -4,  3, &
       3, -4, -1, -2, &
       4,  3,  2, -1  /)
    integer :: ia(n) = (/ (i, i=1,n) /)
    real*8 det
    print *, det(a, n, ia, n)
    end
    
    recursive real*8 function det(a, n, ia, k)
!    Функция вычисляет минор матрицы a размера n x n, стоящий на пересечении
!    k последних строк и k столбцов, номера которых перечислены в массиве ia.
    integer k,n
    real*8, dimension (n,n) :: a
    integer, dimension(k) :: ia
    integer i, j, sign
    integer, dimension(k-1) :: iar
    real*8 :: s
    if(k==1) then
        det=a(n,ia(1))
        return
    end if
    if(k==n) ia = (/ (i, i=1,n) /)
    s=0.0
    sign = 1
    do i = 1,k
        iar=(/ (ia(j), j=1,i-1), (ia(j), j=i+1,k) /)
        s = s + sign * a(n-k+1,ia(i)) * det(a, n, iar, k-1)
        sign = -sign
    end do
    det = s
    end function det
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru