Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    27

    programma per calcolare derivate in c

    Salve ragazzi , sto cercando un algoritmo semplice per calcolare la derivata di una funzione , ho sentito dire che viene abbastanza facile calcolarla con il rapporto incrementale .

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Per una funzione a una variabile puoi approssimarla con f'(x) = (f(x+h) - f(x))/h per un h fissato sufficientemente piccolo. Ovviamente non è preciso al 100% e neanche infallibile: i risultati dipendono molto dalla funzione. Ad esempio in presenza di salti potresti avere risultati nonsense.

    Comunque si tratta di analisi matematica non di C: ciò è indipendente dal linguaggio.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    27
    scara 95 , grazie per la risposta , ho trovato il seguente codice :

    #include<math.h>
    #include<stdlib.h>
    #include<stdio.h>
    int main()
    {
    double
    derive(double(*f)(double),double x0)
    {
    constdouble delta =1.0e-10;
    double x1 = x0 - delta;
    double x2 = x0 + delta;
    double y1 = f(x1);
    double y2 = f(x2);
    return(y2 - y1)/(x2 - x1);
    }
    double der = derive(sin,0.0);
    printf("%lf\n", der);}
    return 0;
    a questo punto però me lo calcolo solo per il seno , se volessi per esempio calcolare la derivata di 2x?

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    codice:
    double derive(double(*f)(double),double x0)
    {
      const double delta =1.0e-10;
      return (f(x+h)-f(x))/h;
    }

    Meno codice più efficace.

    Comunque il primo parametro è una funzione, quindi:
    codice:
    double two_x(double x) {
      return 2*x;
    }
    
    //....
      double der = derive(two_x, x);
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    27
    mi spieghi cosa hai fatto , non capisco

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Quote Originariamente inviata da paulucc Visualizza il messaggio
    mi spieghi cosa hai fatto , non capisco
    Ho definito una funzione e l'ho passata come parametro a derive
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da paulucc Visualizza il messaggio
    mi spieghi cosa hai fatto , non capisco
    Cosa non capisci in particolare ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Quote Originariamente inviata da paulucc Visualizza il messaggio
    mi spieghi cosa hai fatto , non capisco
    Cerca sul tuo libro di C il capitolo sui puntatori a funzione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    27
    ragazzi ho trovato quest'altro codice, che mi sembra un pò più intuitivo:
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>


    float f(float x)
    {


    return <mia funzione>;
    }






    void main()
    {
    float y = //punto in cui voglio calcolare la derivata;


    float h = 0.00001 ;// valori più piccoli di h danno una maggiore precisione


    printf("la derivata nel punto %f è %f \n", y , (f(y+h)-f(y))/h);


    }

    però a volte funziona ed a volte no , infatti la maggior parte delle volte mi restituisce come risultato 0

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' molto simile al precedente codice a parte il fatto che fa il calcolo direttamente nel main senza usare una funzione apposita (derive). E per questo non ha necessità di puntatori a funzioni per passare quella in esame. Il primo codice è sicuramente migliore.

    In questo devi usare i double e non i float.

    P.S. Ma tu scrivi programmi capendoli o cerchi i sorgenti e li copi soltanto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.