Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 20.03.2017
Сообщений: 17

Программирование алгоритмов решения системы алгебраических уравнений

20.03.2017, 08:21. Показов 1694. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, с написанием программы

Метод Крамера

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
\begin{cases}1.7x_1+10x_2-1.3x_3+2.1x_4=3.1 \\ 3.1x_1+1.7x_2-2.1x_3+5.4x_4=2.1 \\ 3.3x_1-7.7x_2+4.4x_3-5.1x_4=1.9 \\ 10x_1-20.1x_2+20.4x_3+1.7x_4=1.8 \end{cases}<br />
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2017, 08:21
Ответы с готовыми решениями:

Решение системы алгебраических уравнений, используя метод Крамера
Написать программу по решению системы алгебраического уравнения,используя метод Крамера! система ...

составить программу решения системы линейных алгебраических уравнений
Составить программу след. методами: Методом Гаусса с выбором главного элемента, Методом Крамера. Программно реализовать...

Составить подпрограмму решения системы двух линейных алгебраических уравнений по правилу Крамера
Всем привет. Есть задание. Работа с Функциями. Составить подпрограмму решения системы двух линейных алгебраических уравнений по правилу...

4
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
20.03.2017, 09:08
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

тут вычисление определителя Вычисление определителя и обратной матрицы
рассчитаете 5 определителей и найдете x1...x4 по формуле Крамера
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
20.03.2017, 09:20
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const a:array[,]of Real=((1.7,10,-1.3,2.1),(3.1,1.7,-2.1,5.4),(3.3,-7.7,4.4,-5.1
),(10,-20.1,20.4,1.7));b:array of Real=(3.1,2.1,1.9,1.8);
function Opr2(a00,a01,a10,a11:Real):=a00*a11-a01*a10;
function Opr3(a00,a01,a02,a10,a11,a12,a20,a21,a22:Real):=a00*Opr2(a11,a12,a21,
a22)-a01*Opr2(a10,a12,a20,a22)+a02*Opr2(a10,a11,a20,a21);
function Opr(a:array[,]of Real):=a[0,0]*Opr3(a[1,1],a[1,2],a[1,3],a[2,1],a[2,2],
a[2,3],a[3,1],a[3,2],a[3,3])-a[0,1]*Opr3(a[1,0],a[1,2],a[1,3],a[2,0],a[2,2],a[2,
3],a[3,0],a[3,2],a[3,3])+a[0,2]*Opr3(a[1,0],a[1,1],a[1,3],a[2,0],a[2,1],a[2,3],a
[3,0],a[3,1],a[3,3])-a[0,3]*Opr3(a[1,0],a[1,1],a[1,2],a[2,0],a[2,1],a[2,2],a[3,0
],a[3,1],a[3,2]);
  
function insertColumn(a:array[,]of Real;b:array of Real;n:Integer):array[,]of Real;
begin
  var Rows := a.GetLength(0)-1; var Cols := a.GetLength(1)-1;
  SetLength(Result, Rows+1, Cols+1);
  for var Row := 0 to Rows do
    for var Col := 0 to Cols do Result[Row, Col] := Col = n ? b[Row] : a[Row, Col];
end;
 
begin
  var d := Opr(a);
  if d <> 0 then
    for var Col := 0 to a.GetLength(1)-1 do
      WriteLn('x', Col+1, ' = ', Opr(insertColumn(a, b, Col)) / d)
  else
    WriteLn('Нельзя вычислить данным методом!');
end.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33412 / 21522 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
20.03.2017, 10:46
Ну, для фиксированной матрицы 4*4 можно было сделать гораздо проще:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
type
  vec = array[1 .. 4] of real;
  mxCols = array[1 .. 4] of vec;
  mxRows = array[1 .. 4] of vec;
  
function T(m : mxCols) : mxRows;
begin
  for var i := 1 to 4 do for var j := 1 to 4 do result[j, i] := m[i, j];
end;
  
function Det(m : mxRows) : real;
begin
  result := 
  m[1][4] * m[2][3] * m[3][2] * m[4][1] - m[1][3] * m[2][4] * m[3][2] * m[4][1] -
  m[1][4] * m[2][2] * m[3][3] * m[4][1] + m[1][2] * m[2][4] * m[3][3] * m[4][1] +
  m[1][3] * m[2][2] * m[3][4] * m[4][1] - m[1][2] * m[2][3] * m[3][4] * m[4][1] -
  m[1][4] * m[2][3] * m[3][1] * m[4][2] + m[1][3] * m[2][4] * m[3][1] * m[4][2] +
  m[1][4] * m[2][1] * m[3][3] * m[4][2] - m[1][1] * m[2][4] * m[3][3] * m[4][2] -
  m[1][3] * m[2][1] * m[3][4] * m[4][2] + m[1][1] * m[2][3] * m[3][4] * m[4][2] +
  m[1][4] * m[2][2] * m[3][1] * m[4][3] - m[1][2] * m[2][4] * m[3][1] * m[4][3] -
  m[1][4] * m[2][1] * m[3][2] * m[4][3] + m[1][1] * m[2][4] * m[3][2] * m[4][3] +
  m[1][2] * m[2][1] * m[3][4] * m[4][3] - m[1][1] * m[2][2] * m[3][4] * m[4][3] -
  m[1][3] * m[2][2] * m[3][1] * m[4][4] + m[1][2] * m[2][3] * m[3][1] * m[4][4] +
  m[1][3] * m[2][1] * m[3][2] * m[4][4] - m[1][1] * m[2][3] * m[3][2] * m[4][4] -
  m[1][2] * m[2][1] * m[3][3] * m[4][4] + m[1][1] * m[2][2] * m[3][3] * m[4][4];
