Dimensional analysis of a formula: MathS.Dimensions.Of and DimensionlessGroups

Ouverte
#2,292 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
35/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
Active
Stack technique
csharp
Domaine
backend

Piste de recherche

Review the design points in the issue, then inspect the proposed implementation in Functions/Dimensions/* and Convenience/MathS.Dimensions.cs, along with Tests/UnitTests/Convenience/DimensionsTest.cs. Run the listed unit tests and compare their coverage with the stated consistency, inconsistency, and undetermined cases; the issue says a pull request will follow once the design is accepted.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

What it is. Given the dimension of each variable (a map Variable → Dimension over the seven SI base dimensions, with rational exponents), say whether a formula is physically meaningful, what dimension it has, and where it stops making sense; and give the Buckingham π groups of a set of variables.

var (L, T) = (Dimension.Length, Dimension.Time);
var dims = new Dictionary<Entity.Variable, Dimension> { ["g"] = L / T.Pow(2), ["h"] = L, ["t"] = T };
MathS.Dimensions.Of("sqrt(2 g h)", dims);   // Consistent: L T^-1
MathS.Dimensions.Of("h + g t", dims);       // Inconsistent at h + g * t: h has dimension L and g * t has dimension L T^-1, ...
// pipe: rho M L^-3, v L T^-1, d L, mu M L^-1 T^-1
MathS.Dimensions.DimensionlessGroups(new Entity.Variable[] { "rho", "v", "d", "mu" }, pipe);   // [ mu / (rho * v * d) ]

Why here. Units libraries (UnitsNet) check values; nothing in .NET checks a formula. The walk needs every node type, which the kernel has.

Design points to agree on.

  • The dimension map is passed, not attached to variables, so nothing about printing, parsing or simplification changes, and the type layer of #1237 / #1019 is not pre-empted.
  • Three-valued: Consistent, Inconsistent (with the subexpression and a reason), Undetermined (undeclared variable, unread node, dimensional base to a symbolic power). Never a guess.
  • Nothing is simplified first: sin(x) - sin(x) with x a length is inconsistent.
  • A literal 0 or oo fits any dimension where added or compared (v = 0).
  • Exponents of a dimensional base must be rational; L^pi is inconsistent.

Packaging (Packaging.md §4). No clause fires: no dependency, no floor raise, no data, composes the kernel; not on any default path, so (B) does not apply. → kernel. A UnitsNet bridge would be (D) and separate; not part of this.

Implementation, for judging the design against working code. Branch feat/dimensional-analysis, one commit on master 87a0eff: Functions/Dimensions/*, Convenience/MathS.Dimensions.cs, Tests/UnitTests/Convenience/DimensionsTest.cs (38 cases), +54 lines of PublicApi.txt. UnitTests 18335 passed / 13 skipped, FSharpWrapperUnitTests 134 passed. No existing answer moves, so no BREAKING-CHANGES entry. The pull request will follow Accepted.

Worked use, together with the shader-source feature (#2293). A water wave from ω² = g k tanh(k h): the check gives ω the dimension T⁻¹ and rejects the shallow-water typo ω = √(g k h) inside the phase; the π groups are k A, k h and g k t².

Milestone: 2.7.0 (additive).

Langage dominant
C#
Étoiles
831
Forks
79
Merge moyen
1 h 11 min
PR mergées (30 j)
523

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de ASC-Community/AngouriMath

Toutes les issues de ASC-Community/AngouriMath

Issues similaires

Plus d'issues C#

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.