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 .
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 .
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
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?
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
mi spieghi cosa hai fatto , non capisco
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
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.