Форум: "Основная";
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];
ВнизОтладка в условиях нехватки ресурсов Найти похожие ветки
← →
Fellomena (2002-03-13 15:56) [1]Код на VFortran6.1.0 (писала как раз для забивания оперативы и увеличения win386.swp + активный пэйджинг через своп - комп был правда с 64Mb оперативы :)
!исходная ф-ия, минимизируемая в методе дихотомии
FUNCTION func(x)
func = log(1+x)*(x**2-4)*(x-5)+(x**(x))
return
end function func
!метод одномерной минимизации - метод дихотомии
subroutine DIHOTOMIA(a, b)
!исходные данные
real a, b, eps, d
!данные для вычислений (x - конечное значение минимума)
integer k
real x1, x2, x
!инициализация входных данных
!a = 0
!b = 12345630000.5
eps = 0.001
d = 0.000001
k = 1
1 if (abs(b-a).LE.eps) go to 7
x1 = (a+b-d)/2
x2 = (a+b+d)/2
if (func(x1).LE.func(x2)) go to 5
a = x1
2 k = k+1
go to 1
5 b = x2
go to 2
7 x = a
! Вывод результатов
!print *, "Method DEHOTOMIA - zero level method of optimization."
!print *, x
return
end subroutine
program RANDOM2
USE DFPORT
implicit none
! Variables
integer i, j
real a(20E+6), b(20E+6), d(20E+6), k, temp, count
REAL(8) elapsed_time
real func
! Body of RANDOM2
count = 20E+6
print *, "Waiting for array to be formated..."
! заполнение массива типа real псевдо-случайными числами
DO j = 1, count
call RANDOM_NUMBER(k)
a(j) = k*100
b(j) = k+123
d(j) = k
!print *, a(j), j
end do
print *, "Testing CPU... Please wait..."
! инициализация таймера отсчёта времени
elapsed_time = TIMEF( )
! Сортировка методом пузырька массива типа real размером 20E+3
DO i = 1, 50E+3
DO j = 1, 50E+3
if (a(i).LE.a(j)) then
temp = a(i)
b(j) = a(j)
a(i) = a(j)
d(j) = a(i)
d(i) = b(j)
a(j) = temp
endif
END DO
b(i) = a(i)
END DO
!Метод одномерной минимизации - метод дихотомии/ a и b - значения, полученные от
!сортировки пузырьком и явл. границами отрезка поиска минимума
call DIHOTOMIA(a(1), a(count))
! остановка таймера
elapsed_time = TIMEF( )
! начало вывода результатов в файл BubleF.res
OPEN (1, FILE = "BubleF.res")
WRITE (1, *) "VisualFortran 6.1.0"
WRITE (1, *) "Options: none"
WRITE (1, *) "Randomization array [1..20000] of real"
WRITE (1, *) "Uses method DEHOTOMIA to minimize function"
WRITE (1, *) "Result: First number: ", a(1)
WRITE (1, *) "Last number: ", a(count)
WRITE (1, *) "Time = ", elapsed_time
CLOSE(1)
! конец вывода результата в файл BubleF.res
print *, "Work complete ! Result in BubleF.res "
!DO i = 1, 10E+4
!print *, a(i)
!ENDDO
! Пауза
read(*, *)
end program RANDOM2
Программа бестолковая, но своё дело делает.
Увеличив настроечные параметры циклов можно добиться более продолжительного времени её работы.
Переложить на Паскаль или С - никаких проблем imho
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c