Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] Derivata polinomio

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156

    [C] Derivata polinomio

    Salve,
    ho scritto questa funzione che data una matrice contenente i coefficienti di un certo numero di polinomi di terzo grado ( disposti come vettori riga ) ne calcoli la derivata, ovvero riempia un'altra matrice con i coefficienti del polinomio derivato.Purtroppo mi da valori sbagliati, per esempio la derivata di x^3 = 0 Vi posto il codice :
    codice:
    void derivata(int mat[][c],float deriv[][c], int r)
    {
         int i,k;
         int z;     
         for(i=0;i<r;i++)
         {
                         z=3;
                         for(k=0;k<c;k++)
                         {
                                         deriv[i][k]=z*mat[i][k];
                                         z=z-1;                    
                         }
         }
    }
    Ps: questa è solo una parte di un programma, suppongo che l'errore stia qui dal momento che le altre funzioni sembrano funzionare bene ( legge il vettore e dopo aver calcolato la derivata ne calcola le soluzioni ).

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perché la matrice di partenza è di interi e la derivata di float ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    perchè poi successivamente devo calcolare le soluzioni operando sui coefficienti che stanno nella matrice della derivata...e le soluzioni possono essere anche float..se vuoi posso postare tutto il programma!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma i coefficienti dei polinomi non possono essere float ?

    Ad esempio 2/3 ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Nella mia versione del programma ho imposto che siano interi...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da slashino
    Nella mia versione del programma ho imposto che siano interi...
    Ah ... ok.

    Ma il codice della funzione che hai proposto segue un algoritmo che, secondo te, è corretto?

    Non ho una precisa idea di quale regola tu abbia implementato con quei cicli ma se è corretta "teoricamente" allora si dà un'occhiata al codice altrimenti è da rivedere l'algoritmo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    L'algoritmo sembra essere corretto. Ho fatto anche una simulazione su carta e funziona bene...penso debba essere un problema di codice!
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #define c 4
    #define m 30
    #include<math.h>
    int lettura(int  mat[][c]);
    void derivata(int mat[][c], float deriv[][c],int r);
    void caccolo(float soluzioni[][2], float deriv[][c], int r); 
    void stampa( int mat[][c], float deriv[][c], float soluzioni[][2], int r);
    
    
    main()
    {
          int colonne,righe;
          int prima[m][c], matder[m][c];
          float zeri[m][2], dopo[m][c];;
          righe=lettura(prima);
          derivata(prima, dopo, righe);
          caccolo(zeri,dopo,righe);
          stampa(prima, dopo, zeri, righe);
          system("pause");
         
          
    
    
    
    
    }
    
    
    int lettura(int mat[][c])
    {
        int r,i,k;
        printf("Inserire il numero di polinomi\n");
        scanf("%d", &r);
        printf("inserire i coefficienti del polinomio di terzo grado\n");
        for(i=0;i<r;i++)
        {
                        for(k=0;k<c;k++)
                        {
                                        scanf("%d", &mat[i][k]);
                        }
        }
        return r;
    }
    
    void derivata(int mat[][c],float deriv[][c], int r)
    {
         int i,k;
         int z;     
         for(i=0;i<r;i++)
         {
                         z=3;
                         for(k=0;k<c;k++)
                         {
                                         deriv[i][k]=z*mat[i][k];
                                         z=z-1;                    
                         }
         }
    }
    
    void caccolo(float soluzioni[][2], float deriv[][c], int r)
    {
         int i,k;
         float delta;
         for(i=0;i<r;i++)
         {
                         delta=(deriv[i][1]*deriv[i][1])-4*(deriv[i][0]*deriv[i][2]);
                         if(delta<0)
                         {
                                    soluzioni[i][0]=0;
                                    soluzioni[i][1]=0;
                         }
                         else
                         {
                             if(delta>0)
                             {
                                    soluzioni[i][0]=(deriv[i][1]*(-1)-sqrt(delta))/(2*deriv[i][0]);
                                    soluzioni[i][1]=(deriv[i][1]*(-1)+sqrt(delta))/(2*deriv[i][0]);
                             }
                            else
                             {
                                    soluzioni[i][0]=(deriv[i][1]*(-1))/(2*deriv[i][0]);
                                    soluzioni[i][1]=(deriv[i][1]*(-1))/(2*deriv[i][0]);
                             }
                         }
         }
    }
                         
    void stampa( int mat[][c], float deriv[][c], float soluzioni[][2], int r)
    {
         int i;
         for(i=0;i<r;i++)
         {
                         printf("Polinomio di terzo grado\t");
                         printf("(%d)x^3+(%d)x^2+(%d)x+(%d)\n", mat[i][0],mat[i][1],mat[i][2],mat[i][3]);
                         printf("Derivata prima:\t");
                         printf("(%d)x^2+(%d)x+(%d)\n", deriv[i][0],deriv[i][1],deriv[i][2]);
                         if(((deriv[i][1]*deriv[i][1])-4*(deriv[i][0]*deriv[i][2]))>=0)
                         {
                                                                          printf("Le soluzioni sono:\t");
                                                                          printf("%f %f", soluzioni[i][0], soluzioni[i][1]);
                                                                                      
                         }
                         else
                         {
                             printf("Non ci sono massimi e minimi\n");
                         }
         }
    }
    Non far caso al nome della funzione "caccolo " xD

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.