/*
* File: main.cpp
* Author: piter cf16 eu
*
* Created on March 7, 2014, 12:01 AM
* http://stackoverflow.com/questions/22237322/solve-ax-b-a-lower-triangular-matrix-in-c/22237724?noredirect=1#comment33770886_22237724
*/
#include <iostream>
#include <algorithm>
#include <iterator>
/**
* solve linear equation system by forward
* substitution on lower triangular matrix
* @param n matrix rank (dimension of solution space)
* @param a lower triangular matrix
* @param b right side
* @param x solution
* http://k...content-available-to-author-only...u.tr/~pehlivan/numerical_analysis/chap02/BackSubstitution.pdf
*/
void solve( int n, float a[4][4], float b[], float x[]) {
float s;
for( int i = 0; i < n; i++) {
s = 0;
for( int j = 0; j < i; j++) {
s = s + a[ i][ j] * x[ j];
}
x[ i] = ( b[ i] - s) / a[ i][ i];
}
}
/*
*
*/
int main(int argc, char** argv) {
int n = 4;
float a[4][4] = { 3, 0, 0, 0, -1, 1, 0, 0, 3, -2, -1, 0, 1, -2, 6, 2};
float b[4] = { 5, 6, 4, 2};
float res[4];
solve( n, a, b, res);
std::copy( res, res + 4, std::ostream_iterator<float>( std::cout, ","));
return 0;
}
LyogCiAqIEZpbGU6ICAgbWFpbi5jcHAKICogQXV0aG9yOiBwaXRlciBjZjE2IGV1CiAqCiAqIENyZWF0ZWQgb24gTWFyY2ggNywgMjAxNCwgMTI6MDEgQU0KICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMjIzNzMyMi9zb2x2ZS1heC1iLWEtbG93ZXItdHJpYW5ndWxhci1tYXRyaXgtaW4tYy8yMjIzNzcyND9ub3JlZGlyZWN0PTEjY29tbWVudDMzNzcwODg2XzIyMjM3NzI0CiAqLwoKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+CgovKioKICogc29sdmUgbGluZWFyIGVxdWF0aW9uIHN5c3RlbSBieSBmb3J3YXJkCiAqIHN1YnN0aXR1dGlvbiBvbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeAogKiBAcGFyYW0gbiBtYXRyaXggcmFuayAoZGltZW5zaW9uIG9mIHNvbHV0aW9uIHNwYWNlKQogKiBAcGFyYW0gYSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeAogKiBAcGFyYW0gYiByaWdodCBzaWRlCiAqIEBwYXJhbSB4IHNvbHV0aW9uCiAqIGh0dHA6Ly9rLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi51LnRyL35wZWhsaXZhbi9udW1lcmljYWxfYW5hbHlzaXMvY2hhcDAyL0JhY2tTdWJzdGl0dXRpb24ucGRmCiAqLwp2b2lkIHNvbHZlKCBpbnQgbiwgZmxvYXQgYVs0XVs0XSwgZmxvYXQgYltdLCBmbG9hdCB4W10pIHsKICBmbG9hdCBzOwoKICBmb3IoIGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIHMgPSAwOwogICAgICAgIGZvciggaW50IGogPSAwOyBqIDwgaTsgaisrKSB7CiAgICAgICAgICAgIHMgPSBzICsgYVsgaV1bIGpdICogeFsgal07CiAgICAgICAgfQogICAgICAgIHhbIGldID0gKCBiWyBpXSAtIHMpIC8gYVsgaV1bIGldOwogICB9Cn0KCi8qCiAqIAogKi8KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CgogICAgaW50IG4gPSA0OwogICAgZmxvYXQgYVs0XVs0XSA9IHsgMywgMCwgMCwgMCwgLTEsIDEsIDAsIDAsIDMsIC0yLCAtMSwgMCwgMSwgLTIsIDYsIDJ9OwogICAgZmxvYXQgYls0XSA9IHsgNSwgNiwgNCwgMn07CiAgICBmbG9hdCByZXNbNF07CiAgICBzb2x2ZSggbiwgYSwgYiwgcmVzKTsKICAgIHN0ZDo6Y29weSggcmVzLCByZXMgKyA0LCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8ZmxvYXQ+KCBzdGQ6OmNvdXQsICIsIikpOwogICAgcmV0dXJuIDA7Cn0=