Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -296,18 +296,18 @@ with tab1:
|
|
296 |
y_1 = st.number_input("y", value=1.0, key="y_1")
|
297 |
z_min_1 = st.number_input("z_min", value=-10.0, key="z_min_1")
|
298 |
z_max_1 = st.number_input("z_max", value=10.0, key="z_max_1")
|
299 |
-
with st.expander("Resolution Settings"):
|
300 |
-
beta_steps = st.slider("β steps", min_value=51, max_value=501, value=201, step=50)
|
301 |
-
z_steps = st.slider("z grid steps", min_value=1000, max_value=100000, value=50000, step=1000)
|
302 |
st.subheader("Custom Expression")
|
303 |
st.markdown("Enter the **numerator** and **denominator** expressions (as functions of `z_a`, `beta`, `y`, and `s`) for the custom curve. Here, 'a' is an alias for `z_a`.")
|
304 |
st.markdown("The default expressions yield:")
|
305 |
st.latex(r"\frac{y\beta(z_a-1)s+(a\,s+1)((y-1)s-1)}{(a\,s+1)(s^2+s)}")
|
306 |
default_num = "y*beta*(z_a-1)*s + (a*s+1)*((y-1)*s-1)"
|
307 |
default_denom = "(a*s+1)*(s**2+s)"
|
308 |
-
custom_num_expr = st.text_input("Numerator Expression", value=default_num)
|
309 |
-
custom_denom_expr = st.text_input("Denominator Expression", value=default_denom)
|
310 |
-
s_custom = st.number_input("Custom s value", value=1.0, step=0.1)
|
311 |
if st.button("Compute z vs. β Curves", key="tab1_button"):
|
312 |
with col2:
|
313 |
fig = generate_z_vs_beta_plot(z_a_1, y_1, z_min_1, z_max_1, beta_steps, z_steps,
|
@@ -338,13 +338,13 @@ with tab2:
|
|
338 |
st.header("Plot Complex Roots vs. z")
|
339 |
col1, col2 = st.columns([1, 2])
|
340 |
with col1:
|
341 |
-
beta = st.number_input("β", value=0.5, min_value=0.0, max_value=1.0)
|
342 |
-
y_2 = st.number_input("y", value=1.0, key="
|
343 |
-
z_a_2 = st.number_input("z_a", value=1.0, key="
|
344 |
-
z_min_2 = st.number_input("z_min", value=-10.0, key="
|
345 |
-
z_max_2 = st.number_input("z_max", value=10.0, key="
|
346 |
-
with st.expander("Resolution Settings"):
|
347 |
-
z_points = st.slider("z grid points", min_value=1000, max_value=10000, value=5000, step=500)
|
348 |
if st.button("Compute Complex Roots vs. z", key="tab2_button"):
|
349 |
with col2:
|
350 |
fig_im, fig_re = generate_root_plots(beta, y_2, z_a_2, z_min_2, z_max_2, z_points)
|
@@ -357,20 +357,21 @@ with tab3:
|
|
357 |
st.header("Curve Intersection Analysis")
|
358 |
col1, col2 = st.columns([1, 2])
|
359 |
with col1:
|
360 |
-
z = st.slider("z", min_value=-10.0, max_value=10000.0, value=1.0, step=0.1)
|
361 |
-
y_3 = st.slider("y", min_value=0.1, max_value=1000.0, value=1.0, step=0.1, key="
|
362 |
-
beta_3 = st.slider("β", min_value=0.0, max_value=1.0, value=0.5, step=0.01, key="
|
363 |
-
a = st.slider("a", min_value=0.1, max_value=1000.0, value=1.0, step=0.1)
|
364 |
st.subheader("s Range")
|
365 |
-
s_min = st.number_input("s_min", value=-5.0)
|
366 |
-
s_max = st.number_input("s_max", value=5.0)
|
367 |
-
with st.expander("Resolution Settings"):
|
368 |
-
s_points = st.slider("s grid points", min_value=1000, max_value=10000, value=5000, step=500)
|
369 |
-
intersection_guesses = st.slider("Intersection search points", min_value=200, max_value=2000, value=1000, step=100)
|
370 |
intersection_tolerance = st.select_slider(
|
371 |
"Intersection tolerance",
|
372 |
options=[1e-6, 1e-8, 1e-10, 1e-12, 1e-14, 1e-16, 1e-18, 1e-20],
|
373 |
-
value=1e-10
|
|
|
374 |
)
|
375 |
if st.button("Compute Intersections", key="tab3_button"):
|
376 |
with col2:
|
@@ -395,9 +396,9 @@ with tab4:
|
|
395 |
y_diff = st.number_input("y", value=1.0, key="y_diff")
|
396 |
z_min_diff = st.number_input("z_min", value=-10.0, key="z_min_diff")
|
397 |
z_max_diff = st.number_input("z_max", value=10.0, key="z_max_diff")
|
398 |
-
with st.expander("Resolution Settings"):
|
399 |
-
beta_steps_diff = st.slider("β steps", min_value=51, max_value=501, value=201, step=50)
|
400 |
-
z_steps_diff = st.slider("z grid steps", min_value=1000, max_value=100000, value=50000, step=1000)
|
401 |
if st.button("Compute Differentials", key="tab4_button"):
|
402 |
with col2:
|
403 |
betas_diff, lower_vals, upper_vals = sweep_beta_and_find_z_bounds(z_a_diff, y_diff, z_min_diff, z_max_diff, beta_steps_diff, z_steps_diff)
|
@@ -410,4 +411,4 @@ with tab4:
|
|
410 |
fig_diff.add_trace(go.Scatter(x=betas_diff, y=d1, mode="lines", name="First Derivative", line=dict(color="brown", width=2)))
|
411 |
fig_diff.add_trace(go.Scatter(x=betas_diff, y=d2, mode="lines", name="Second Derivative", line=dict(color="black", width=2)))
|
412 |
fig_diff.update_layout(title="Differential Analysis vs. β", xaxis_title="β", yaxis_title="Value", hovermode="x unified")
|
413 |
-
st.plotly_chart(fig_diff, use_container_width=True)
|
|
|
296 |
y_1 = st.number_input("y", value=1.0, key="y_1")
|
297 |
z_min_1 = st.number_input("z_min", value=-10.0, key="z_min_1")
|
298 |
z_max_1 = st.number_input("z_max", value=10.0, key="z_max_1")
|
299 |
+
with st.expander("Resolution Settings", key="res1"):
|
300 |
+
beta_steps = st.slider("β steps", min_value=51, max_value=501, value=201, step=50, key="beta_steps")
|
301 |
+
z_steps = st.slider("z grid steps", min_value=1000, max_value=100000, value=50000, step=1000, key="z_steps")
|
302 |
st.subheader("Custom Expression")
|
303 |
st.markdown("Enter the **numerator** and **denominator** expressions (as functions of `z_a`, `beta`, `y`, and `s`) for the custom curve. Here, 'a' is an alias for `z_a`.")
|
304 |
st.markdown("The default expressions yield:")
|
305 |
st.latex(r"\frac{y\beta(z_a-1)s+(a\,s+1)((y-1)s-1)}{(a\,s+1)(s^2+s)}")
|
306 |
default_num = "y*beta*(z_a-1)*s + (a*s+1)*((y-1)*s-1)"
|
307 |
default_denom = "(a*s+1)*(s**2+s)"
|
308 |
+
custom_num_expr = st.text_input("Numerator Expression", value=default_num, key="custom_num")
|
309 |
+
custom_denom_expr = st.text_input("Denominator Expression", value=default_denom, key="custom_denom")
|
310 |
+
s_custom = st.number_input("Custom s value", value=1.0, step=0.1, key="s_custom")
|
311 |
if st.button("Compute z vs. β Curves", key="tab1_button"):
|
312 |
with col2:
|
313 |
fig = generate_z_vs_beta_plot(z_a_1, y_1, z_min_1, z_max_1, beta_steps, z_steps,
|
|
|
338 |
st.header("Plot Complex Roots vs. z")
|
339 |
col1, col2 = st.columns([1, 2])
|
340 |
with col1:
|
341 |
+
beta = st.number_input("β", value=0.5, min_value=0.0, max_value=1.0, key="beta_tab2")
|
342 |
+
y_2 = st.number_input("y", value=1.0, key="y_tab2")
|
343 |
+
z_a_2 = st.number_input("z_a", value=1.0, key="z_a_tab2")
|
344 |
+
z_min_2 = st.number_input("z_min", value=-10.0, key="z_min_tab2")
|
345 |
+
z_max_2 = st.number_input("z_max", value=10.0, key="z_max_tab2")
|
346 |
+
with st.expander("Resolution Settings", key="res2"):
|
347 |
+
z_points = st.slider("z grid points", min_value=1000, max_value=10000, value=5000, step=500, key="z_points")
|
348 |
if st.button("Compute Complex Roots vs. z", key="tab2_button"):
|
349 |
with col2:
|
350 |
fig_im, fig_re = generate_root_plots(beta, y_2, z_a_2, z_min_2, z_max_2, z_points)
|
|
|
357 |
st.header("Curve Intersection Analysis")
|
358 |
col1, col2 = st.columns([1, 2])
|
359 |
with col1:
|
360 |
+
z = st.slider("z", min_value=-10.0, max_value=10000.0, value=1.0, step=0.1, key="z_tab3")
|
361 |
+
y_3 = st.slider("y", min_value=0.1, max_value=1000.0, value=1.0, step=0.1, key="y_tab3")
|
362 |
+
beta_3 = st.slider("β", min_value=0.0, max_value=1.0, value=0.5, step=0.01, key="beta_tab3")
|
363 |
+
a = st.slider("a", min_value=0.1, max_value=1000.0, value=1.0, step=0.1, key="a_tab3")
|
364 |
st.subheader("s Range")
|
365 |
+
s_min = st.number_input("s_min", value=-5.0, key="s_min_tab3")
|
366 |
+
s_max = st.number_input("s_max", value=5.0, key="s_max_tab3")
|
367 |
+
with st.expander("Resolution Settings", key="res3"):
|
368 |
+
s_points = st.slider("s grid points", min_value=1000, max_value=10000, value=5000, step=500, key="s_points_tab3")
|
369 |
+
intersection_guesses = st.slider("Intersection search points", min_value=200, max_value=2000, value=1000, step=100, key="intersect_guesses")
|
370 |
intersection_tolerance = st.select_slider(
|
371 |
"Intersection tolerance",
|
372 |
options=[1e-6, 1e-8, 1e-10, 1e-12, 1e-14, 1e-16, 1e-18, 1e-20],
|
373 |
+
value=1e-10,
|
374 |
+
key="intersect_tol"
|
375 |
)
|
376 |
if st.button("Compute Intersections", key="tab3_button"):
|
377 |
with col2:
|
|
|
396 |
y_diff = st.number_input("y", value=1.0, key="y_diff")
|
397 |
z_min_diff = st.number_input("z_min", value=-10.0, key="z_min_diff")
|
398 |
z_max_diff = st.number_input("z_max", value=10.0, key="z_max_diff")
|
399 |
+
with st.expander("Resolution Settings", key="res4"):
|
400 |
+
beta_steps_diff = st.slider("β steps", min_value=51, max_value=501, value=201, step=50, key="beta_steps_diff")
|
401 |
+
z_steps_diff = st.slider("z grid steps", min_value=1000, max_value=100000, value=50000, step=1000, key="z_steps_diff")
|
402 |
if st.button("Compute Differentials", key="tab4_button"):
|
403 |
with col2:
|
404 |
betas_diff, lower_vals, upper_vals = sweep_beta_and_find_z_bounds(z_a_diff, y_diff, z_min_diff, z_max_diff, beta_steps_diff, z_steps_diff)
|
|
|
411 |
fig_diff.add_trace(go.Scatter(x=betas_diff, y=d1, mode="lines", name="First Derivative", line=dict(color="brown", width=2)))
|
412 |
fig_diff.add_trace(go.Scatter(x=betas_diff, y=d2, mode="lines", name="Second Derivative", line=dict(color="black", width=2)))
|
413 |
fig_diff.update_layout(title="Differential Analysis vs. β", xaxis_title="β", yaxis_title="Value", hovermode="x unified")
|
414 |
+
st.plotly_chart(fig_diff, use_container_width=True)
|