Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania_k_KR.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
344.06 Кб
Скачать

Var I, j, id, jd : word;

Begin

for i:=1 to n-1 do

for j:=1 to n-1 do

begin

if i<idel then id:=i else id:=i+1;

if j<jdel then jd:=j else jd:=j+1;

d[i,j]:=a[id,jd];

end;

End;

// Функция вычисления определителей второго порядка

Function DeltaP2(a : Ta) : double;

Begin result:=a[1,1]*a[2,2]-a[2,1]*a[1,2]; End;

// Функция вычисления определителей третьего порядка

Function DeltaP3(a : Ta) : double;

Var a1, a2, a3 : Ta;

Begin

ADop(a, 3, 1, 1, a1);

ADop(a, 3, 1, 2, a2);

ADop(a, 3, 1, 3, a3);

result:=a[1,1]*DeltaP2(a1)-

a[1,2]*DeltaP2(a2)+

a[1,3]*DeltaP2(a3);

End;

// Глобальные переменные и основная программа.

Var a, a1, a2, a3 : Ta;

n : word;

BEGIN

n:=3;

InA(n,n,a);

OutA(n,n,a);

ADop(a, n, 1, 1, a1); OutA(n-1,n-1,a1);

writeln(' d2=',DeltaP2(a1):7:0);

ADop(a, n, 1, 2, a2); OutA(n-1,n-1,a2);

writeln(' d3=',DeltaP2(a2):7:0);

ADop(a, n, 1, 3, a3); OutA(n-1,n-1,a3);

writeln(' d=',DeltaP2(a3):7:0);

writeln(' d=', DeltaP3(a):7:1);

readln

END.

Этап 2. Целью этого этапа является отладка функции DeltaP4 для вычисления определителя матрицы 4*4. Несмотря на то, что тексты программ из листингов 1.1а и 1.1б очень похожи, все же имеет смысл выделить эту отладку в отдельный этап из-за большого объема отладочной информации. Кроме того, рекомендуется воспользоваться калькулятором.

Листинг 1.1б. Текст отладочного варианта программы. Заголовок, раздел объявлений констант, типов и раздел описания P&F с текстом подпрограмм InA, OutA, ADop, DeltaP2, DeltaP3 опущен.

Function DeltaP4(a : Ta) : double;

Var a1, a2, a3, a4 : Ta;

Begin

ADop(a, 4, 1, 1, a1); ADop(a, 4, 1, 2, a2);

ADop(a, 4, 1, 3, a3); ADop(a, 4, 1, 4, a4);

result:=a[1,1]*DeltaP3(a1)-a[1,2]*DeltaP3(a2)+

a[1,3]*DeltaP3(a3)-a[1,4]*DeltaP3(a4);

End;

// Глобальные переменные и основная программа.

Var a, a1, a2, a3, a4 : Ta;

n : word;

BEGIN

n:=4;

InA(n,n,a);

OutA(n,n,a);

ADop(a, n, 1, 1, a1); OutA(n-1,n-1,a1);

writeln(' d3=',DeltaP3(a1):7:0);

ADop(a, n, 1, 2, a2); OutA(n-1,n-1,a2);

writeln(' d3=',DeltaP3(a2):7:0);

ADop(a, n, 1, 3, a3); OutA(n-1,n-1,a3);

writeln(' d3=',DeltaP3(a3):7:0);

ADop(a, n, 1, 4, a4); OutA(n-1,n-1,a4);

writeln(' d3=',DeltaP3(a4):7:0);

writeln(' d4=', DeltaP4(a):7:1);

END.

Этап 3. Теперь, практически все готово, чтобы приступить к решению системы из четырех линейных уравнений по методу Крамера, но сначала необходимо сформировать собственно систему уравнений. Во избежание случайного получения главного определителя матрицы, равного нулю, следует отказаться от использования целых значений и вернуться к способу формирования коэффициентов матрицы из листинга 9.1. Наконец, для вектора свободных членов системы необходимо в разделе объявления типов добавить следующее объявление.

Tb = array[1..nmax] of double;

Метод Крамера предусматривает вычисление четырех частных определителей матриц, полученных путем замены в матрице коэффициентов первого, второго, третьего и четвертого столбцов на вектор свободных членов. Процедуру замены ReplCol столбца nr на вектор rCol целесообразно исполнить в общем виде для прямоугольной матрицы a размерностью m*n, с тем, чтобы ее можно было использовать и в других задачах. Подобный алгоритм применим и при замене строк. Процедура ReplCol работает с одной и той же матрицей, иначе говоря, входная матрица одновременно является и выходной, поэтому процедуре необходимо передавать копию матрицы, которую вначале еще надо создать, ну а потом не жалко и испортить. Именно для этих целей в основной программе используется временная матрица buf.

Комментарии в основной программе достаточно ясно отражают сущность действий. Следует лишь подробнее остановиться на последнем фрагменте. Как проверить, что получено именно правильное решение и какова его точность? В данном варианте программы точность решения каждого уравнения системы оценивается как модуль разности между его левой и правой частью, которая должна быть очень малой величиной, а какой именно рекомендуется проверить самостоятельно.

Листинг 1.1в. Текст окончательного варианта программы. Заголовок, раздел объявлений констант, типов и раздел описания P&F с текстом подпрограмм InA, OutA, ADop, DeltaP2, DeltaP3, DeltaP4 опущен.

// Процедура замены.

Procedure ReplCol(m, n : word; Var a : Ta;

nr : word; rCol : Tb);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]