You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Streamlit二元线性方程组应用出现除零错误求助

解决二元线性方程组Streamlit应用的ZeroDivisionError问题

问题核心

ZeroDivisionError: float division by zero 错误的本质是计算x的分母 a*q - p*b 等于0,对应二元线性方程组的两种特殊场景:

  • 两条直线平行且不重合,方程组无解
  • 两条直线完全重合,方程组有无穷多解

原生Python环境运行正常是因为测试时输入的参数未触发分母为0的情况,而Streamlit是交互式应用,用户可输入任意值,必然会遇到该场景。

解决思路

1. 前置判断行列式(分母)是否为0

在执行除法运算前,先检查 a*q - p*b 的值,若为0则直接提示用户方程组的特殊情况,避免错误抛出。

2. 区分无解与无穷多解的场景

当行列式为0时,通过验证方程系数是否成比例(如 a*r == p*c 且 b*r == q*c),进一步区分是无解还是无穷多解,给用户更精准的提示。

3. 完善完整求解逻辑

原代码仅计算了x,补充y的求解逻辑,同时确保计算y时也规避分母为0的潜在问题。

修改后的示例代码

import streamlit as st

st.title("SISTEM PERSAMAAN LINEAR DUA VARIABEL")
st.subheader("Persamaan 1: ax+by=c")
a = st.number_input("Masukan Nilai Variabel a")
b = st.number_input("Masukan Nilai Variabel b")
c = st.number_input("Masukan Nilai Variabel c")
st.subheader("Persamaan 2: px+qy=r")
p = st.number_input("Masukan Nilai Variabel p")
q = st.number_input("Masukan Nilai Variabel q")
r = st.number_input("Masukan Nilai Variabel r")

# 计算行列式(分母)
determinant = a * q - p * b

if determinant == 0:
    # 判断是否为无穷多解
    if (a*r == p*c) and (b*r == q*c):
        st.write("方程组有无穷多解")
    else:
        st.write("方程组无解")
else:
    # 计算x和y的解
    x = (c*q - r*b) / determinant
    y = (a*r - p*c) / determinant
    st.write(f"x = {x}")
    st.write(f"y = {y}")

st.caption("Note: AI KAKURU akan mencari variabel x dengan metode eliminasi lalu mencari variabel y dengan metode subtitusi")

关键说明

  • 通过行列式判断提前拦截错误场景,避免程序崩溃,同时提供用户友好的反馈。
  • 补充y的求解逻辑,让应用功能更完整,符合二元线性方程组的求解预期。

内容的提问来源于stack exchange,提问作者DR4C4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:30:50