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 -> 2H2OComments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.