Valori funzione goniometrica in un intervallo.

di il
10 risposte

Valori funzione goniometrica in un intervallo.

Riporto il testo dell'esercizio:
-Creare un programma che stampi i valori della funzione :
f (x) = sin(x)· cos(x)
Si considerino almeno 20 diversi valori della variabile di ingresso x tra 0 e 2p (si consideri
p = 3.14159)
Questo è il codice che ho scritto:
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
int main ()
{
	srand(time(NULL));
	int c;
	float r;
	for (c=1; c<=20; c++) 
	{
	r=(rand()%2*(314159))/100000;
		printf("%d) %g\n", c, sin(r)*cos(r)); 
	}
	return 0;
}
Purtroppo, una volta compilato ed eseguito il programma, ricevo risultati del tipo:
1) -0.139708
2) 0
3) -0.139708
4) -0.139708
5) -0.139708
6) -0.139708
7) 0
8) -0.139708
9) -0.139708
10) -0.139708
11) -0.139708
12) 0
13) 0
14) -0.139708
15) -0.139708
16) 0
17) 0
18) -0.139708
19) 0
20) 0
Grazie dell'attenzione!

10 Risposte

  • Re: Valori funzione goniometrica in un intervallo.

    Ciao,
    puoi utilizzare questa linea di codice:
    r=(rand()%(2*(314159)))/(float)100000;
  • Re: Valori funzione goniometrica in un intervallo.

    Ciao
    allora il problema sta nei valori in quanto le funzioni sen e cos accettano dei valori interi o float.
    (meglio gli interi perchè l'approssimazione è migliore.)
    perchè le funzioni raggionano in gradi e non in radianti.
    quando un valore da calcolare e troppo piccolo quest ultimo viene arrotondato facendoti sballare il programma.
    quindi basta che fai una random per valori interi compresi tra 0 e 360 dove 2 pgreco = a 360
    dopo aver effettuato la f(x) converti i gradi in radianti per poter far cio basta che attui la seguente proporzione.
    angolo in gradi : 360 = angolo in radianti : 2 p
    dove angolo in radianti = (angolo in gradi * 2 pigreco)/360
    alla fine stampi il tutto e il programma e fatto.
    spero di esserti stato di aiuto
  • Re: Valori funzione goniometrica in un intervallo.

    Io direi

    r = (rand() / (double)RAND_MAX)*6.283185;
  • Re: Valori funzione goniometrica in un intervallo.

    perchè le funzioni raggionano in gradi e non in radianti.
    Le funzioni non "ragionano". Le funzioni sin e cos accettano un argomento in radianti.
  • Re: Valori funzione goniometrica in un intervallo.

    minomic ha scritto:


    Ciao,
    puoi utilizzare questa linea di codice:
    r=(rand()%(2*(314159)))/(float)100000;
    Diamine ho fatto questo stesso errore altre volte Grazie mille!

    smalldragon ha scritto:


    ciao
    allora il problema sta nei valori in quanto le funzioni sen e cos accettano dei valori interi o float.
    (meglio gli interi perchè l'approssimazione è migliore.)
    perchè le funzioni raggionano in gradi e non in radianti.
    quando un valore da calcolare e troppo piccolo quest ultimo viene arrotondato facendoti sballare il programma.
    quindi basta che fai una random per valori interi compresi tra 0 e 360 dove 2 pgreco = a 360
    dopo aver effettuato la f(x) converti i gradi in radianti per poter far cio basta che attui la seguente proporzione.
    angolo in gradi : 360 = angolo in radianti : 2 p
    dove angolo in radianti = (angolo in gradi * 2 pigreco)/360
    alla fine stampi il tutto e il programma e fatto.
    spero di esserti stato di aiuto
    Ma le funzioni sin, cos, tg (e quant'altro...) della libreria math.h non dovrebbero ragionare in radianti? Ho sistemato quella riga di codice e devo dire che il risultato è abbastanza soddisfacente:
    1) 0.20788
    2) 0.385265
    3) 0.35178
    4) 0.429726
    5) -0.437488
    6) -0.388249
    7) -0.440814
    8) -0.105194
    9) 0.0566171
    10) -0.00964058
    11) 0.361335
    12) -0.429694
    13) -0.497723
    14) -0.469527
    15) -0.460471
    16) -0.209446
    17) -0.281383
    18) -0.201452
    19) 0.36858
    20) 0.415605
    
  • Re: Valori funzione goniometrica in un intervallo.

    Certo che lavorano in radianti ... smalldragon ha scritto un'inesattezza.

    Per la formula, ti consiglio di controllare quella che hai adottato e usare quella che ti ho suggerito (e che non hai neanche visto).

    Per completezza, visualizza anche r con la printf.
  • Re: Valori funzione goniometrica in un intervallo.

    Forse in questo caso può essere un problema il fatto che RAND_MAX sia (su molti sistemi) pari a 32767... Forse per il problema di OP servono anche valori maggiori. In questo caso la soluzione di oregon è ideale.

  • Re: Valori funzione goniometrica in un intervallo.

    oregon ha scritto:


    Certo che lavorano in radianti ... smalldragon ha scritto un'inesattezza.

    Per la formula, ti consiglio di controllare quella che hai adottato e usare quella che ti ho suggerito (e che non hai neanche visto).

    Per completezza, visualizza anche r con la printf.
    Ho visto il messaggio solo ora, non era mi intenzione saltare il suggerimento Comunque ho provato in entrambi i modi ed ho pure stampato, come suggerisci tu, i valori di r... sostanzialmente i valori in radianti sono sempre compresi tra 0 e 2pi greco, però a questo punto non capisco quale delle due sia la "migliore scelta".
  • Re: Valori funzione goniometrica in un intervallo.

    minomic ha scritto:


    Forse in questo caso può essere un problema il fatto che RAND_MAX sia (su molti sistemi) pari a 32767... Forse per il problema di OP servono anche valori maggiori. In questo caso la soluzione di oregon è ideale.

    Ho stampato il valore di RAND_MAX, nel mio sistema è 2147483647. Comunque adesso ho capito perché la formula di oregon può risultare più comoda Grazie mille per il vostro aiuto!
  • Re: Valori funzione goniometrica in un intervallo.

    La migliore è quella che sceglie valori in tutto l'intervallo 0...2PI ...
Devi accedere o registrarti per scrivere nel forum
10 risposte