spagestic commited on
Commit
7d283c3
·
1 Parent(s): db31576

feat: enhance Gradio interfaces for first-order and second-order ODE solvers with improved descriptions and examples

Browse files
maths/differential_equations/solve_first_order_ode.py CHANGED
@@ -67,7 +67,7 @@ first_order_ode_interface = gr.Interface(
67
  fn=lambda ode_str, t_span_str, y0_str, t_eval_count, method: solve_first_order_ode(
68
  string_to_ode_func(ode_str, ('t', 'y')),
69
  parse_time_span(t_span_str),
70
- parse_float_list(y0_str), # y0 can be a list for systems
71
  int(t_eval_count),
72
  method
73
  ),
@@ -87,9 +87,20 @@ first_order_ode_interface = gr.Interface(
87
  gr.JSON(label="Raw Data (t, y values)", visible=lambda res: res['success']) # For users to copy if needed
88
  ],
89
  title="First-Order ODE Solver",
90
- description="Solves dy/dt = f(t,y) or a system of first-order ODEs. " \
91
- "WARNING: Uses eval() for the ODE function string - potential security risk. " \
92
- "For systems, `y` in lambda is `[y1, y2, ...]`, return `[dy1/dt, dy2/dt, ...]`. " \
93
- "Example (Damped Oscillator): ODE: lambda t, y: [y[1], -0.5*y[1] - y[0]], y0: 1,0, Timespan: 0,20",
 
 
 
 
 
 
 
 
 
 
 
94
  flagging_mode="manual"
95
  )
 
67
  fn=lambda ode_str, t_span_str, y0_str, t_eval_count, method: solve_first_order_ode(
68
  string_to_ode_func(ode_str, ('t', 'y')),
69
  parse_time_span(t_span_str),
70
+ parse_float_list(y0_str),
71
  int(t_eval_count),
72
  method
73
  ),
 
87
  gr.JSON(label="Raw Data (t, y values)", visible=lambda res: res['success']) # For users to copy if needed
88
  ],
89
  title="First-Order ODE Solver",
90
+ description="""
91
+ Solves dy/dt = f(t, y) or a system of first-order ODEs.
92
+
93
+ - Enter a Python lambda for the ODE (e.g., `lambda t, y: -y*t`).
94
+ - For systems, use `y` as a list: `lambda t, y: [y[1], -0.1*y[1] - y[0]]`.
95
+ - Initial conditions: single value (e.g., `1`) or comma-separated for systems (e.g., `1,0`).
96
+
97
+ **Examples:**
98
+
99
+ - Simple: `lambda t, y: -y*t`, y0: `1`, t_span: `0,5`
100
+ - System: `lambda t, y: [y[1], -0.1*y[1] - y[0]]`, y0: `1,0`, t_span: `0,20`
101
+ - Lotka-Volterra: `lambda t, y: [1.5*y[0] - 0.8*y[0]*y[1], 0.5*y[0]*y[1] - 0.9*y[1]]`, y0: `10,5`, t_span: `0,20`
102
+
103
+ WARNING: Uses eval() for the ODE function string - potential security risk.
104
+ """,
105
  flagging_mode="manual"
106
  )
maths/differential_equations/solve_second_order_ode.py CHANGED
@@ -104,8 +104,18 @@ second_order_ode_interface = gr.Interface(
104
  gr.JSON(label="Raw Data (t, y, dy_dt values)", visible=lambda res: res['success'])
105
  ],
106
  title="Second-Order ODE Solver",
107
- description="Solves d²y/dt² = f(t, y, dy/dt). "
108
- "WARNING: Uses eval() for the ODE function string - potential security risk. "
109
- "Example (Pendulum): ODE: lambda t, y, dy_dt: -9.81/1.0 * math.sin(y), y0: math.pi/4, dy0/dt: 0, Timespan: 0,10",
 
 
 
 
 
 
 
 
 
 
110
  flagging_mode="manual"
111
  )
 
104
  gr.JSON(label="Raw Data (t, y, dy_dt values)", visible=lambda res: res['success'])
105
  ],
106
  title="Second-Order ODE Solver",
107
+ description="""
108
+ Solves d²y/dt² = f(t, y, dy/dt) for a single second-order ODE.
109
+
110
+ - Enter a Python lambda for the ODE (e.g., `lambda t, y, dy_dt: -0.1*dy_dt - math.sin(y)`).
111
+ - Initial y(t_start) and dy/dt(t_start) must be single values.
112
+
113
+ **Examples:**
114
+
115
+ - Damped oscillator: `lambda t, y, dy_dt: -0.1*dy_dt - y`, y0: `1.0`, dy0/dt: `0.0`, t_span: `0,20`
116
+ - Simple pendulum: `lambda t, y, dy_dt: -9.81/1.0 * math.sin(y)`, y0: `math.pi/4`, dy0/dt: `0`, t_span: `0,10`
117
+
118
+ WARNING: Uses eval() for the ODE function string - potential security risk.
119
+ """,
120
  flagging_mode="manual"
121
  )