Forum d'entraide en sciences
Bienvenue sur le forum d'entraide en sciences ! Inscrivez-vous gratuitement pour accéder à l'intégralité du forum ou connectez-vous si c'est déjà fait !

Bonne visite !

Rejoignez le forum, c'est rapide et facile

Forum d'entraide en sciences
Bienvenue sur le forum d'entraide en sciences ! Inscrivez-vous gratuitement pour accéder à l'intégralité du forum ou connectez-vous si c'est déjà fait !

Bonne visite !
Forum d'entraide en sciences
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Cdiscount : -30€ dès 300€ ...
Voir le deal

Implémentation de la méthode de Cardan.

3 participants

Aller en bas

Implémentation de la méthode de Cardan. Empty Implémentation de la méthode de Cardan.

Message par Duche Sam 10 Mai 2008 - 23:05

Pour rappel, la méthode de cardan est une procédure qui permet de calculer de manière formelle les racines d'un polynôme de degré 3.
Je l'ai implémentée en java, j'ai fait quelques test et visiblement ça fonctionne correctement. Je le poste ici, sans explications particulière (la documentation est disponible sur le net) mais ça peut servir à certains.


Code:

public static double cardanRestricted(double p,double q)
   {
      double root = 0.0;
      double delta = sqr(q) + (4.0*cube(p))/(27.0);
      if(delta < 0.0)
      {
         double rho = Math.sqrt(sqr(q)-delta)/2.0;
         double teta = Math.acos(-q/(2.0*rho));
         root = 2.0*root3(rho)*Math.cos(teta/3.0);
      }
      else if(delta == 0.0)
         root = root3(-4.0*q);
      else
         root = root3((-q+Math.sqrt(delta))/2.0) + root3((-q-Math.sqrt(delta))/2.0);
      
      return root;
   }
   
   public static double cardan(double a,double b,double c,double d)
   {
      double p = c/a - sqr(b)/(3.0*sqr(a));
      double q = (2.0*cube(b))/(27.0*cube(a)) - (b*c)/(3.0*sqr(a)) + d/a;
      
      return cardanRestricted(p,q) - b/(3.0*a);
   }


Pour rappel: cube(d) = d*d*d ; sqr(d) = d*d ; sqrt(d) = Implémentation de la méthode de Cardan. 254525 d
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par Julien Dim 11 Mai 2008 - 8:59

Je n'ai pas encore fait de JAVA, mais ça n'a pas l'air d'être trop compliqué après avoir fait du C ! Very Happy
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par morice.net Dim 11 Mai 2008 - 10:04

Merci le_duche Wink

Le java n'est carrément pas plus compliqué que le C++ il est simplement mieux adapté à l'objet, et plus lent... à vous de voir ce que vous privilégiez Smile
morice.net
morice.net
Membre
Membre

Masculin Nombre de messages : 77
Age : 36
Localisation : Toulouse en semaine Lorp le week-end et les vacances
Profession / Etudes : IUP Ingénieur des Sciences Informatiques
Points : 6775
Date d'inscription : 10/10/2005

http://artaud.g.free.fr

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par Duche Dim 11 Mai 2008 - 23:59

Personnellement je suis pas trop fan du java. Il y a plein de petits trucs qu'on ne peut pas faire et qui seraient pourtant bien pratiques, comme surdéfinir les opérateurs, avoir une commande swap pour les objets,...

Par contre, Eclipse c'est de la balle ! Very Happy
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par Julien Lun 12 Mai 2008 - 7:12

le_duche a écrit:Par contre, Eclipse c'est de la balle ! Very Happy
Ben je l'utilise en C même si à l'origine si pour JAVA et j'avoue que c'est super bien fait et pratique, notamment avec le serveur CVS ! Very Happy
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par morice.net Lun 12 Mai 2008 - 9:24

