Autor Tema: Calcular Seno y Coseno en Matlab

0 Usuarios y 1 Visitante están viendo este tema.

02 Octubre, 2011, 09:29 pm
Leído 19321 veces

Ansony

  • UPNFM
  • Novato
  • Mensajes: 104
  • Karma: +0/-0
  • Sexo: Masculino
Hola a todos. tengo un problema, se me asigno la tarea de hacer dos programas en Matlab:
1. Que calcule \( sen(x) \) con las series de Taylor.
2. Que calcule \( cos(x) \) con las series de Taylor.

Ya se que en Matlab ya estan los comandos de sin y cos.
yo hice esto:

Para \( Sen(x) \)

Spoiler
%programa que determine senx
clc;
clear;
disp('Este programa es para calcular el Sen(x)')
x=input('Ingrese el valor de x: ');
n=input('Ingrese el numero de iteraciones: ');
suma=0;
for I=1:n;
    suma=suma+((-1)^(I-1))*(x^(2*I-1))/(prod(1:(2*I-1)));
end;
disp('La suma es: ');
disp(suma);
disp('El valor real es: ');
disp(sin(x));
[cerrar]

Para \( Cos(x) \)

Spoiler
%programa que determine cosx
clc;
clear;
disp('Este programa es para calcular el Cos(x)')
x=input('Ingrese el valor de x: ');
n=input('Ingrese el numero de iteraciones: ');
suma=1;
for I=1:n;
    suma=suma+((-1)^(I))*(x^(2*I))/(prod(1:(2*I)));
end;
disp('La suma es: ');
disp(suma);
disp('El valor real es: ');
disp(cos(x));
[cerrar]

Todo sale bien para valores pequeños de x.
Pero para los demas necesito muchas iteraciones.

Gracias y saludos
solo se que nada se...

02 Octubre, 2011, 10:17 pm
Respuesta #1

mathtruco

  • Moderador Global
  • Mensajes: 4,919
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Hola Ansony,

 el desarrollo de Taylor de \( f \) en torno a \( x=x_0 \) aproxima bien (con pocas iteraciones) valores de \( f(x) \) cuando \( x \) está cerca de \( x_0 \). Una cosa es que esté asegurada la convergencia en un intervalo, y otra es que converja rápido (en pocas iteraciones).

Seguro estás usando a serie de Taylor de de seno y coseno en torno al origen.

02 Octubre, 2011, 10:21 pm
Respuesta #2

Ansony

  • UPNFM
  • Novato
  • Mensajes: 104
  • Karma: +0/-0
  • Sexo: Masculino
Gracias mathtruco.

¿Me podrías dar una sugerencia de que modificaciones podría hacer?

Gracias de nuevo.
solo se que nada se...

02 Octubre, 2011, 10:32 pm
Respuesta #3

mathtruco

  • Moderador Global
  • Mensajes: 4,919
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Sugerencias:

- Al usuario del programa seguro le interesa más "el número de decimales de exactitud" que el número de iteraciones. En vez de pedir que ingrese el número de iteraciones podrías pedir que ingrese el "el número de decimales de exactitud", y en base a eso calcular el número de iteraciones, y además de entregar como salida la aproximación junto al número de iteraciones necesarias para conseguirlo.

- Si haces eso, debes poner un máximo de iteraciones permitidas. Si no, si piden una aproximación "demasiado buena" el programa podría no terminar de iterar.

- Como \( sin(\alpha)=sin(\alpha+2k\pi) \) para \( k \) entero, podrías programar que si un usuario coloca un número mayor que \( 2\pi \) o menor que \( 0 \), entonces...

02 Octubre, 2011, 10:40 pm
Respuesta #4

Ansony

  • UPNFM
  • Novato
  • Mensajes: 104
  • Karma: +0/-0
  • Sexo: Masculino
Umm, intentaré hacer lo que dices.
Gracias de nuevo  :)
saludos
solo se que nada se...

03 Octubre, 2011, 11:52 am
Respuesta #5

Ansony

  • UPNFM
  • Novato
  • Mensajes: 104
  • Karma: +0/-0
  • Sexo: Masculino
Hola de nuevo, he intentado hacer lo que me dijiste pero sin ningún producto favorable.

Pienso y re-pienso pero nada que me saque de apuros, es que no soy tan diestro con la programación. Si me pudieras ayudar un poco más te lo agradecería.

Saludos.

Por cierto, veo que corregiste mis palabras sin tildar, tendré más cuidado de ello.

Gracias de nuevo.
solo se que nada se...

03 Octubre, 2011, 01:47 pm
Respuesta #6

mathtruco

  • Moderador Global
  • Mensajes: 4,919
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
- Un criterio de parada usual en métodos numéricos (cuando programamos) es \( |x_{n+1}-x_n|<\mbox{tol} \), donde tol es una entrada del programa (aunque no estoy 100% seguro que se pueda usar, me parece que es un modo práctico de asegurar que la aproximación sea buena).

- Como te mencionaba, si uno da una tol demasiado pequeña, entonces el programa podria iterar demasiadas veces. Por eso es buena idea que el programa termine si se pasa de las 100 iteraciones antes ed llegar a tol (por ejemplo).

- La parte 3 sería, por ejemplo:
  si \( 0\leq x<2\pi \) calcular \( sin(x) \)
  si \( 2\pi\leq x<4\pi \) calcular \( sin(x-2\pi) \)
  si \( 4\pi\leq x<6\pi \) calcular \( sin(x-4\pi) \)
 ...

porque, como observaste, si uno quiere calcular el seno o coseno de algo demasiado grande el programa demora muchas iteraciones en llegar a una solución decente.

Otra observación: \( \sin\left(\alpha+\dfrac{\pi}{2}\right)=\cos(\alpha) \), por lo que bastaría programar seno o coseno.

07 Octubre, 2011, 11:17 pm
Respuesta #7

Ansony

  • UPNFM
  • Novato
  • Mensajes: 104
  • Karma: +0/-0
  • Sexo: Masculino
Hola y gracias mathtruco.
Ya lo hice y en realidad lo tenía bien, solo que no sabía que al ingresar el valor de x debía ser en radianes.
Gracias de nuevo y saludos.  :laugh:  :laugh:  :laugh:
solo se que nada se...