Решение систем уравнений по методу Гаусса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Решение систем уравнений по методу Гаусса

Сообщение Malone32® » 02.05.2005 (Пн) 20:27

нет ли случайно у кого готового кода по теме??

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 02.05.2005 (Пн) 20:30

ух ты... Знать бы что ето такое... мб и написал бы...
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 02.05.2005 (Пн) 21:39

Ищи поисковиками, думаю, даже готовый код найдешь, и даже на Basic'е.

kirrun, это довольно простой алгоритм поиска решений системы линейных уравнений. Если правда интересуешься, опять-таки отсылаю в яндекс, например.

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 03.05.2005 (Вт) 11:10

' метод Гаусса с обратным ходом
Public Sub MetodGausa(a() As Single, X() As Single, B() As Single, N As Integer)

Dim k As Integer, IM As Integer, D As Single, C As Single, P As Integer, Sum As Single, L As Integer

ReDim Preserve a(N, N + 1)
ReDim Preserve X(N)
ReDim Preserve B(N)

For i = 1 To N
a(i, N + 1) = B(i)
Next i

For k = 1 To N - 1
IM = k
For i = k To N
If Abs(a(i, k)) > Abs(a(IM, k)) Then IM = i
Next i
For J = k To N + 1
Swap a(k, J), a(IM, J)
Next J
D = a(k, k)
If D = 0 Then D = 0.000001

For J = k To N + 1
a(k, J) = a(k, J) / D
Next J
For i = k + 1 To N
C = a(i, k)
For J = k To N + 1
a(i, J) = a(i, J) - a(k, J) * C
Next J
Next i
Next k

' обратный ход
X(N) = a(N, N + 1) / a(N, N)
P = 0: Sum = 0
For i = N - 1 To 1 Step -1
L = N - P
For J = L To N
Sum = Sum + a(i, J) * X(L)
L = L + 1
Next J
X(i) = a(i, N + 1) - Sum
P = P + 1: Sum = 0
Next i
End Sub

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 07.05.2005 (Сб) 7:54

Тимофей, а вот это зачем
D = a(k, k)
If D = 0 Then D = 0.000001
Чтоб на нуль не делить?

Если D=0, то надо менять строки или столбцы матрицы

Вообще решение линейных уравнений мягко говоря непростая задача.

Если кому нить надо могу поделиться, спрашивайте. Решает системы людой размерности и весьма быстро, хоть Гауссом, хоть Жорданом
Весь мир матрица, а мы в нем потоки байтов!

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 07.05.2005 (Сб) 10:35

Malone32®
А надо именно методом Гаусса?
Можно, например, СЛАУ решать по формулам Крамера. Реализация проще, правда скорость :roll:

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 07.05.2005 (Сб) 10:41

Malone32® и другим. И Крамером можно. Если предварительно преобразовать матрицу в треугольную форму, то скорость будет вполне приемлимая, хотя конечно Гауссом или Жорданом быстрее
Весь мир матрица, а мы в нем потоки байтов!

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 07.05.2005 (Сб) 19:18

Всем спасибо, задача уже была решена. Она вообще была нужна не мне, а однокурснику, который сам же ее и решил


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 53

    TopList  
cron