Calcolo della tangente di un angolo metodo serie di potenze

di il
16 risposte

Calcolo della tangente di un angolo metodo serie di potenze

Buonasera, innanzitutto spero che l'argomento sia nella room giusta.

Come da titolo sto cercando di creare un programma in C, che calcoli un valore della tangente di un angolo sessagesimale senza l'utilizzo della funzione tan() che già è in libreria, ma con il metodo approssimativo dello sviluppo in serie.

Io l'avrei anche trovato lo sviluppo in serie, ma non so implementarlo.



Se c'è qualcuno in grado di "accendermi la lampadina" ben venga...

16 Risposte

  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    Ma hai almeno provato?

    Devi proporre qualcosa ...

    P.S. Il link non è valido ...
  • Re: Calcolo della tangente di un angolo metodo serie di potenze



    Ok adesso l'immagine dovrebbe vedersi...

    Cosa intendi per proporre?
    Se ho creato la funzione???

    Per il seno e per il coseno ci sono riuscito, per la tangente no
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    Intendo una tua proposta di codice da cui partire, magari per correggerla ...

    P.S. Già che ci sei, spiega la formula pezzo per pezzo ...
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    Questa è la funzione fatta da me per il coseno.

    float coseno(float rad, float accuratezza)
    {
    float previsto, corrente, x;
    int nfatt=1, sign=1;
    int n, nmax=50;

    previsto = 1;
    x = 1;

    for (n=1; n<nmax; n++) {
    nfatt = nfatt*(2*n)*(2*n-1);
    sign = sign*(-1);
    x = x*rad*rad;
    corrente = previsto + (sign*x)/nfatt;

    }

    printf("Numero massimo di cicli superato\n");
    return corrente;
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    Ok ,prova ad impostare, sulla base di quella del coseno, questa della tangente.
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    Credevo che la tangente fosse sviluppata così:



    Tra altro cos'è quel B nella formula?
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    skynet ha scritto:


    Credevo che la tangente fosse sviluppata così:



    Tra altro cos'è quel B nella formula?

    Quindi secondo te sarebbe sufficiente implementare il polinomio di grado 7 che cè nel link ???

    La "B" nella formula sta per sviluppo in serie di BERNOULLI che per altro non l'ho mai utilizzato
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    Puoi anche arrivare ad esponente 9 o 11 ...
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    Io conoscevo quello di Taylor ma sono solo ricordi ormai. I numeri di BERNOULLI listo guardando adesso
    Puoi svilupparlo fino al polinomio di grado 9 se vuoi ma io avrei un altra idea.

    Tu hai fatto quella del sin(x) e cos(x). tan(x) = sin/cos

    Non puoi svilupparlo come frazione delle due?
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    skynet ha scritto:


    ma io avrei un altra idea.

    Tu hai fatto quella del sin(x) e cos(x). tan(x) = sin/cos

    Non puoi svilupparlo come frazione delle due?
    Anch'io avrei pensato a questa soluzione, ma siccome il seno e coseno sviluppati con metodo approssimativo in serie di potenze dà un risultato impreciso, facendo per cui il rapporto tra due valori poco precisi otterei un risultato ancora più impreciso.

    P.S.: il problema che devo affrontare mi chiede una accuratezza di almeno 4 cifre decimali esatte.
    Rapportando il seno e coseno, sarà sufficiente?
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    Piccola prova per il seno
    #include <stdio.h>
    #include <math.h>
    
    #define M_PI 3.14159265358979323846
    
    double seno(double rad,int passi);
    unsigned int iter_factorial(unsigned int n);
    int main()
    {
    	printf("Seno calcolato: %g\n",seno(M_PI/4,10));
    	printf("Seno esatto: %g\n",sin(M_PI/4));
    	return 0;
    }
    
    unsigned int iter_factorial(unsigned int n)
    {
    	unsigned int ret = 1;
    	for(unsigned int i = 1; i <= n; ++i)
    		ret *= i;
    	return ret;
    }
    
    double seno(double rad,int passi)
    {
    	double senTemp = 0.;
    	for(int  n = 0; n < passi; n++)
    	{
    		senTemp +=(pow(-1.,(double)n)/(double)iter_factorial(2*n + 1))*pow(rad,2*n + 1);
    	}
    	return senTemp;
    }
    A me da lo stesso valore per rad = pi/4 e cioè 60° che è quindi 1/2*radice quadra di 2 e cioè 0,707107.

    Se provi a fare lo stesso per il coseno puoi verificare poi il valore finale.
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    Ecco completo.
    #include <stdio.h>
    #include <math.h>
    
    #define M_PI 3.14159265358979323846
    
    double seno(double rad,int passi);
    double coseno(double rad,int passi);
    unsigned int iter_factorial(unsigned int n);
    
    int main()
    {
    	printf("Seno calcolato: %g\n",seno(M_PI/6,10));
    	printf("Seno esatto: %g\n",sin(M_PI/6));
    
    	printf("Coseno calcolato: %g\n",coseno(M_PI/6,10));
    	printf("Coseno esatto: %g\n",cos(M_PI/6));
    
    	printf("Tangente calcolato: %g\n",seno(M_PI/6,10)/coseno(M_PI/6,10));
    	printf("Tangente esatto: %g\n",tan(M_PI/6));
    	return 0;
    }
    
    unsigned int iter_factorial(unsigned int n)
    {
    	unsigned int ret = 1;
    	for(unsigned int i = 1; i <= n; ++i)
    		ret *= i;
    	return ret;
    }
    
    double seno(double rad,int passi)
    {
    	double senTemp = 0.;
    	for(int  n = 0; n < passi; n++)
    	{
    		senTemp +=(pow(-1.,(double)n)/(double)iter_factorial(2*n + 1))*pow(rad,2*n + 1);
    	}
    	return senTemp;
    }
    
    
    double coseno(double rad,int passi)
    {
    	double cosTemp = 0.;
    	for(int  n = 0; n < passi; n++)
    	{
    		cosTemp +=(pow(-1.,(double)n)/(double)iter_factorial(2*n))*pow(rad,2*n);
    	}
    	return cosTemp;
    }
    Come vedi abbiamo li stessi valori in uscita.
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    Vediamo se ho capito; tu mi stati dicendo che con il metodo in serie di potenze dà lo stesso risultato utilizzando il sen() della libreria math.h ???
  • Re: Calcolo della tangente di un angolo metodo serie di potenze

    SI. Ho provato fino a 10 passi. magari non sarà esatto più in là ma le prime 6 cifre sono uguali usando lo svlipuoo di Taylor.
Devi accedere o registrarti per scrivere nel forum
16 risposte