le_duche a écrit:Personnellement je suis pas trop fan du java. Il y a plein de petits trucs qu'on ne peut pas faire et qui seraient pourtant bien pratiques, comme surdéfinir les opérateurs, avoir une commande swap pour les objets,...
On ne dit pas qu'on n'aime pas, quand on n'a pas gouté. De même, on ne dit pas qu'on ne peut pas quand on ne sait pas. Je suppose que tu veux parler de redéfinir des opérateurs (puisque surdéfinir n'existe pas en C++ non plus) et bien on peut. Il suffit d'extends la classe contenant ta méthode et tu la redéfinies. Quand au swap, il est fait automatiquement, par ce qu'on apelle le garbage collector. Dès que tu ne te sers plus d'un objet il est garbage collecté Wink

le_duche a écrit:
Par contre, Eclipse c'est de la balle ! Very Happy
Totalement d'accord , vraiment trop puissant...

julien a écrit:Ben je l'utilise en C même si à l'origine si pour JAVA et j'avoue que
c'est super bien fait et pratique, notamment avec le serveur CVS ! Very Happy
CVS est un peu dépassé maintenant, et même s'il s'utilise encore dans des applications en localou sur serveur local (ce qui revient au même au final), il est vraiment beaucoup moins puissant que le SVN. Ce dernier fournie plus de retour avec de la doc et tout. Il est également plus accessible, et gère mieux les conflits Wink

Voilà pour les quelques précisions sur le Java

A plus Smile
morice.net
morice.net
Membre
Membre

Masculin Nombre de messages : 77
Age : 36
Localisation : Toulouse en semaine Lorp le week-end et les vacances
Profession / Etudes : IUP Ingénieur des Sciences Informatiques
Points : 6775
Date d'inscription : 10/10/2005

http://artaud.g.free.fr

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par Julien Lun 12 Mai 2008 - 14:11

Oui il parait que SVN est encore mieux que le CVS mais je n'ai jamais essayé encore... mais si tu le dis ! Wink
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par Duche Jeu 15 Mai 2008 - 8:28

morice.net a écrit:On ne dit pas qu'on n'aime pas, quand on n'a pas gouté. De même, on ne dit pas qu'on ne peut pas quand on ne sait pas. Je suppose que tu veux parler de redéfinir des opérateurs (puisque surdéfinir n'existe pas en C++ non plus) et bien on peut. Il suffit d'extends la classe contenant ta méthode et tu la redéfinies. Quand au swap, il est fait automatiquement, par ce qu'on apelle le garbage collector. Dès que tu ne te sers plus d'un objet il est garbage collecté Wink


J'ai un projet de 20.000 lignes de code derrière moi, simulant un réseau de trafic aérien. En gros j'ai touché à peu près à tous les aspects de java, et on est 6 programmeurs du même avis, java c'est super chiant tu fais pas ce que tu veux. Et non on ne peut pas directement surdéfinir les opérateurs puisqu'ils sont hardcodés dans le compilateur java. Ou alors, tu as un compilateur qui te le permet, mais dans le java pur, ça n'est pas permis.
Et on parle bien de surdéfinir les opérateurs lorsque le type des paramètres change (par exemple définir une somme entre deux objet de type matrice). La redéfinition c'est lorsque les types ne changent pas et qu'on écrase l'ancienne méthode pour en faire une nouvelle plus adaptée.

Et puisque visiblement tu as oublié ce qu'est un swap, en voici un sur les doubles en c++:
Code:
void swap(double& a,double& b)
{
   double c = a;
   a = b;
   b = c;
}

Et je sais très bien ce qu'est un garbage collector, j'ai un deux cours de compilation, et j'y ai utilisé plus de 10 langages différents...
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par morice.net Jeu 15 Mai 2008 - 8:40

En effet, j'ai complètement confondu le swap avec autres choses : la suppression(delete en C++). J'en suis désolé.
Néanmoins je ne vois pas en quoi le swap n'est pas faisable en java ...
morice.net
morice.net
Membre
Membre

Masculin Nombre de messages : 77
Age : 36
Localisation : Toulouse en semaine Lorp le week-end et les vacances
Profession / Etudes : IUP Ingénieur des Sciences Informatiques
Points : 6775
Date d'inscription : 10/10/2005

http://artaud.g.free.fr

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par Duche Jeu 15 Mai 2008 - 9:08

Essaye, les objets ont beau être passés par adresse, quand tu sors de ta fonction ils n'ont pas changé. (je parle bien des objets, pas de types de base)
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par morice.net Jeu 15 Mai 2008 - 9:29

Code:

public class Test {
    private String text;

    public Test(String text) {
        super();
        this.text = text;
    }

    public String toString() {
        return text;
    }
}
public class Main {
    public static void main(String[] args) {
       
        Test t1 = new Test("t1");
        Test t2 = new Test("t2");
       
        System.out.println(t1);
        System.out.println(t2);

        Test c = new Test("");
        c = t1;
        t1 = t2;
        t2 = c;

        System.out.println(t1);
        System.out.println(t2);
    }
}

Chez moi ça marche très, et je ne pense pas avoir de compilateur spécial.

Au fait, pour les opérateurs, je suis d'accord avec toi en fin de compte. Néanmoins, il suffit de créer la méthode add dans ta définition de matrices, et ce sera parait :
Code:

mat = mat1.add(mat2);
// au lieu de
mat = mat1 + mat2;

Je trouve que ce n'est pas très génant...
morice.net
morice.net
Membre
Membre

Masculin Nombre de messages : 77
Age : 36
Localisation : Toulouse en semaine Lorp le week-end et les vacances
Profession / Etudes : IUP Ingénieur des Sciences Informatiques
Points : 6775
Date d'inscription : 10/10/2005

http://artaud.g.free.fr

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par Duche Jeu 15 Mai 2008 - 9:43

Comme ça oui évidemment !
Mais si tu mets tes trois lignes de swap dans une méthode, ça n'est plus possible.
Il n'est pas possible de faire une procédure swap.
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par morice.net Jeu 15 Mai 2008 - 11:16

D'accord je vois ce dont tu veux parler... java étant un langage par passge de valeurs, c'est impossible de manière directe. voici une (petite) ruse qui te permet de le faire...
Code:

public class TestSwap {
    private String str;

    public TestSwap(String str) {
        this.str = str;
    }

    public void print() {
        System.out.println("This is " + str);
    }

    public static void swap(Object[] objA, Object[] objB) {
        Object temp = objA[0];
        objA[0] = objB[0];
        objB[0] = temp;
    }

    public static void main(String[] args) {
        TestSwap[] tsA = { new TestSwap("A") };
        TestSwap[] tsB = { new TestSwap("B") };
        swap(tsA, tsB);
        tsA[0].print();
        tsB[0].print();
    }
}
Donc, on peut tout faire, mais faut s'adapter au langage et pas essayer de copié le C++, parce qu'ils sont tout de même différent Smile

A plus
morice.net
morice.net
Membre
Membre

Masculin Nombre de messages : 77
Age : 36
Localisation : Toulouse en semaine Lorp le week-end et les vacances
Profession / Etudes : IUP Ingénieur des Sciences Informatiques
Points : 6775
Date d'inscription : 10/10/2005

http://artaud.g.free.fr

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par Duche Jeu 15 Mai 2008 - 11:45

C'est assez laid Sad

Disons que je n'essaye pas de copier le c++, mais quand t'as une centaine de swap à faire dans ton code, ce serait plus pratique d'avoir une procédure, plutot que se taper les 3 lignes à chaque fois.
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

Implémentation de la méthode de Cardan. Empty Re: Implémentation de la méthode de Cardan.

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser