Question

Mon application dotnet a une version de langage de script limité (modèle lâchement sur VBScript), principalement pour les numéros de post-traitement, des points et des vecteurs. Je viens d'ajouter un soutien pour les nombres complexes, mais je me bats avec la notation.

Je ne veux pas utiliser la notation A + Bi, puisqu'il n'est pas une division claire si A ou B sont définis comme des équations déjà:

31 * 5 + 6 + -5i

Cela pourrait être interprété comme:

A = 31 * 5 + 6 B = -5i

et

A = 31 * 5 B = 6 + -5i

Aucune des langages de programmation que je connais ont un support natif pour les nombres complexes. Je pense quelque chose comme le travail pourrait suivre, mais je serais reconnaissant de toute entrée sur ce point:

{31} * 5 + 6 + {-5} i

complexe (31 * 5, 6 + -5)

r {31 * 5} i {6} + -5

Était-ce utile?

La solution

Il semble que vous utilisez la multiplication explicite dans vos exemples (c.-à-vous besoin d'un * B, plutôt que A B).

Dans ce cas, pourquoi ne pas simplement utiliser le suffixe i suivant directement la valeur comme dans

 myComplex = 12 + 6i
   or
 myOtherComplex = 12/7 + (6 * pi)i

Ensuite, vous devrez peut-être décider de i ou j, je l'ai vu à la fois ...

Cette astuce i-suffixe est un peu comme le scientifique et est Notifications par e (3.1415e7 par exemple)

Modifier (après les commentaires de David)

Le format ci-dessus peut devenir source de confusion, en fonction du public, une façon de clarifier cela peut être permettent seulement imaginaires littéraux , et d'inclure ceux-ci dans une notation complexe dérivé de votre notation vectorielle existant . Lorsque les nombres imaginaires ou nombres complexes nécessitent une expression pour les désigner, la syntaxe nécessiterait explicite « fonction recherche » syntaxe tels que Imaginaire (i) et complexe (r, i).

règles d'analyse :

  • Un nombre quelconque (. Signé ou non signé, entier ou décimal, ou même numéro de notation exp) directement suivi du suffixe i est un nombre imaginaire: -7i ou 1.23i ou 5.76e4i mais pas 12 i (pas d'espace laissé entre le nombre et le suffixe)
  • un vecteur deux valeurs avec le premier et le deuxième réel imaginaire est un complexe: (1, 7i) ou encore (7, 0i)
  • Format Imaginaire (i) est utilisé lorsque la valeur "i" est une expression. i est exprimée sans le suffixe i qui est impliqué par la syntaxe d'appel de méthode.
  • Complex (r, i) format est utilisé lorsque l' "r" ou "i" params est / sont une expression, et chaque fois que nous voulons éviter toute ambiguïté.

En bref :

  • (7, 1i), (0, -3.1415i), (13, 0i), complexe (13, 0) ou complexe (7x + 3, sin (y) 2) sont tous des nombres complexes
  • 6i, -1.234e5i, Imaginaire (1,234) ou Imaginaire (sqrt (19x + 5Y)) sont tous les nombres imaginaires
  • (12, 23, 34) est un vecteur dans R ^ 3
  • (12i, -2I) dans un vecteur dans I ^ 2 (pas un nombre complexe, étant donné que le premier élément est pas vraie)
  • ((0,0i), (1, -9.2i), (12, 0i)) ou ((0, 21i), complexe (12,3), (44, -55i)) sont des vecteurs de C ^ 3

C'est semble cohérent et assez simple, mais là encore, seuls les vrais utilisateurs finaux peuvent dire.

Autres conseils

Si votre désir est de faire la différence tout simplement le réel à partir de la composante imaginaire d'un nombre complexe, je ferais une des options suivantes.

  • Entourez le numéro avec une certaine forme de parenthèses pour assurer qu'elle est traitée comme une unité. Par exemple, 6 + 5i devient {{6,5} ou 6,5i} pour une meilleure lisibilité supplémentaire.
  • L'introduction d'un marqueur pour séparer les parties, similaire à l'exposant dans 6.022e23. Par exemple, 6 + 5i devient 6i5. Vous auriez encore besoin des parenthèses pour spécifier des formules pour celui-ci, par exemple 6 + (b / 2) i devenir 6i (b / 2), et non la confusion 6iB / 2 (qui pourrait aussi être lu comme (6iB) / 2) et, malheureusement, vous perdez l'utilisation de i comme variable.

Soit des personnes serait simple à traiter, même avec un analyseur simple et ils sont assez proche de la notation mathématique afin de ne pas confondre. Je préfère la première car il me semble plus explicite et utilise des symboles qui ne sont pas susceptibles de confondre.

Faites vos utilisateurs ont une notation spécifique qu'ils utilisent? Pourriez-vous choisir un aussi près de leur possible? Dans mon cas, j'utiliser un + bi donc je dirais {31} * 5 + 6 + {-5} i Toutefois, si elles servent à la forme fonctionnelle alors je suggère complexe (31 * 5, 6 + -5 ).

Puisque vous utilisez .net vous pouvez utiliser le DLR pour donner à votre script rel="nofollow noreferrer"> ou rubis syntaxe?

La plupart des langues que je peux trouver qui ont un nombre complexe de type builtin (tel que Python et Lisp) utiliser quelque chose comme:

c{r, i}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top