- •Содержание
- •1. Численные методы в электротехнических задачах
- •1.1. Численные методы решения систем линейных алгебраических уравнений (слау)
- •1.1.1. Классификация методов
- •1.1.2. Обусловленность системы уравнений
- •1.1.3. Собственные значения и собственные векторы матриц
- •1.1.4. Векторные нормы
- •1.1.5. Методы решения некорректных задач
- •1.1.6. Точные методы расчёта слау
- •1.1.6.1. Классический метод Гаусса
- •I, j, k : IntType;
- •1.1.6.2. Метод Гаусса с выбором главного элемента
- •I,j,k: IntType;
- •I, j, k : IntType;
- •1.1.6.3. Гауссово исключение и lu-разложение
- •1.1.6.4. Матрично-векторные формы - разложения
- •1.1.6.5. Алгоритм Донгарры-Айзенштата.
- •Var I,j,k,s : Integer;
- •Var I,j,k : Integer;
- •1.1.6.6. Метод вращения
- •I, j, k : IntType;
- •I, j, k : IntType;
- •1.1.6.7. Схема Жордана
- •I,j,k : IntType;
- •I, j, k : IntType;
- •1.1.6.8. Факторизация
- •1.1.6.9. Метод квадратных корней (Холесского)
- •I, j, k : IntType;
- •1.1.6.10. Итерационное уточнение
- •1.1.6.11. Особенности решения слау для ленточных симметричных и несимметричных матриц
- •Алгоритм классического метода Гаусса для ленточной симметричной матрицы
- •I, j, k,k1, n , Jend : IntType;
- •I, j, k,k1, n , Jend, c : IntType;
- •1.1.7. Итерационные методы слау
- •1.1.7.1. Решение слау методом простых итераций
- •I, j, k : IntType;
- •X0 : tVector;
- •1.1.7.2. Решение слау методом Гаусса-Зейделя
- •I, j, k : IntType;
- •X0 : tVector;
- •1.1.7.3. Метод релаксации
- •I, j, k : IntType;
- •X0 : tVector;
- •Литература
I, j, k : IntType;
X0 : tVector;
Err : RealType;
S : String;
Flag : Boolean;
begin
Form1.Memo1.Visible:= True;
Form1.Memo1.Clear;
Form1.Chart1.SeriesList[0].Clear;
For i:= 1 to N do X0[i]:= 0.0; {Начальные значения}
k:=0;
Flag:= False;
{Итерации по методу Зейделя}
While (Flag = False) and (k <= M) do
begin
{Подготовка к итерации}
Flag:= True; {Решение найдено}
Err:=0;
For i:=1 to N do
begin
X[i]:= -B[i];
For j:=1 to N do X[i]:= X[i]+A[i,j]*X0[j];
{Проверка решения}
Err:= Abs(X[i]/A[i,i])/N;
If Err >= Epsilon Then Flag:= False;
{Новое приближение}
{X[i]:= X0[i] - (X[i]/A[i,i]); }
{С коэффициентом релаксации}
X[i]:= X0[i] - 0.7*(X[i]/A[i,i]);
X0[i]:= X[i]
end;
Form1.Chart1.SeriesList[0].AddXY(k,Err);
k:= k+1;
{Заполнение Form1.ProgressBar2}
Form1.ProgressBar2.Position:=Round(100*k/M);
end;
Form1.SpinEdit2.Value:= k; {Вывод количества итераций}
Form1.Memo1.Visible:= True;
Form1.Memo1.Clear;
Form1.Memo1.Lines.Add('Метод простых итераций.');
If Flag= True Then Form1.Memo1.Lines.Add('Заданная точность '+FloatToStr(Epsilon)+' достигнута');
If Flag= False Then
begin
Form1.Memo1.Lines.Add('Заданная точность '+FloatToStr(Epsilon)+' не достигнута.');
Form1.Memo1.Lines.Add(Format('при k = %d', [k]));
Form1.Memo1.Lines.Add('Увеличьте количество итераций.');
end;
For i := 1 to N do
Form1.Memo1.Lines.Add(Format('X[%d] = %f', [i, X[i]]));
For i:= 1 to N do
Form1.StringGrid1.Cells[N+3, i]:= FloatToStrF(1.0*X[i],ffGeneral,3,3);
end;
1.1.7.3. Метод релаксации
Во многих задачах, для которых потенциально полезен метод Гаусса-Зейделя, удобна следующая важная модификация этого метода. Вместо того чтобы в качестве брать решение уравнения
, (1.5)
положим
(1.6)
где - релаксационный параметр. Если подставить решение уравнения (1.5) в уравнение (1.6), то после группировки слагаемых получим
,
и с помощью итерацию можно записать в виде
(1.7)
Здесь - соответственно диагональная, строго нижняя треугольная и строго верхняя треугольная матрицы (т. е. диагональные элементы матриц и равны нулю).
Очевидно, что в случае итерация (1.7) сводится к методу Гаусса-Зейделя. Итерацию (1.7) при произвольных значениях называют методом последовательной верхней релаксации (сокращенно методом ПВР), иногда в литературе этот термин используют лишь в случае .
Как показала практика вычислений при ( -симметричная, вещественная матрица) целесообразно брать показатель релаксации в пределах ; в случае метод релаксации обычно называют методом сверхрелаксации.
В частности, во многих случаях оптимальное значение параметра релаксации определяется экспериментально.
Пример 1.14 Метод последовательной верхней релаксации
procedure PVR(N,M:IntType; A:TMatrix; B:TVector; Var X:TVector);
{Реализация метода PVR}
Var