MCPcopy Create free account
hub / github.com/elftausend/graplot / solve_lu

Function solve_lu

src/polynomial.rs:112–150  ·  view source on GitHub ↗
(n: usize, lhs: &[f64], rhs: &[f64])

Source from the content-addressed store, hash-verified

110}
111
112pub fn solve_lu(n: usize, lhs: &[f64], rhs: &[f64]) -> Vec<f64> {
113 let mut lu = vec![0f64; n * n];
114 let mut sum;
115 for i in 0..n {
116 for j in i..n {
117 sum = 0.;
118 for k in 0..i {
119 sum += lu[i * n + k] * lu[k * n + j];
120 }
121 lu[i * n + j] = lhs[i * n + j] - sum;
122 }
123 for j in (i + 1)..n {
124 sum = 0.;
125 for k in 0..i {
126 sum += lu[j * n + k] * lu[k * n + i];
127 }
128 lu[j * n + i] = (1. / lu[i * n + i]) * (lhs[j * n + i] - sum)
129 }
130 }
131
132 let mut y = vec![0.; n];
133 for i in 0..n {
134 sum = 0.;
135 for k in 0..i {
136 sum += lu[i * n + k] * y[k];
137 }
138 y[i] = rhs[i] - sum;
139 }
140
141 let mut x = vec![0.; n];
142 for i in (0..n).rev() {
143 sum = 0.;
144 for k in (i + 1)..n {
145 sum += lu[i * n + k] * x[k];
146 }
147 x[i] = (1. / lu[i * n + i]) * (y[i] - sum);
148 }
149 x
150}

Callers 2

polynomialFunction · 0.85
test_lesFunction · 0.85

Calls

no outgoing calls

Tested by 1

test_lesFunction · 0.68