Desarrollo de la serie sen(x)
De Ejercicios
Contenido |
Enunciado
Realiza un programa análogo al anterior que emplee una función de C para calcular sen(x), cuyo desarrollo en serie es:
Soluciones
Programa en C por Angel
/* fichero serie3.c */ #include <stdio.h> #include <math.h> void main(void) { int i, n; double x, serie1, serie2, frac=1; double fac(int); double pot(double, int); printf("Este programa calcula el valor del seno.\n"); printf("Introduce el valor del angulo en radianes: "); scanf("%lf", &x); serie2=x; serie1=0.0; frac=x; i=2; while (serie1!=serie2) { serie1=serie2; n=2*i-1; frac=-frac*(x*x/(n*(n-1))); serie2+=frac; i++; } printf("\nValor estimado: %20.16e\n", serie2); printf("Valor exacto: %20.16e\n", sin(x)); printf("Numero de terminos utilizados: %d\n", i); }
Comentario
En este programa cada fracción que se añade a la serie se calcula también a partir del anterior. Se tiene en cuenta que los distintos términos cambian de signo alternativamente, y que cada uno es el anterior multiplicado por x al cuadrado, y dividido por (2*i-1)*(2*i-2).
Solucion en Pseudocódigo
ALGOTIRMO serie3 ENTRADAS: x:REAL SALIDAS: serie2:REAL VARIABLES: i:ENTERO n:ENTERO serie1:REAL frac:REAL INICIO frac<--1 ESCRIBIR "Este programa calcula el valor del seno." ESCRIBIR "Introduzca el valor del ángulo en radianes: " LEER x serie2<--x serie1<--0.0 frac<--x i<--2 MIENTRAS serie1<>serie2 HACER serie1<--serie2 n<--2*i-1 frac<-- (-frac)*((x*x)/(n*(n-1))) serie2<--serie2+frac i<--i+1 FIN_MIENTRAS ESCRIBIR "Valor estimado: ", serie2 ESCRIBIR "Valor exacto: ", ''seno(x)'' ESCRIBIR "Número de términos utilizados: ", i FIN
Comentario
Para este ejemplo suponemos que existe una función seno
que nos devuelve el valor real del seno de un número.
Programa en Matlab
%Programa SenoAproximado %Descripción: Calcula de forma aproximada el valor de sen(x). %Entradas:Valor de x para calcular el seno. %Salidas:El valor del seno en ese x. %Variables: % serie,fact,pos: ENTEROS % texto: ARRAY (o cadena) DE CARACTERES % x: REAL disp('Este programa calcula el valor del seno'); x = input('Introduce el valor del ángulo en radianes:' ); serie = 0; fact = x; pos = 1; while (fact+serie)~=serie serie = serie+fact; pos = pos+1; fact = (-1)^(pos+1)*x^(2*pos-1)/factorial(2*pos-1); end disp( ['Valor estimado:', num2str(serie)] ); disp( ['Valor exacto:', num2str(sin(x))] ); disp( ['Utilizados' num2str(pos) 'términos'] );