Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Решение нелинейных уравнений и систем нелинейных уравненийСодержание книги
Поиск на нашем сайте
Метод простых итераций
Порядок выполнения лабораторной работы: 1. Найти нулевое приближение решения; 2. Преобразовать систему f(x) = 0 к виду х = Ф(х); 3. Проверить условие сходимости метода. Схема алгоритма приведена на рисунке 20. Пример. Решить методом простых итераций систему
В качестве нулевого приближения выберем точку х=1, у = 2.2, z = 2. Преобразуем систему к виду
Текст программы:
PROCEDURE Iteraz; Var I,J,K,J1: Integer; S,U,U1: Real; X2,X3,Eps: Real; R: tvector; Begin Eps:=0.01; X2:=0.0; K:=1; Repeat For J:=1 To Nn Do Begin S:=0.0; For I:=1 To Nn Do Begin S:=S+Aa[i,j]*Xx[i]; End; R[j]:=S; End; For J1:=1 To Nn Do Begin Xx[j1]:=R[j1]; End; X3:=Xx[1]; For I:=1 To Nn Do Begin If (Xx[i]>=X3) Then X3:=Xx[i]; Еnd; For I:=1 To Nn Do Begin Xx[i]:=Xx[i]/X3; End; X1:=X3; U:=Abs(X2-X1); U1:=U/Abs(X1); If (U1>=Eps) Then X2:=X1; K:=K+1; Until ((K>=50)or(U1<=1e-4)) End;
Вычисления по программе привели к следующим результатам: X(1)= 1.1132 Х(2)= 2.3718 Х(3)= 2.1365 Количество итераций:5
Рисунок 20 - Схема алгоритма метода простых итераций Метод Ньютона
Программу можно использовать для решения систем не выше десятого порядка. Входные параметры: n — число уравнений системы (совпадает с числом неизвестных), n£10; х—массив из n действительных чисел, содержащий начальное приближение решения; f— имя внешней процедуры f(n, х, у), вычисляющей по заданным значениям х, расположенным в элементах массива х, текущие значения функции f и размещающей их в элементах массива у; g — имя внешней процедуры g(n, x, d), вычисляющей по заданным значениям х из массива х элементы матрицы ,которая размещается в массиве d размерности n x n; eps — значение условия окончания итерационного процесса. Выходные параметры: х — массив из n действительных чисел (он же входной) содержит при выходе из подпрограммы приближенное значение решения; k—количество итераций. Порядок выполнения лабораторной работы: 1. Определить из геометрических соображений начальное приближение решения. 2. Составить подпрограммы f и g для вычисления значений f и . 3. Составить головную программу, содержащую описание массива х, имен f и g, присвоение фактических значений параметрам n, х, eps, обращение к ТNUTON и печать результатов. 4. Провести вычисления на ЭВМ. Схема алгоритма приведена на рисунке 21. Пример.Решить систему уравнений
Текст программы:
procedure TNuton; var a: T2DArray; i, j: byte; finish: boolean; begin IterCount:= 0; SetLength(a, UrCount); for i:= 0 to High(a) do SetLength(a[i], UrCount + 1); repeat { Заполнение матрицы частных производных } for i:= 0 to High(a) do begin for j:= 0 to High(a[i])-1 do a[i, j]:= DerivativeFn(i, j, Results); a[i, High(a[i])]:= -Poliz.ExternFn(i, Results); end; { Решение полученной СЛАУ методом Гаусса } SetLength(Gauss.Base, Length(a)); for i:= 0 to High(a) do begin SetLength(Gauss.Base[i], Length(a[i])); for j:= 0 to High(a[i]) do Gauss.Base[i, j]:= a[i, j]; end; try Gauss.Solve; except raise Exception.Create('Данную систему этим методом решить невозможно!'); end; { Получение очередного приближения решения СНАУ } finish:= false; for i:= 0 to High(Results) do begin Results[i]:= Results[i] + Gauss.Results[i]; if not finish then finish:= (Abs(Gauss.Results[i]/Results[i]) > Eps); end; inc(IterCount); until not finish; end;
В результате вычисления по программе получены следующие результаты: X(1)= 1.1132 Х(2)= 2.3718 Х(3)= 2.1365 Количество итераций:4
Рисунок 21 - Схема алгоритма метода Ньютона
Варианты заданий
Таблица 4
Тема лабораторной работы №4 для контроля знаний проиллюстрирована контрольно – обучающей программой. Лабораторная работа № 5 Решение проблемы собственных значений и собственных векторов Точные методы Метод Леверрье
Входные параметры: n—целое положительное число, равное порядку n системы; Выходные параметры: b—массив из n действительных чисел, при выходе из программы содержит решение системы. Пример. Вычислить собственные значения и собственные вектора матрицы
|2 2 –2| |2 5 –4| |-2 –4 5|
Текст программы:
PROCEDURE Liver (Var VeS:Tvector;Nn:Integer);; Label 35,270,220,100,80,190,500,250,350,120,10; Var I,J,K,T:Integer; Y,Yy:tvector; {A,Aa:Mas;} S,C,Q,P,H,D,U,M,V,F,W,Yyy,Z,L,R,X,Aaa,B:Real; Sq,Sq1: Real; F1: TEXT; Begin Assign(F1,'last.out'); Rewrite(F1); For I:=Nn Downto 1 Do Y[i+1]:=VeS[i]; Y[1]:=1; K:=1; 35: T:=1; C:=Y[2]/Y[1]; If (Nn=1) Then Begin P:=-C; Q:=0; Goto 270; End; If (Nn=2) Then Begin H:=C*C/4-Y[3]/Y[1]; Goto 220; End; M:=10;C:=4;D:=8;U:=4; V:=8;F:=1;W:=2;T:=0; 80: If(M<>10) Then Goto 100; P:=C;M:=0;Q:=D;C:=U;D:=V; U:=P;V:=Q;Yyy:=C;Z:=D;F:=-F; 100:M:=M+1;H:=0;Q:=Y[1];P:=Y[2]-C*Q;L:=Q; 120:For J:=3 To Nn Do Begin R:=P;P:=Y[j]-C*R-D*Q;Q:=R; R:=L;L:=Q-C*R-H*D;H:=R; End; Q:=Y[Nn+1]-D*Q; S:=L+C*R; If (T=0) Then Begin X:=D*R;H:=R*X+S*L; If H=0 Then Goto 80; End; C:=C+(P*S-Q*R)/H; D:=D+(P*X+Q*L)/H; If ((C-Yyy+D-Z)<>0) Then Goto 190; If (F=-W) Then Begin writeln('Љ®аҐм Ґ ©¤Ґ'); Goto 500; End; W:=-F; 190:H:=C*C/4-D; Sq:=Sqrt((Q-P*C/2)*(Q-P*C/2)+P*P*Abs(H)); If (Sq>0.0000001) Then Goto 80; T:=0; Y[2]:=Y[2]-C*Y[1]; For J:=3 To Nn-1 Do Begin Y[j]:=Y[j]-C*Y[j-1]-D*Y[j-2];End; 220:P:=-C/2; Q:=Sqrt(Abs(H)); If(h>=0) Then Begin M:=P+Q;P:=P-Q;Q:=0; Goto 250; End; M:=P; 250:write(F1,'p',k,'=',m:9:4,' + i',q:7:4);K:=K+1;{Ves[k-1]:=M;}WriteLn(F1,''); 270:write(F1,'p',k,'=',p:9:4,' + i',-q:7:4);K:=K+1;{Ves[k-1]:=P;}WriteLn(F1,''); If(t<>0) Then Goto 350; Nn:=Nn-2; Aaa:=0; Sq1:=Sqrt((S-R*C/2)*(S-R*C/2)+R*R*Abs(H)); If (Sq1<=0.0000001) Then Aaa:=1; B:=0; If (Nn>=2) Then B:=1; If((Aaa+B)=2) Then Begin T:=1; Goto 120; End; Goto 35;350:500: Close(F1); End;
Вычисления по программе привели к следующим результатам: Собственные числа Собственные вектора .10000Е+01 -.94281Е+00.23570Е+00 -.23570Е+00 .10000Е+02 -.33333Е+00 -.66667Е+00.66667Е+00 .10000Е+01.00000Е+00 -.70711Е+00 -.70711Е+00
Варианты заданий для нахождения собственных значений и собственных векторов матрицы приведены в таблице 5. Метод Фадеева
Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий входную матрицу. Выходные параметры: q—массив из n действительных чисел при выходе из программы содержит решение системы.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-08; просмотров: 274; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.168.40 (0.006 с.) |