Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример оформления отчета






Лабораторная работа № 16-3

ОПРЕДЕЛЕНИЕ КОРНЕЙ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ

МЕТОДОМ ИТЕРАЦИЙ

Выполнил ст. 211 гр. Иванов А.П.  
Проверил доцент каф. 304 Скоб Ю.А.  

 

Цель работы – освоить навыки приближенного нахождения корней алгебраических трансцендентных уравненийметодом итераций в различных средах программирования.

Постановка задачи

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.



Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.028 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал