embedded-schrodinger 0.1.0

Solveur de l'équation de Schrödinger unidimensionnelle en no_std et sans libm
Documentation
  • Coverage
  • 100%
    10 out of 10 items documented4 out of 6 items with examples
  • Size
  • Source code size: 17.44 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 189.62 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 2s Average build duration of successful builds.
  • all releases: 2s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • jorgeandrecastro/embedded-schrodinger
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • jorgeandrecastro

embedded-schrodinger

License: GPL-2.0 no_std no libm

Solveur de l'équation de Schrödinger indépendante du temps en 1D conçu pour les systèmes embarqués (no_std, sans libm, sans liaison C, sans unsafe).


Méthode numérique

La résolution repose sur la méthode de tir (shooting method) :

  1. Pour une énergie candidate E, la fonction d'onde ψ est propagée de gauche à droite via la relation de récurrence des différences finies centrées :
   ψᵢ₊₁ = 2ψᵢ − ψᵢ₋₁ − (2m·dx²/ħ²)(E − V(xᵢ))ψᵢ
  1. Une dichotomie binaire (30 itérations) ajuste E jusqu'à ce que ψ(xₙ) ≈ 0 (condition aux limites du puits infini). La logique de signe est la suivante :
    • ψ(xₙ) > 0E est trop faible → on relève e_min
    • ψ(xₙ) < 0E est trop élevé → on abaisse e_max
  2. La fonction d'onde convergée est normalisée : ∫|ψ|² dx = 1.

Caractéristiques

Propriété Valeur
no_std ✅ oui
libm ❌ aucun recours
Liaison C ❌ aucune
unsafe #![forbid(unsafe_code)]
Racine carrée Newton-Raphson via embedded-f32-sqrt
Précision f32 (IEEE 754 simple précision)
Cibles validées Cortex-M33, Cortex-M4F et hôte

Installation

Dans votre Cargo.toml :

[dependencies]
embedded-schrodinger = "0.1"

Exemple rapide

use embedded_schrodinger::SchrodingerSolver;

const N: usize = 200;

// Puits de potentiel infini (V = 0 à l'intérieur)
let potential = [0.0f32; N];

// Unités atomiques : ħ = 1, m = 1, dx = L/N avec L = 1
let solver = SchrodingerSolver::new(potential, 1.0 / N as f32, 1.0, 1.0);

let mut psi = [0.0f32; N];
let energy = solver
    .find_eigenstate(1.0, 15.0, &mut psi)
    .expect("Aucune solution dans l'intervalle donné");

// E₁ = π²/2 ≈ 4.935 en unités atomiques pour L = 1
println!("Énergie fondamentale : {:.4}", energy);

Dépendances

Crate Rôle
embedded-f32-sqrt Racine carrée f32 Newton-Raphson, no_std

Aucune autre dépendance. Aucun accès au système d'exploitation.


Licence

Ce logiciel est distribué sous les termes de la GNU General Public License version 2 (GPL-2.0-only).

Voir https://www.gnu.org/licenses/old-licenses/gpl-2.0.html pour le texte complet de la licence.

Copyright (C) 2025 Jorge Andre Castro.