end;
 
function insertColumn(m : mxCols; b : vec; i : integer) : mxCols;
begin 
  result := m; result[i] := b;
end;
 
var 
  a : mxCols :=
  (( 1.7,  3.1,  3.3,  10.0), 
   (10.0,  1.7, -7.7, -20.1),
   (-1.3, -2.1,  4.4,  20.4),
   ( 2.1,  5.4, -5.1,   1.7));
  b : vec := 
   (3.1, 2.1, 1.9, 1.8);
 
begin
  var d := Det(T(a));
  if d <> 0 then
    for var i := 1 to 4 do
      WriteLn('x', i, ' = ', Det(T(insertColumn(a, b, i))) / d)
  else
    WriteLn('Нельзя вычислить данным методом!');
end.
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
20.03.2017, 10:51
и для произвольной системы (из ссылки выше):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function Minor(a:array[,] of real;n:integer):array[,] of real;
begin
  var l:=a.GetLength(0)-1;
  SetLength(Result,l,l);
  for i:integer:=1 to l do begin
    for j:integer:=0 to n-1 do Result[i-1,j]:=a[i,j];
    for j:integer:=n+1 to l do Result[i-1,j-1]:=a[i,j];
  end;
end;
 
function Det(a:array[,] of real):real;
begin
 var k:=1;
 var n:=a.GetLength(0); 
 if (n<1) then begin writeln('Determinant: Cann''t run. N=',n); halt; end;
 if n=1 then Result:=a[0,0]
 else if n=2 then Result:=a[0,0]*a[1,1]-a[1,0]*a[0,1]
 else for i:integer:=0 to n-1 do begin
     var m:=Minor(a,i);
     Result+=k*a[0,i]*Det(m);
     k:=-k;
 end;
end;
 
function GMatr(a:array[,] of real):array[,] of real;
begin
  var l:=a.GetLength(0);
  SetLength(Result,l,l);
  for i:integer:=0 to l-1 do for j:integer:=0 to l-1 do Result[i,j]:=a[i,j];
end;     
 
 
var
  a:array[,] of real;
 
 
begin  
  var n:=ReadlnInteger('Порядок слау (n=):');
  SetLength(a,n,n+1);
  writeln('Введите коэффициенты по строкам:');
  for i:integer:=0 to n-1 do begin
    write('Строка ',i+1,':');
    for j:integer:=0 to n do read(a[i,j]);
  end;
    var b:=GMatr(a);
    var d:=Det(b);
    if d=0 then writeln('D=0') else
    for j:integer:=0 to a.GetLength(0)-1 do begin
      b:=GMatr(a);  
      for i:integer:=0 to a.GetLength(0)-1 do b[i,j]:=a[i,a.GetLength(1)-1];
         writeln('x(',j,')=',Det(b)/d:0:6);      
    end;  
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.03.2017, 10:51
Помогаю со студенческими работами здесь

Разработать программу решения систем линейных алгебраических уравнений
Разработать программу решения систем линейных алгебраических уравнений одним из методов (метод обратной матрицы, метод Крамера). Обе задачи...

Численные методы решения систем линейных алгебраических уравнений (СЛАУ) в Pascal
Найти решение СЛАУ A*X=B , где A - матрица коэффициентов,B - вектор свободных членов,X - вектор неизвестных, методом прогонки. Заданы...

Графическое решение системы нелинейных алгебраических уравнений
Вообщем нужно написать программу на паскале, которая решает систему нелинейных алгебраических уравнений и строит графики. Программа по...

Составить программу решения системы линейных алгебраических уровнений
Скласти програму розв'язання системи лінійних алгебраїчних рівнянь двома методами:  методом оберненої матриці,  методом...

Решение системы линейных алгебраических уравнений методом Гаусса
Здравствуйте, прошу помощи в решении в паскале методом Гаусса 13x1 + x2 + 0.4x3 + 0.6x4 + 0.11x5 = 7.6 3x1 + 10x2 - 0.6x3 + 3x5 =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru