π
<-
Chat plein-écran
[^]

KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

:32tins: :32tinsktpb: :32tinsktpn: :32tinscas: :32tinstpkc: :32tinstpktpb: :32tinstp: :32tinscastp: :32tinscmc: :32tinscx: :32tinscxcas:

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postby Adriweb » 29 Jun 2020, 04:07

Hmm oui je pensais a une version standalone, dans le simple but d'avoir une version a jour de l'existant qui se fait vieux. La convivialité des outils n'etant pas le but ici, juste histoire d'avoir quelque chose de plus récent, et ca pourrait servir lors de benchmarks/comparaisons ; et en effet la version avec les nouvelles features/modules en ressortirait davantage gagnante je suppose, mais bref, c'est pas mon point ici :P
En tout cas j'aii informé Vogtinator des derniers posts en date de ce topic.
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 54.3%
 
Posts: 12949
Images: 1086
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postby parisse » 29 Jun 2020, 08:42

J'ai mis a jour le source, il manquait l'ajout de l'extension .tns apres .py pour les imports de fichiers. J'ai aussi renomme linalg.mult en linalg.mul (en coherence avec les noms de methodes) et complete numpy.py.tns (cf ci-dessous). Ca devrait donner une assez bonne compatibilite avec numpy, mais il y a quelques differences qui sont il me semble impossible a enlever: a.T pour avoir la transposee de a, je ne vois pas comment faire sans une methode ou un appel de fonction, ce sera a.T() ou transpose(a), il y a aussi le redimensionnement, impossible d'utiliser un membre, je cree une fonction reshape.

Il est surement possible de completer et ameliorer, vu que je ne suis pas du tout un expert en Python:
Code: Select all
import linalg
import math
class array:
    def __init__(self, a):
        self.a = a
 
    def __add__(self, other):
        return array(linalg.add(self.a , other.a))
 
    def __sub__(self, other):
        return array(linalg.sub(self.a , other.a))
 
    def __mul__(self, other):
        if type(self)==array:
            if type(other)==array:
                return array(linalg.mul(self.a , other.a))
            return array(linalg.mul(self.a,other))
        return array(linalg.mul(self,other.a))
   
    def __rmul__(self, other):
        if type(self)==array:
            if type(other)==array:
                return array(linalg.mul(self.a , other.a))
            return array(linalg.mul(self.a,other))
        return array(linalg.mul(self,other.a))

    def __matmul__(self, other):
        return __mul(self,other)

    def __getitem__(self,key):
        r=(self.a)[key]
        if type(r)==list or type(r)==tuple:
            return array(r)
        return r

    def __setitem__(self, key, value):
        if (type(value)==array):
            (self.a)[key]=value.a
        else:
            (self.a)[key]=value
        return None

    def __len__(self):
        return len(self.a)
   
    def __str__(self):
        return "array("+str(self.a)+")"
 
    def __neg__(self):
        return array(-self.a)

    def __pos__(self):
        return self
   
    def __abs__(self):
        return array(linalg.abs(self.a))

    def __round__(self):
        return array(linalg.apply(round,self.a,linalg.matrix))

    def __trunc__(self):
        return array(linalg.apply(trunc,self.a,linalg.matrix))

    def __floor__(self):
        return array(linalg.apply(floor,self.a,linalg.matrix))

    def __ceil__(self):
        return array(linalg.apply(ceil,self.a,linalg.matrix))

    def T(self):
        return array(linalg.transpose(self.a))
           
def real(x):
    if type(x)==array:
        return array(linalg.re(x.a))
    return x.real

def imag(x):
    if type(x)==array:
        return array(linalg.im(x.a))
    return x.imag

def conj(x):
    if type(x)==array:
        return array(linalg.conj(x.a))
    return linalg.conj(x)

def sin(x):
    if type(x)==array:
        return array(linalg.apply(math.sin,x.a,linalg.matrix))
    return math.sin(x)

def cos(x):
    if type(x)==array:
        return array(linalg.apply(math.cos,x.a,linalg.matrix))
    return math.cos(x)

def tan(x):
    if type(x)==array:
        return array(linalg.apply(math.tan,x.a,linalg.matrix))
    return math.tan(x)

def asin(x):
    if type(x)==array:
        return array(linalg.apply(math.asin,x.a,linalg.matrix))
    return math.asin(x)

def acos(x):
    if type(x)==array:
        return array(linalg.apply(math.acos,x.a,linalg.matrix))
    return math.acos(x)

def atan(x):
    if type(x)==array:
        return array(linalg.apply(math.atan,x.a,linalg.matrix))
    return math.atan(x)

def sinh(x):
    if type(x)==array:
        return array(linalg.apply(math.sinh,x.a,linalg.matrix))
    return math.sinh(x)

def cosh(x):
    if type(x)==array:
        return array(linalg.apply(math.cosh,x.a,linalg.matrix))
    return math.cosh(x)

def tanh(x):
    if type(x)==array:
        return array(linalg.apply(math.tanh,x.a,linalg.matrix))
    return math.tanh(x)

def exp(x):
    if type(x)==array:
        return array(linalg.apply(math.exp,x.a,linalg.matrix))
    return math.exp(x)

def log(x):
    if type(x)==array:
        return array(linalg.apply(math.log,x.a,linalg.matrix))
    return math.log(x)

def size(x):
    if type(x)==array:
        return linalg.size(x.a)
    return linalg.size(x)

def shape(x):
    if type(x)==array:
        return linalg.shape(x.a)

def dot(a,b):
    return a*b

def transpose(a):
    if type(x)==array:
        return array(linalg.transpose(x.a))

def trn(a):
    if type(x)==array:
        return array(linalg.conj(linalg.transpose(x.a)))
    return linalg.conj(linalg.transpose(x.a))

def zeros(n,m=0):
    return array(linalg.zeros(n,m))

def ones(n,m=0):
    return array(linalg.ones(n,m))

def eye(n):
    return array(linalg.eye(n))

def det(x):
    if type(x)==array:
        return linalg.det(x.a)
    return linalg.det(x)

def inv(x):
    if type(x)==array:
        return linalg.inv(x.a)
    return linalg.inv(x)

def solve(a,b):
    if type(a)==array:
        if type(b)==array:
            return array(linalg.solve(a.a,b.a))
        return array(linalg.solve(a.a,b))
    if type(b)==array:
        return array(linalg.solve(a,b.a))
    return linalg.solve(a,b)

def eig(a):
    if type(a)==array:
        r=linalg.eig(a.a)
        return array(r[0]),array(r[1])
    return linalg.eig(a)

def linspace(a,b,c):
    return array(linalg.linspace(a,b,c))

def arange(a,b,c=1):
    return array(linalg.arange(a,b,c))

def reshape(a,n,m):
    if type(a)==array:
        return array(linalg.matrix(n,m,a.a))
    return linalg.matrix(n,m,a)
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 1%
 
Posts: 2012
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postby parisse » 03 Jul 2020, 15:04

J'ai ajoute un tableur dans KhiCAS. On peut y acceder depuis le shell KhiCAS par le menu des applications (menu 1 1) ou par le raccourci ctrl puis s ou t (comme spreadsheet ou tableur).
La touche calculatrice (en-dessous de esc) permet de configurer le tableur. Les menus de la touche menu et de shift 1 a 8 affiches en bas permettent de faire certaines operations, par exemple on entre des donnees puis on selectionne 2 colonnes puis menu shift 2 scatterplot puis on valide puis on fait shift 6 pour visualiser.
On peut inserer un tableau de valeurs d'une fonction avec shift 3 tablefunc, et d'une suite recurrente avec shift 3 tableseq (la touche tab ou doc permet de voir l'aide sur ces commandes et de saisir un exemple).
Evidemment, l'interet d'avoir ce tableur peut paraitre faible par rapport a celui de la nspire cx cas (il y a quand meme la generation de graphiques dans le tableur qui me semble-t-il n'existe pas chez TI), mais sur une nspire cx (non CAS), ca permet d'avoir un tableur formel. Et surtout ca devrait permettre d'avoir un tableur bientot sur les Numworks N0110, si la faible quantite de memoire vive disponible ne pose pas trop de problemes de portage (a raison de quelques centaines d'octets par cellule, ca va vite...).
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 1%
 
Posts: 2012
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postby Adriweb » 03 Jul 2020, 15:54

Bien joué!

Mais si, sur Nspire, on peut plotter les données d'un tableur (et/ou de l'app D&S) plutot facilement, cf. https://education.ti.com/-/media/D4D35C ... 9E94CAFF20 (notamment avec le Quick Plot) et https://education.ti.com/html/webhelp/n ... istics.htm
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 54.3%
 
Posts: 12949
Images: 1086
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postby parisse » 03 Jul 2020, 19:20

Ca parait quand meme complique et tres dependant du logiciel utilise.
Inversement, dans KhiCAS, on fait un nuage de points ou une droite de regression lineaire comme on fait une somme ou une moyenne dans un tableur, on choisit une cellule libre pour y placer une formule, on tape =, on selectionne la commande (sum ou mean ou scatterplot ou linear_regression_plot, qu'on choisit dans le menu shift 1 ou shift 2) puis la zone du tableur (par exemple A1:B10). C'est systematique. Le seul truc qui depend de KhiCAS c'est la maniere d'afficher le graphique (shift 6 ici, c'est rappele dans les fast menus en bas).
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 1%
 
Posts: 2012
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: KhiCAS, le moteur formel Giac/Xcas pour toutes TI-Nspire

Unread postby Adriweb » 03 Jul 2020, 19:35

Pas vraiment en fait, on le voit peut être pas mais on peut choisir librement la liste pour les abscisses et ordonnées. C'est juste que les applications dédiées sont plus pratique pour interagir avec de telles listes. Mais elles peuvent très bien être éditées/créés/remplies ailleurs.
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 54.3%
 
Posts: 12949
Images: 1086
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Previous

Return to News TI-Nspire

Who is online

Users browsing this forum: No registered users and 23 guests

-
Search
-
Featured topics
L'OS 5.5 de la TI-83 Premium CE / 84 Plus CE supprime l'assembleur - la plupart des jeux et certains programme ne fonctionneront plus
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
Découvre les nouvelles fonctionnalités en Python de l'OS 5.5 pour la 83PCE/84+C-T Python Edition
Comparaisons des meilleurs prix pour acheter sa calculatrice !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
640 utilisateurs:
>631 invités
>4 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)