(calcul avec scalc)[calc_txt_som] {= () { Ce fichier contient des calculs pouvant être réalisé automatiquement avec l'outil [scalc_cpp]. Il sert de test pour scalc. Les macros de l'environement mentor pour le calcul sont : &cc pour calculer la ligne courante &cb pour calculer le bloc de ligne sélectionné par les touches de fonction F3 et F4 &cp pour calculer le [bloc_de_texte] courant définit par des accolades. Exemple de macro si on utilise scalc indépendamment de l'environnement mentor. La macro &cc calcule l'expression de la ligne courante map &cc !!_xcm/bin/scalc -i où _xcm est une abbréviation déterminant le chemin vers le répertoire bin où se trouve l'exécutable à définir par exemple de la manière suivante :abbr _xcm /home/user/bin - les touches fonctions F3 et F4 servent à définir le bloc de ligne contenant le calcul :map ma :map mb"ay'a - la macro &cb calcule l'expression dans le buffer déterminé par F3F4 :map &cb 'a!'b_xcm/bin/scalc -i - la macro cp calcule l'expression dans le bloc de texte courant déterminé par les accolades :map &cp [[jmak%kmb:'a,'b!_xcm/bin/scalc -i - on peut définir localement la macro vim S pour exécuter un calcul sur une ligne et passer à la ligne suivante : :map S &ccj - la commande vim "u" (touche "u" en mode de commande vi) permet de faire un retour arrière sur l'exécution d'une commande de calcul si on n'est pas satisfait du résultat ou si la commande plante ! le programme peut planter ou donner un résultat non attendu en cas d'erreur de syntaxe sur les opérations. } () { exemple simple: 1 + 1 = 180 - 72 = 12 * 12 = 1 * 0 = division impossible 1 / 0 = une approximation de pi : 355 / 113 = puissances: 2^10 = 33 ^ 2 = 2 ^ 0.5 = 2 ^(1/2)= factorielle: 5!= 7!= 7!= 7!*2/10= 17!= 5!*4!= exemple avec précision: 1 + 1.5 = 1.0 + 1 = 1.124 + 1.126 = 1.126 + 1.126 = exemple sur plusieurs lignes: (utiliser F3 F4 pour sélectionner et &cb ) 15 + 12 + 14 = 2 * 2 * 3 * 3 * 3 = 2^2 *3^3 = 2^2 *3^3 *4^4 *5^5 = 2^2 *3^3 *4^4 *5^5 *6^6 = 2^2 *3^3 *4^4 *5^5 *6^6 * 7^7 = 2^2 *3^3 *4^4 *5^5 *6^6 * 7^7 * 8^8 * 9^9 = 2^-2 *3^-3 *4^-4 *5^-5 *6^-6 * 7^-7 * 8^-8 * 9^-9 = } () { précédence des opérateurs: 3 + 1 / 2 = 3 + 1 / 2 + 4 = 3 + 3 * 2 = 9 - 2 * 2 = 1 + 2 ^ 4 = 9 * 2 / 3 = 2*3 / 6*4 = 2 ^ 3 / 2 = 2 ^ 3 * 2 = 10 - 4 * 4 = 4! * 3! = 1 + 2 * 4 = 1/2*4^2 = 2 * 3^2 = 2^2 * 3^3 = 2^4 * 3^2 * 7 = 12 / 2 / 2 / 3 = 12 + 10 / 5 * 1/2 + 1 = 12.0 + 11 / 5 * 1/2 + 1 = } () { () { nombre d'or phi= pi= base des logarithmes népérien nep= } () { vitesse de la lumière c= charge élémentaire e= constante de gravitation G= constante de planck h= permittivité diélectrique du vide epsilon0= [constante_de_structure_fine] alpha= ^-1 = nombre d'Avogadro Navo= [constante_de_boltzmann] k= } } { exemple avec résultats intermédiaires: 1 + 2 = + 3 = + 4 = + 5 = } () { exemple avec opérations intermédiaires (parenthése) (3 + 1) / (2 + 4) = 3 * ( 2 / 3 ) = 5 ^ ( 1/2 ) = 5 * ( 1/2 ) = 2 ^ (1/2) = 2 * ( 2 + 1 / 2 ) = les opérations qui suivent doivent avoir le même résultat: 1 / 12 = 1 / ( 4 * 3 ) = 1 / ( ( 2 + 2 ) * 3 ) = (2 * ( 2 + 1 / 2 )) = 5 / (2 * ( 2 + 1 / 2 )) = imbrication de parenthèses: 6 * (3+2) / (2 * ( 2 + 1 )) = 6 * (3+2) / (2 * ( 2 + 1 / 2 )) = résultat six : 6 * (3+2) / (2 * ( 2 + 1 / 2 )) = formule combinaison: 10! / (4!* (10 - 4)!) = } ( avec la directive setprec ) { calcul de alpha : e^2 / ( 2 * epsilon0 * h * c ) = on peut forcer la précision du résultat avec la directive: setprec=4 ; e^2 / ( 2 * epsilon0 * h * c ) =0.0073 ^-1 = alpha^-1= setprec=6 ; calcul du nombre d'or: (1 + 5^0.5) / 2 = phi = } { polynome: (1/2) * 6 + 6^2 + (3/2) * 6^3 + 2 * 6^4 = (1/2) * 6 + 6^(1/2)+ (3/2) * 6^(1/3)+ 2 * 6^(1/4)= la même avec les résultats intermédiaires: (1/2) * 6 =3 + 6^(1/2)=5.44949 + (3/2) * 6^(1/3)=8.175171 + 2 * 6^(1/4)= } () { précision : 1.2 + 1 = 1 + 1.2 = 1 + 1/2 = 1/2 + 1 = 2^ 0.5 = 2^(1/2)= 2 + 2 ^ 0.5 = 2.000000000 + 2 ^ 0.5 = 2^0.5 + 2 = 2+2^(1/2)= précision: la division l'emporte sur les décimales des opérandes si elle est plus grande. ( 1.1 / 2.0 ) = 2 ^ (1/2) = 1.00000000001 + 2 ^ 0.5 = 1.00000000001 / 2 = } () { puissances de 10: Signe moins avec la puissance 10^-3= 10^(-3)= la limite d'affichage avec des puissances de dix est 10 10^(-6)= 10^(-10)= 10^(-11)= 10^(-12)= 10^(-14)= 10^(-15)= 10^-15= nombre maximum avant l'affichage avec les puissances de 10 : 10^15= 10^16= calcul avec des puissances de 10: 3 *10^16 * 4 *10^16 * = 5 *10^89 * 3 *10^44 * = 5 *10^89 * pi *10^44 * = } () { Un avantage de l'utilisation de scalc est que les calculs peut-être commenté. Exemples de bloc de calcul commenté : ( utiliser la macro &cp avec le curseur dans le bloc entre accolades) () { Quelle est la masse atomique moyenne pondérée du gallium ? Le gallium existe à l'état naturel sous la forme de deux isotopes. le gallium69 dont la masse atomique est de 68.926 u * et l'abondance relative de 0.601 + (le gallium71 dont la masse atomique est de 70.925 u * et l'abondance relative de 0.399 ) ce qui donne une masse moyenne de = } ( d'aprés la formule de Nassim Haramein ) cf [masse_du_proton] { 4 fois * la masse de Planck 2.176434*10^-8 Kg multiplié par la longueur de Planck * 1.616255*10^-35 m divisé par le rayon de charge du proton / 0.8775*10^-15 m est égal à la masse du proton= } (: :20230201) { setprec=6; ( h * G / (2 * pi * c^3))^ 0.5 = m } () { (c*h/(2*pi*G))^(1/2)= kg setprec=6; (c*h/(2*pi*G))^(1/2)= kg } ( Calcul avec l'expression des unités de Planck en fonction des constantes fondamentales. ) { 4 fois * la masse de Planck (c*h/(2*pi*G))^(1/2) * multiplié par la longueur de Planck ( h * G / (2 * pi * c^3))^ 0.5 divisé par le rayon de charge du proton / 0.8775*10^-15 m est égal à la masse du proton = } ( avec la définition de constantes) { setprec=6; [masse_de_planck] set mp = (c*h/(2*pi*G))^(1/2); mp= [longueur_de_planck] set lp = ( h * G / (2 * pi * c^3) ) ^ (1/2) lp= rayon de charge du proton set rP=0.8775*10^-15 rP= masse du proton set mP= 4 * mp * lp / rP mP= setprec=3; masse du proton set mP= (2 * h) / (c * pi * rP) mP= } ( d'aprés la formule de Nassim Haramein ) { setprec=3; la masse mesurée du proton 1.67262192 * 10^-27 kg * multiplié par le rayon de charge du proton 0.84184 * 10^-15 m donne : = et 4 fois * h / 2 * pi la constante de Planck réduite /c divisé par la vitesse de la lumière donne : = } } (: :20230221) { le dièse commente la fin de la ligne # 1+1= 1+1= # 2+2= } (: :20230201) { sin(pi/6)= cos(pi/6)= sin(pi/6)^2= cos(pi/6)^2= sin(pi/6)^2 + cos(pi/6)^2= tan(pi/4) = arctan(1)= * 4 = tan(pi/6) = sin(pi/4)= * 2 = ^2 = arcsin(2^0.5/2)= * 4 = cos(pi/3)= arccos(0.5)=1.047198 * 3 = cos (pi)= cos (-pi)= sin (3 * pi / 2)= exp(0)=1 log(1)=0 log(nep)=1 log(pi)= exp(5*log(10))= exp(15*log(10))= log(h) = log(e) = log(epsilon0)= log(G) = log(Navo) = int(12.3)= int(12.6)= round(12.3)= round(12.6)= sinh(1)=1.175201 cosh(1)=1.543081 tanh(1)=1 set fct(x)=cosh(x)^2-sinh(x)^2 } () { (: appel de fonction mathématique standard dans les fonctions définies ) { set tangente(x)=sin(x)/cos(x) tangente(pi/3)= avec l'appel direct de la fonction tan() du module math tan(pi/3)= } { set fct(x,y)=x^2+y^2; fct(4,3)= fct(5,5)= fct(51,51)= set fct3(x,y,z)=x^2+y^2+z^2; fct3(4,3,2)= fct3(5,5,5)= fct3(12,18,24)= set fct33(x,y,z)=x^3+y^3+z^3; fct33(4,3,2)= fct33(5,5,5)= fct33(12,18,24)= set x²(x)=exp(2*log(x)) x²(2)= x²(3)= x²(5)= } () { set C(n,p)= n! / (p!* (n - p)!); C(10,4)= C(10,2)= C(15,4)= C(15,3)= C(45,2)= } (: avec définition d'une fonction ) { setprec=6; [masse_de_planck] set mp = (c*h/(2*pi*G))^(1/2); [longueur_de_planck] set lp = ( h * G / (2 * pi * c^3) ) ^ (1/2) ancienne mesure du rayon de charge du proton set rP2=0.8775*10^-15 nouvelle mesure du rayon de charge du proton set rP=0.84087*10^-15 masse du proton set mP(r)= 4 * mp * lp / r mP(rP2)= mP(rP)= } () { setprec=4; formule de schwarzchild de la masse du trou noir: set mTN(r) =r * c^2 / ( 2 * G); set rCygnusX_1=2.5*10^4; mTN(rCygnusX_1)= kg - rayon du trou noir correspondant à la masse de la terre : 8.8 mm mTN(8.8716*10^-3)= kg nouvelle mesure du rayon de charge du proton set rP=0.84184 * 10^-15 m mTN(rP)= kg setp10=4; mTN(rP)= kg } } ( d'aprés la théorie de Nassim Haramein ) { (: test imbrication de fonction ) { [longueur_de_planck] set lp = ( h * G / (2 * pi * c^3) ) ^ (1/2) [masse_de_planck] set mp = (c*h/(2*pi*G))^(1/2); nombre R : set R(r) = 8 * r^3 / lp^3; nombre eta : set eta(r) = 16 *r^2/ lp^2; nombre phi : set phi(r) =R(r)/eta(r); set phi2(r) = ( 8 * r^3 / lp^3 ) / ( 16 *r^2/ lp^2); set phi3(r) = r / 2 * lp; nouvelle mesure du rayon de charge du proton: set rP=0.8775*10^-15 m setprec=6 R(rP)=1.280403*10^60 eta(rP)=4.716551*10^40 print phi: phi(r) =R(r)/eta(r) phi(rP)=2.714703*10^19 phi2(rP)=2.714703*10^19 phi3(rP)=2.714703*10^19 formule de la masse holographique : set mh(r) = R(r) * mp /eta(r); mh(rP)=590857489347.630005 formule de la masse du proton : set mP(r) = 2 * eta(r) * mp / R(r); mP(rP)=1.603497*10^-27 } () cf [fichier_de_precalcul_scalc] { pour effectuer ces calculs il est nécessaire d'avoir positionné la variable d'environnement SCALC_PATH cf [fichier_de_precalcul_scalc] avec le contenu du bloc de texte [exemple_de_contenu_d_un_fichier_de_precalcul]. setp10=6 setprec=6 R(rP)= eta(rP)= phi(rP)= mh(rP)= mP(rP)= } ( Exemple de contenu d'un include de précalcul) { condition de schwarzschild : set mTN(r) =r * c^2 / ( 2 * G); } ( ) { # Pour avoir accés à la fonctionnalité des includes, avec la directive setinc #il est nécessaire avoir installé le module utags qui gère l'hypertexte mentor. cf http://textoffice.org setinc [exemple_de_contenu_d_un_include_de_precalcul] setp10=6 setprec=6 la définition de cette fonction se trouve dans le fichier de précalcul (masse holographique) cf [calcul_utilisant_le_fichier_de_predefinitions] la directive print permet d'afficher l'expression d'une fonction ou d'une constante si elle ne s'affiche pas c'est qu'elle n'est pas définie. print mh: mh(r) = R(r) * mp / eta(r) mh(rP)=5.66193*10^11 la définition de cette fonction se trouve dans l'include (relation de Schwarzschild) print mTN: mTN(r) =r * c^2 / ( 2 * G) mTN(rP)=5.66193*10^11 L'utilisation d'include permet de mieux organiser les calculs par domaine. Ainsi que d'avoir plusieurs buffers de stockage de définition de fonction ou de constantes. } } ( Exemple de contenu d'un fichier de précalcul, à recopier dans un fichier texte définit par la variable d'environnement SCALC_PATH ) { # définition pour l'article de physique de Nassim Haramein : https://www.researchgate.net/publication/302941651_Quantum_Gravity_and_the_Holographic_Mass [longueur_de_planck] : set lp = ( h * G / (2 * pi * c^3) ) ^ (1/2) [masse_de_planck] : set mp = (c*h/(2*pi*G))^(1/2); nombre R : set R(r) = 8 * r^3 / lp^3; nombre eta : set eta(r) = 16 *r^2/ lp^2; nombre phi : set phi(r) =R(r)/eta(r); nouvelle mesure du rayon de charge du proton: set rP=0.8775*10^-15 m formule de la masse holographique : set mh(r) = R(r) * mp / eta(r); formule de la masse du proton : set mP(r) = 2 * eta(r) * mp / R(r); } (: éléments de pilotage du calcul scalc ) { (: indique le nombre de décimale affichées du résultat de l'opération ) setprec=5; (: indique à partir de quelle puissance de 10 le résultat de l'opération est affiché sur forme d'une puissance de 10) setp10=4; # le caractère dièse commente une ligne de calcul: 1+1= - un fichier de pré-calcul peut être définit par la variable d'environnement SCALC_PATH (: librairie de définitions de constantes et de fonctions mathématiques) - la variable d'environnement SCALC_PATH spécifie le chemin d'un fichier qui sert de librairie de définitions de constantes et de fonctions mathématiques. -exemple de fichier: ( $BASE est une variable d'environnement du module utags spécifiant le répertoire d'installation des fichiers du module) $BASE/ht/precalc.txt mettre dans le fichier le contenu du bloc de texte [exemple_de_contenu_d_un_fichier_de_precalcul_en]. - exemple de macro-commande vim de définition: let $SCALC_PATH='$BASE/ht/precalc.txt' let $SCALC_PATH='' - exemple de commande shell de définition: export SCALC_PATH='$BASE/ht/precalc.txt' - exemple de directive d'include pour des pré-définitions de calcul. setinc [exemple_de_contenu_d_un_include_de_precalcul] } }