Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-90820
Malder
2002-03-15 19:49
2002.03.28
Русифиация Delphi ресурсов...


1-90914
IronHawk
2002-03-18 18:19
2002.03.28
Проблема, разыва дробного числа !


1-90828
Bmax
2002-03-16 07:32
2002.03.28
Клавиатура


14-91078
Королев
2002-02-12 22:07
2002.03.28
можно ли удалять свои темы и свои ответы здесь?


4-91126
copyr25
2002-01-26 17:10
2002.03.28
Как запустить диалог





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский