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

Ответить
Mary Yu
Сообщения: 40
Зарегистрирован: 24 сен 2008, 00:15

Теплого врнмени суток!
Поискала в Алгоритмах,ничего не нашла о решении СЛАУ методом Крамера :(
Не очень понимаю как составить алгоритм СЛУ с тремя неизвестными методом Крамера :confused:
Как?С чего начать? Помогите!!
Заранее спасибо!
Mary Yu
Сообщения: 40
Зарегистрирован: 24 сен 2008, 00:15

Решить уравнение с 3мя неизвестными вручную смогу,например:

3*х1- 2 *х2+5* х3=7
7*х1+ 4 *х2-8* х3=3
5*х1- 3 *х2-4* х3=-12

найду главные и побочные определители системы,вычислю их..Но.Как записать алгоритм?Помогите!Таскете!
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

для начала напишите вычисление определителя для матрицы порядка 3
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

Метод Крамера сводится к делению определителей. Сами определители можно вычислять рекурсивно: всякий определить равен сумее с чередующимися знаками элементов любой строки(или столбца) матрицы на её миноры, получающиеся исключением из матрицы строки и столбца, на пересечении которых находтся каждый данный элмент. Миноры - это снова определители, разложите их аналогично. В матрице коэффициентов столбец свободных членов ставится на место каждого столбца матриы для получения матрицы, определитель которой на разделить на главный определитель. В результатае получается неизвестное с тем же номером, как и замененный столбец. Главный определитель - это определитель матрицы коэффициентов. Если непонятно, пришлите коментированные декларации класса матрицы коэффициентов и класса столбца свободных. Под эти декларации я напишу текст прогрммы, решающей СЛАУ и выложу в форуме.
Mary Yu
Сообщения: 40
Зарегистрирован: 24 сен 2008, 00:15

Нашла решение на Visual Basic'e: помогите переделать на Pascal:

Код: Выделить всё

Public i As Integer
Dim j As Integer
Dim n, l, c, m, x, k As Integer
Dim a(10, 10), b(100)
Private Sub Command1_Click()
Print: Print
 a(1, 1) = 5: a(1, 2) = -1: a(1, 3) = 4
  a(2, 1) = 1: a(2, 2) = 4: a(2, 3) = 3
  a(3, 1) = 17: a(3, 2) = -1: a(3, 3) = 0

Form4.CurrentY = 400
For i = 1 To 3
For j = 1 To 3
Form4.ForeColor = QBColor(4)
Form4.CurrentX = 100
Print Spc(j * 4); a(i, j);
Next j
Print
Next i

'Call opred(a)
op1 = a(1, 1) * a(2, 2) * a(3, 3) + a(2, 1) * a(3, 2) * a(1, 3) + a(1, 2) * a(2, 3) * a(3, 1)
op2 = a(3, 1) * a(2, 2) * a(1, 3) + a(1, 1) * a(2, 3) * a(3, 2) + a(2, 1) * a(1, 2) * a(3, 3)
op = op1 - op2
Text1.Text = op

b(1) = 25: b(2) = 16: b(3) = 17
For i = 1 To 3
j = 1
a(i, j) = b(i)
Next i
op1 = a(1, 1) * a(2, 2) * a(3, 3) + a(2, 1) * a(3, 2) * a(1, 3) + a(1, 2) * a(2, 3) * a(3, 1)
op2 = a(3, 1) * a(2, 2) * a(1, 3) + a(1, 1) * a(2, 3) * a(3, 2) + a(2, 1) * a(1, 2) * a(3, 3)
p1 = op1 - op2

  a(1, 1) = 5: a(1, 2) = -1: a(1, 3) = 4
  a(2, 1) = 1: a(2, 2) = 4: a(2, 3) = 3
  a(3, 1) = 17: a(3, 2) = -1: a(3, 3) = 0

b(1) = 25: b(2) = 16: b(3) = 17
For i = 1 To 3
j = 2
a(i, j) = b(i)
Next i
op1 = a(1, 1) * a(2, 2) * a(3, 3) + a(2, 1) * a(3, 2) * a(1, 3) + a(1, 2) * a(2, 3) * a(3, 1)
op2 = a(3, 1) * a(2, 2) * a(1, 3) + a(1, 1) * a(2, 3) * a(3, 2) + a(2, 1) * a(1, 2) * a(3, 3)
p2 = op1 - op2

 a(1, 1) = 5: a(1, 2) = -1: a(1, 3) = 4
  a(2, 1) = 1: a(2, 2) = 4: a(2, 3) = 3
  a(3, 1) = 17: a(3, 2) = -1: a(3, 3) = 0

b(1) = 25: b(2) = 16: b(3) = 17
For i = 1 To 3
j = 3
a(i, j) = b(i)
Next i
op1 = a(1, 1) * a(2, 2) * a(3, 3) + a(2, 1) * a(3, 2) * a(1, 3) + a(1, 2) * a(2, 3) * a(3, 1)
op2 = a(3, 1) * a(2, 2) * a(1, 3) + a(1, 1) * a(2, 3) * a(3, 2) + a(2, 1) * a(1, 2) * a(3, 3)
p3 = op1 - op2

X1 = p1 / op
X2 = p2 / op
x3 = p3 / op

Label4.Caption = X1
Label5.Caption = X2
Label6.Caption = x3
End Sub
Что будет вместо Лэйблов в паскале?
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

K
&quot писал(а):Что будет вместо Лэйблов в паскале?
Если object (DELPHI), то лэйблы и будут. Иначе writeln(x1:10:4);
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Mary Yu
Сообщения: 40
Зарегистрирован: 24 сен 2008, 00:15

Разобралась))Всем спасибо!

Поскольку это метод Крамера,то можно за давать главную матрицу и случайным способом,необязательно готовую,
А вот с массивом столбцом сложнее.Т.к. велика вероятность,что остальные побочные обпределители могут равны 0.
Воть.
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

Если побочный определитель равен 0, то всё нормально. В этом случае просто x будет равен 0. Но вот если главный определитель равен 0, то система вообще не имеет единственного решения.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответить