Здравствуйте!
Сами мы не местные
, не математики т.е.
Я программист, но серьезной математикой заниматься особо не приходилось.
Столкнулся я с необходимостью решения системы линейных уравнений; к этому свелась задача. Попробую сформулировать...
Имеется система уравнений
A1.1*X1 + A1.2*X2 +...+ A1.n*Xn = B1
A2.1*X1 + A2.2*X2 +...+ A2.n*Xn = B2
Am.1*X1 + Am.2*X2 +...+ Am.n*Xn = Bm
Для каждого уравнения есть свои граничные условия:
p1.1 >= b <= p2.1 ... p1.m >= b <= p2.m . Значения
p зависят от
B и задаются в виде % от него. Пользователь задает их сам - погрешность(+/-) для каждого уравнения в процентах от
B.
И условие:
X(1...n) >= 0Все значения в матрицах
A и
B, так же >= 0.
Матрицы могут иметь размерности:
25 >= n >= 1, 35 >= m >= 1.
Но наиболее частая ситуация
n = 3...5, m = 10...15. Хотя будут и совсем простые, типа
n=1...2, m=1...3.
Причем матрицы, в основном, будут иметь вид:
|_26.04___43.821___0______|__103.21
|_1.69____3_______14.654__|__55.12
|_55.80___12.47____54.324_|__101.4
|_0_______31.586___0_____|__92.6
|_4.6_____0.43_____18.221_|__67
|_12.04___0________33.645_|__71
|_0.021___0.72_____0______|__1.2
|_0.006___0.14_____0______|__0.2
|_0.007___0.21_____0______|__0.51
|_0_______0.071____0______|__0.14
|_0_______0.076____0______|__0.03
|_0_______0.004____0______|__0.01
В основном более разреженные снизу. Основная плотность будет в верхней части (
m=1...6).
Необходимо найти наиболее близкие решения, т.к.
точные решения будут возможны лишь в 1-5% случаев.
Т.е. получаются уравнения вида
Am.1*X1 + Am.2*X2 +...+ Am.n*Xn - (bm + [0...p2 || 0...-p1]) => 0 (не знаю как это изобразить математически). Разность левой и правой части с соответствующими допустимыми отклонениями, стремится к нулю.
Разбирался с разными методами решения (Якоби, Гаусса, Йордана-Гаусса, Гаусса-Зейделя, Чолески, QRD, LUD и SVD). Почитав литературу и форум я понял, что для разного вида систем необходимо использовать разные методы.
И вот с вопросом
"какие и когда использовать?", разобраться не могу
.
Сейчас выбираю каким пакетом воспользоваться -
CLAPACK или
GSL, еще не определился...
В общем хочу разработать алгоритм решения такого вида уравнений, но моих знаний явно не хватает
.
Какие должны быть шаги по определению метода для решения подобных СЛАУ? Как вообще решать системы уравнений с диапазонами вместо точных значений в матрице
B?