Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример оформления отчета
Лабораторная работа № 16-3 ОПРЕДЕЛЕНИЕ КОРНЕЙ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ МЕТОДОМ ИТЕРАЦИЙ
Цель работы – освоить навыки приближенного нахождения корней алгебраических трансцендентных уравненийметодом итераций в различных средах программирования. Постановка задачи 1. Используя комбинированный метод, вычислить с заданной точностью () действительные корни заданного алгебраического уравнения . 2. Решить задачу в различных средах: Fortrani, MS Excel и MathCad. Вариант №1 Вычислить корни уравнения с точностью e =10-5 на предварительно найденном интервале изоляции [a, b]. Содержание работы 1. Текст файла Lab16_V1.f90:
! Lab16_V1.f90 ! FUNCTIONS: ! WinMain() - Entry point for the application ! displays the main window processes the message loop ! Lab16_V1Sub() - Callback routine for the main dialog box ! Lab16_V1Apply()- Callback routine for the APPLY button ! **************************************************************************** ! FUNCTION: WinMain(hInstance, hPrevInstance, lpszCmdLine, nCmdShow) ! PURPOSE: Entry point for the application ! COMMENTS: Displays the main window and processes the message loop ! **************************************************************************** integer*4 function WinMain(hInstance, hPrevInstance, lpszCmdLine, nCmdShow) ! DEC$ IF DEFINED(_X86_) ! DEC$ ATTRIBUTES STDCALL, ALIAS: '_WinMain@16':: WinMain ! DEC$ ELSE ! DEC$ ATTRIBUTES STDCALL, ALIAS: 'WinMain':: WinMain ! DEC$ ENDIF use user32 use kernel32 use dflogm use Lab16_V1Globals implicit none integer*4 hInstance integer*4 hPrevInstance integer*4 lpszCmdLine integer*4 nCmdShow include 'resource.fd' external Lab16_V1Sub external Lab16_V1Apply ! Variables type (T_MSG) mesg integer*4 ret logical*4 lret
! *** передача начальных значений исходных данных строкам write(text_a, '(f5.2)') a write(text_b, '(f5.2)') b write(text_lamb, '(f5.2)') lamb write(text_eps, '(e8.1)') eps
ghInstance = hInstance ghModule = GetModuleHandle(NULL) ghwndMain = NULL
lret = DlgInit(IDD_LAB16_V1_DIALOG, gdlg) if (lret ==.FALSE.) goto 99999 lret = DlgSetSub(gdlg, IDD_LAB16_V1_DIALOG, Lab16_V1Sub) lret = DlgSetSub(gdlg, IDM_APPLY, Lab16_V1Apply)
! *** выводим строки в соответствующие окна редактирования lret = DlgSet(gdlg, IDC_EDIT_A, trim(text_a)) lret = DlgSet(gdlg, IDC_EDIT_B, trim(text_b)) lret = DlgSet(gdlg, IDC_EDIT_EPS, trim(text_eps)) lret = DlgSet(gdlg, IDC_EDIT_LAMB, trim(text_lamb))
lret = DlgModeless(gdlg, nCmdShow) if (lret ==.FALSE.) goto 99999
! Read and process messsages do while(GetMessage (mesg, NULL, 0, 0)) if (DlgIsDlgMessage(mesg).EQV..FALSE.) then lret = TranslateMessage(mesg) ret = DispatchMessage(mesg) end if end do call DlgUninit(gdlg)
WinMain = mesg.wParam return
99999 & ret = MessageBox(ghwndMain, " Error initializing application Lab16_V1" C, & " Error" C, MB_OK) WinMain = 0 end ! **************************************************************************** ! FUNCTION: Lab16_V1Sub (dlg, id, callbacktype) ! PURPOSE: Dialog box callback for initialization and destroy ! COMMENTS: ! **************************************************************************** SUBROUTINE Lab16_V1Sub(dlg, id, callbacktype) ! DEC$ ATTRIBUTES DEFAULT:: Lab16_V1Sub use user32 use dflogm implicit none type (dialog) dlg integer id, callbacktype if (callbacktype == dlg_destroy) then call PostQuitMessage(0) endif END SUBROUTINE Lab16_V1Sub ! **************************************************************************** ! FUNCTION: Lab16_V1Apply (dlg, id, callbacktype) ! PURPOSE: Dialog box callback for APPLY button ! COMMENTS: ! **************************************************************************** SUBROUTINE Lab16_V1Apply(dlg, id, callbacktype) ! DEC$ ATTRIBUTES DEFAULT:: Lab16_V1Apply use dflogm! получаем доступ к диалоговым процедурам use Lab16_V1Globals! подключаем глобальные переменные implicit none! обязательное обявление имен include 'resource.fd'! получаем доступ к ресурсным данным type (dialog) dlg! производный тип для диалога integer id! имя элемента управления, пославшего сообщение integer callbacktype! показывает тип сообщения Windows logical*4 lret! результат диалоговой функции real &! локальные переменные, необходимые для расчета корня Xnew, &! новое значение Х Xold! значение Х на предыдущей итерации real F! заданная функция ! ------------------------ if (callbacktype == dlg_clicked) then ! обработка сообщения " щелчок мышью" ! считать значения текстовых переменных из окон редактироания lret = dlgget(dlg, IDC_EDIT_A, text_a) lret = dlgget(dlg, IDC_EDIT_B, text_b) lret = dlgget(dlg, IDC_EDIT_EPS, text_eps) lret = dlgget(dlg, IDC_EDIT_LAMB, text_lamb) ! обменяться данными между текстовыми и расчетными переменными read(text_a, " (f5.2)") a read(text_b, " (f5.2)") b read(text_eps, *) eps
! *** расчет корня методом итераций Xnew=(a+b)/2! начальное значение Х do Xold=Xnew! переназначение Х для следующей итерации Xnew= Xold - lamb*F(Xold)! новая итерация по Х iter=iter+1! увеличиваем число итераций if(abs(Xnew - Xold)< eps)exit! проверка на завершение поиска enddo kor=(Xnew + Xold)/2! приближенное значение корня ! ------------------------------------- write(text_kor, '(f11.6)') kor! корень write(text_Iter, '(i5)') iter! число итераций ! *** выводим строки в соответствующие окна редактирования lret = DlgSet(gdlg, IDC_EDIT_KOR, trim(text_kor)) lret = DlgSet(gdlg, IDC_EDIT_ITER, trim(text_Iter)) endif END SUBROUTINE Lab16_V1Apply ! **************************************************************************** ! заданная функция real function F(x) real x F=x**3-2.8*x**2-6.2*x+3.7 end function F ! ****************************************************************************
2. Файл модуля глобальных данных.
! **************************************************************************** ! Global data, parameters, and structures ! **************************************************************************** module Lab16_V1Globals use dflogm implicit none ! Parameters integer*4, parameter, public:: SIZEOFAPPNAME = 100 ! Global data integer ghInstance integer ghModule integer ghwndMain type (dialog) gdlg
! --- объявление и инициализация глобальных переменных real:: a=-2.0! левая граница интервала изоляции корня real:: b=-1.0! правая граница интервала изоляции корня real:: eps=1e-5! точность вычислений real:: lamb=0.1! итерационный коэффициент real kor! искомый корень уравнения integer iter! число итераций поиска корня ! --- строки для обмена с текстовыми окнами character(5):: text_a='', text_b='', text_iter='', text_lamb='' character(8):: text_eps='' character(12):: text_kor=''
end module
3. Окно приложения с результатами расчета. 4. Работа в MathCad.
5. Работа в Excel.
6. Выводы: · освоены навыки приближенного нахождения корней алгебраических трансцендентных уравненийметодом итераций в различных средах программирования; · закреплены приемы реализации вычислительного процесса с помощью приложения Windows диалогового типа в среде Fortran.
|