1pub fn solve_3_variables(
7 x1: f64,
8 x2: f64,
9 x3: f64,
10 y1: f64,
11 y2: f64,
12 y3: f64,
13 z1: f64,
14 z2: f64,
15 z3: f64,
16 res_1: f64,
17 res_2: f64,
18 res_3: f64,
19) -> (f64, f64, f64) {
20 let dp = (x1 * y2 * z3) + (y1 * z2 * x3) + (z1 * x2 * y3);
21 let ds = (x3 * y2 * z1) + (y3 * z2 * x1) + (z3 * x2 * y1);
22 let determinant = dp - ds;
23 let dpx = (res_1 * y2 * z3) + (y1 * z2 * res_3) + (z1 * res_2 * y3);
24 let dsx = (res_3 * y2 * z1) + (y3 * z2 * res_1) + (z3 * res_2 * y1);
25 let determinant_x = dpx - dsx;
26 let x = determinant_x / determinant;
27 let dpy = (x1 * res_2 * z3) + (res_1 * z2 * x3) + (z1 * x2 * res_3);
28 let dsy = (x3 * res_2 * z1) + (res_3 * z2 * x1) + (z3 * x2 * res_1);
29 let determinant_y = dpy - dsy;
30 let y = determinant_y / determinant;
31 let dpz = (x1 * y2 * res_3) + (y1 * res_2 * x3) + (res_1 * x2 * y3);
32 let dsz = (x3 * y2 * res_1) + (y3 * res_2 * x1) + (res_3 * x2 * y1);
33 let determinant_z = dpz - dsz;
34 let z = determinant_z / determinant;
35
36 (x, y, z)
37}
38pub fn solve_2_variables(x1: f64, x2: f64, y1: f64, y2: f64, res_1: f64, res_2: f64) -> (f64, f64) {
40 let dp = x1 * y2;
41 let ds = y1 * x2;
42 let determinant = dp - ds;
43 let dpx = res_1 * y2;
44 let dsx = res_2 * y1;
45 let determinant_x = dpx - dsx;
46 let x = determinant_x / determinant;
47 let dpy = x1 * res_2;
48 let dsy = x2 * res_1;
49 let determinant_y = dpy - dsy;
50 let y = determinant_y / determinant;
51
52 (x, y)
53}
54pub fn print_3_variables_result(result: (f64, f64, f64)) {
56 println!("x = {}", result.0);
57 println!("y = {}", result.1);
58 println!("z = {}", result.2);
59}
60pub fn print_2_variables_result(result: (f64, f64)) {
62 println!("x = {}", result.0);
63 println!("y = {}", result.1);
64}
65
66#[cfg(test)]
67mod tests {
68 use super::{solve_2_variables, solve_3_variables};
69 #[test]
70 fn test_2_determinants() {
71 let result = solve_2_variables(3.0, 4.0, 8.0, -9.0, 8.0, -77.0);
72 assert_eq!(result, (-4.0, 5.0));
73 }
74 #[test]
75 fn test_3_determinants_2() {
76 let result = solve_3_variables(
77 9.0, -5.0, 7.0, 4.0, -3.0, 1.0, -6.0, 6.0, -3.0, -6.0, -5.0, -5.0,
78 );
79 assert_eq!(result, (-2.0, -3.0, -4.0));
80 }
81 #[test]
82 fn test_3_determinants() {
83 let result = solve_3_variables(
84 5.0, 2.0, 1.0, -2.0, 5.0, -4.0, 1.0, -2.0, 3.0, 24.0, -14.0, 26.0,
85 );
86 assert_eq!(result, (3.0, -2.0, 5.0));
87 }
88}