İçeriğe geç
🛠️ToolsShed

Chemical Equation Balancer

Kimyasal denklemleri otomatik olarak dengeleyin.

Reaktifleri ve ürünleri ayırmak için -> veya = kullanın. Bileşikler arasında + kullanın.

Bu araç hakkında

Kimyasal denklem dengeleyici, kimyasal reaksiyonların denklemin her iki tarafında eşit sayıda atom ile doğru şekilde temsil edilmesini sağlamak isteyen kimyagerler, öğrenciler ve eğitimciler için gerekli bir araçtır. Denklemleri elle dengelemek zaman alıcı ve hata yapmaya açık olabilir, özellikle de birden fazla reaktif ve ürün içeren karmaşık reaksiyonlarda. Bu araç süreci otomatikleştirerek, doğru stokiyometrik katsayıları anında bulur, böylece aritmetikle uğraşmak yerine kimyayı anlama konusuna odaklanabilirsiniz.

Dengeleyiciyi kullanmak için, dengesiz kimyasal denklemini giriş alanına standart kimyasal gösterim kullanarak yazmanız yeterlidir—örneğin, hidrojinin yanması için H2 + O2 → H2O. Araç denkleminizi analiz eder, tüm benzersiz öğeleri ve miktarlarını tanımlar, ardından dengelemek için gereken minimum tam sayı katsayılarını hesaplar. Demir paslanması gibi basit reaksiyonları ya da karmaşık organik sentezini dengeliyor olun, araç tek adımlı denklemleri hızlı ve doğru şekilde işler.

Bu araç, sınavlara hazırlanan veya ev ödevlerini tamamlayan lise ve üniversite kimya öğrencileri, ayrıca çalışmalarını doğrulamak veya örnek problemler oluşturmak isteyen öğretmenler için en faydalıdır. Bunun bireysel denklemleri dengelediğini—reaksiyon ürünlerini tahmin etmediğini veya reaksiyon mekanizmalarını açıklamadığını unutmayın. Çok büyük veya olağandışı denklemler için, sonucun belirli bağlamınızda anlamlı olduğundan emin olmak için sonucu her zaman kimyasal ilkeler ile karşılaştırın.

Sıkça Sorulan Sorular

Kod Uygulaması

# Chemical equation balancing using linear algebra
import numpy as np
from fractions import Fraction

def parse_formula(formula):
    """Parse a chemical formula like H2O into {'H': 2, 'O': 1}"""
    import re
    pattern = r"([A-Z][a-z]?)([0-9]*)"
    counts = {}
    for element, count in re.findall(pattern, formula):
        counts[element] = counts.get(element, 0) + int(count or 1)
    return counts

def balance_equation(reactants, products):
    """
    Balance a chemical equation.
    reactants: list of formula strings, e.g. ["H2", "O2"]
    products:  list of formula strings, e.g. ["H2O"]
    Returns coefficients for [reactants..., products...]
    """
    # Collect all elements
    all_compounds = reactants + products
    all_elements = set()
    for compound in all_compounds:
        all_elements.update(parse_formula(compound).keys())
    elements = sorted(all_elements)

    # Build matrix: rows=elements, cols=compounds
    # Reactants are positive, products are negative
    n = len(all_compounds)
    m = len(elements)
    matrix = [[Fraction(0)] * n for _ in range(m)]

    for j, compound in enumerate(all_compounds):
        parsed = parse_formula(compound)
        sign = 1 if j < len(reactants) else -1
        for i, element in enumerate(elements):
            matrix[i][j] = Fraction(sign * parsed.get(element, 0))

    # Gaussian elimination to find null space
    # (simplified — works for most single-reaction equations)
    # For production use, consider sympy:
    # from sympy import Matrix
    # M = Matrix(matrix)
    # coeffs = M.nullspace()[0]
    return "Use sympy for robust balancing"

# Example with sympy (recommended)
from sympy import Matrix, lcm
from functools import reduce

def balance_sympy(reactants, products):
    import re
    all_compounds = reactants + products
    elements = sorted(set(
        e for f in all_compounds
        for e, _ in re.findall(r"([A-Z][a-z]?)([0-9]*)", f)
    ))

    rows = []
    for elem in elements:
        row = []
        for i, f in enumerate(all_compounds):
            counts = {e: int(n or 1) for e, n in
                      re.findall(r"([A-Z][a-z]?)([0-9]*)", f)}
            sign = 1 if i < len(reactants) else -1
            row.append(sign * counts.get(elem, 0))
        rows.append(row)

    M = Matrix(rows)
    null = M.nullspace()[0]
    denom = reduce(lcm, [v.q for v in null])
    coeffs = [int(v * denom) for v in null]
    return coeffs

coeffs = balance_sympy(["H2", "O2"], ["H2O"])
print(coeffs)  # [2, 1, 2] -> 2H2 + O2 -> 2H2O

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.