|
|||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Глава II. Решение системы линейных уравнений с использованием компьютерных приложенийПрограммирование решения системы линейных уравнений на языке Паскаль Для конкретной системы можно написать простую небольшую программу без ввода порядка системы и ее коэффициентов, с использованием уравнений приведенной системы внутри программы в качестве операторов присваивания. Но можно создать алгоритм и для общего случая. Алгоритм проверяет, реализовано ли достаточное условие сходимости (по евклидовой метрике) и при положительном результате приступает к решению системы. В противном случае пользователь получает сообщение о невыполнении указанного условия. В качестве начального приближения для итерационного процесса берется столбец свободных членов. Для контроля завершения итераций применяется евклидова метрика, и поэтому в качестве a используется величина, вычисляемая по формуле .
Текст программы: program Iterat; uses crt; const n=3; {порядок системы} type T=real; var a:array[1..n, 1..n] of T; x,y,b:array[1..n] of T; alfa, s, eps: T; I,j,k:integer; Begin clrscr; writeln(’ввод данных’); for k:=1 to n do for j:=1 to n do Begin writeln(’введите a[’,k,’,’,j,’]’); read(a[k,j]); end; for k:=1 to n do begin writeln(’введите b[’,k,’]’); read(b[k]); end; writeln(’введите eps’); read(eps); alfa:=0; for k:=1 to n do for j:=1 to n do alfa:= alfa + sqr(a[k,j]); alfa:= sqrt(alfa); i:=-1; if alfa<1 then Begin for k:=1 to n do x[k]:= b[k]; repeat s:=0; i:=i+1; for k:=1 to n do begin y[k]:= b[k]; for j:=1 to n do y[k]:=y[k] + a[k,j]*x[j]; s:= s+sqr(x[k]-y[k]); end; for k:=1 to n do x[k]:= y[k]; until sqrt(s)<eps*(1-alfa)/alfa; Writeln(’Итерационный процесс окончен. Число итераций =',i); writeln(‘Решение системы’); for k:=1 to n do writeln(‘x[’,k,’]=’,x[k]) End Else writeln(’Условие сходимости по евклидовой метрике не выполняется’); Repeat until keypressed End. Результат выполнения программы: Вод данных введите a[1,1] введите a[1,2] -0.649 введите a[1,3] -0.034 введите a[2,1] 0.513 введите a[2,2] введите a[2,3] -0.266 введите a[3,1] 0.202 введите a[3,2] -0.363 введите a[3,3] введите b[1] -0.801 введите b[2] -5.735 введите b[3] -1.241 Введите eps 0.0001 Итерационный процесс окончен. Число итераций =21 Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |