Skip to main content

qualia_core_db/domains/financial/economics/
macro_flows.rs

1//! Macroeconomic flow models.
2
3use crate::ode_solver::{rk4_step, PhysicalState};
4
5/// Evaluates a simple macroeconomic System Dynamics flow.
6/// Models the Equation of Exchange (M*V = P*Q).
7/// - state[0] = Money Supply (M)
8/// - state[1] = Price Level (P)
9pub fn simulate_macroeconomic_flow(
10    initial_m: f64,
11    initial_p: f64,
12    velocity: f64,
13    real_gdp: f64,
14    time_horizon: f64,
15    steps: usize,
16) -> PhysicalState {
17    let dt = time_horizon / steps as f64;
18    let mut state = PhysicalState {
19        time: 0.0,
20        values: vec![initial_m, initial_p],
21    };
22
23    let macro_derivative = |_t: f64, y: &[f64]| -> Vec<f64> {
24        let current_m = y[0];
25        let current_p = y[1];
26        let dm_dt = current_m * 0.02;
27        let target_p = (current_m * velocity) / real_gdp;
28        let dp_dt = 0.5 * (target_p - current_p);
29        vec![dm_dt, dp_dt]
30    };
31
32    for _ in 0..steps {
33        rk4_step(&mut state, dt, &macro_derivative);
34    }
35
36    state
37}