Matlab - Definir entradas en matlab

   
Vista:

Definir entradas en matlab

Publicado por daniel (8 intervenciones) el 13/01/2010 12:07:54
Hola.

Estoy realizando un programa en matlab y para empezar necesito crear una serie de entradas. De momento he creado un vector de valores en rampa, otro vector en forma de triangulo, otro vector usando el comando "randint" y otro en forma de parabola. Mi problema es este ultimo vector. Quiero que el valor minimo de la parabola sea 500 y el maximo 1500. Solo he conseguido crear una parabola que empieza en cero y llega hasta 1, pero no me vale para operar con ella.

Luego otro problema que tengo es que cuando voy a pintar graficas de de valores de una ecuacion respecto de de una entrada, para el caso de la entrada random me lo ordena, es decir, si mi entrada random generada es:

x=[12,34,43,4,89,22]

El eje x queda ordenador y lo que quiero es que aparezacan esos numeros en el eje x tal cual se generan y sus valores respectivos de la ecuacion, sin que se ordenen. Alguna idea? Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Definir entradas en matlab

Publicado por Jorge (226 intervenciones) el 13/01/2010 22:54:44
Para la parábolad del primer caso, ¿lo que quieres es que el valor de la función (f(x)) tenga un mínimo de 500, o quieres que x tenga un mínimo de 500?

Depende de cómo definas tu función.

Por ejemplo, si quieres que x vaya de 500 a 1500 (con 300 puntos intermedios), puedes definirla así:

x = linspace(500, 1500, 300)
y = x^2 + ...
plot(x,y)

o, si te refieres a que quieres que en la gráfica sólo aparezcan valores de tu interés, puedes limitarlas con el comando 'axis' después de 'plot', así:
axis[x1, x2, y1, y2]

en donde x1 e y1 son los valores menores en los ejes, y x2 e y2 son los valores máximos en los ejes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Definir entradas en matlab

Publicado por Daniel (8 intervenciones) el 14/01/2010 10:07:59
Hola.

Muchas gracias por tu respuesta. Estuve enredando y consegui una parabola bastante aproximada a lo que quiero de la siguiente manera:

x=[1:31]; %doy 31 valores para cada muestra que quiero obtener
for i=1:31
ent_parab(i)=-((x(i)-16)^2)+1315;
end

De esta manera obtengo un vector en forma de parabola que llega a 1315 en su pico mas algo que es lo que deseo, pero que no empieza en 600 como quiero. De todas formas, tambien me interesaria crear una senoide que empiece en 0 y llegue a 1315 repitiendose la secuencia pero en la parte negativa. Lo he intentado de la siguiente manera:

x =[0:0.01:2*pi];
y=1315*sin(x);
plot(x,y);

Si ves el plot parece que la senoide cumple lo que quiero, pero si miro lo que es "y" no. Si me puedes solucionar este problema te lo agradecere.

Otra duda que tengo ya pertenece a un problema a la hora de simular una respuesta ante entrada impulso de una FT, pero a lo mejor creo otro tema a parte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Definir entradas en matlab

Publicado por Jorge (226 intervenciones) el 14/01/2010 22:49:40
Hola,

Me parece que tu problema es de geometría analítica, no de Matlab.

¿Por dónde quieres que pase la parábola?

¿Quieres que el inicio de la gráfica sea en (0, 600)?
Tienes que tener en cuenta que la parábola continúa hacia abajo, aunque no la grafiques.
Una cosa son los ejes de la gráfica y otra cosa es la parábola misma.

¿Quieres que tenga una altura de 1315? ¿A qué valor de 'x' debe corresponder esa 'y'?

Para definir una parábola debes tener 3 puntos. Nos falta uno. ¿Dónde quieres que termine la gráfica de la parábola? ¿O por qué otro punto debe pasar?

Aparte, para graficar una parábola no tienes que usar 'for-loops', la puedes vectorizar en Matlab, y poner:

x = 1 : 31;
p = -(x-16).^2 + 1315;
plot(x, p)

en lugar del código que tú muestras. Es más sencillo y rápido, y Matlab está hecho para manipular vectores justamente.

Dime los 3 puntos exactos de la parábola y con gusto te hago la gráfica.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Definir entradas en matlab

Publicado por Daniel (8 intervenciones) el 15/01/2010 12:12:32
Buenas Jorge, gracias de nuevo. Lo de la parabola esta solventado. Ahora te añado tres nuevas entradas para hacer:

La primera la que te comente en forma de senoide, es decir, de la siguiente forma que te muestro en el enlace:

http://www.qsl.net/xe1rm/senoide.jpg

Lo que deseo es que, por ejemplo, el numero de muestras 30, que empiece en cero y que el pico mas alto de la senoide llegue a 1315, repitiendose esto para valores negativos.

Las otras entradas que quiero son en forma de diente de sierra y triangular:

http://media.photobucket.com/image/diente%20de%20sierra/kaux/MisImagenesDidacticas/SynthWaveforms.jpg

El numero de muestras por ejemplo tambien 30, que el valor maximo que alcancen sea 1315 y que partan de cero,repitiendose el ciclo para la parte negativa.

Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Definir entradas en matlab

Publicado por Jorge (226 intervenciones) el 16/01/2010 00:36:24
Para la senoide, sugiero:

-------------------------------------------

x1 = linspace(0, 2*pi, 30);
y1 = 1315 * sin(x);
plot(x1, y1)

-------------------------------------------

Para el diente de sierra, sugiero que lo hagas en segmentos.
La instrucción 'hold on' congela la figura para que puedas incluir otras curvas.
La suelta con 'hold off'.
La instrucción 'axis' te ayuda a definir los ejes.

-------------------------------------------

x2 = linspace(0, 1315, 30);
y2 = x2;
plot(x2, y2)
axis([0 3000 0 1315])
hold on
grid on

x3 = linspace(1315, 1315, 30);
y3 = linspace(0, 1315, 30);
plot(x3, y3)

x4 = linspace(1315, 1315*2, 30);
y4 = x4 - 1315;
plot(x4, y4)

x5 = linspace(1315*2, 1315*2, 30);
y5 = linspace(0, 1315, 30);
plot(x5, y5)
hold off

-------------------------------------------

Para la función triangular es el mismo procedimiento, sólo adapta los valores de ' y '.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Definir entradas en matlab

Publicado por Daniel (8 intervenciones) el 18/01/2010 08:23:52
Buenos dias Jorge.

Gracias. La senoide ya esta incluida en el programa. La señal de diente de sierra tambien es perfecta, el problema sera trabajar con ella como vector, que es lo que necesito, porque si sumase los 4 vectores que la forman no saldria la secuencia completa, y tampoco quiero hacer un vector de 120 elementos metiendo uno a uno. Queria algo mas sencillo de hacer, pero veo que no va a ser posible, no se si me entiendes. Lo que no quiero es tener y2, y3, y4 e y5 y para sacar el total poner uno seguido del otro porque esteticamente en el programa quedaria horrible. Si se te ocurre algo para guardar el vector como uno solo te lo agradecere. Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Definir entradas en matlab

Publicado por Jorge (226 intervenciones) el 18/01/2010 23:01:23
OK, lo vamos a hacer más elegante...

Crea una función que encuentre los valores apropiados para ' y ', y luego llámala. Por ejemplo:

function y = sierra(x)
for i = 1 : length(x)
if (0 <= x(i)) & (x(i) < 1315 - eps)
y(i) = x(i);
elseif (1315 <= x(i)) & (x(i) <= 1315 * 2 )
y(i) = x(i) - 1315;
else
disp('x no válida')
end
end

Desde otro lado la llamas así, por ejemplo:

x = linspace(0, 1315*2 , 30*2);
y = sierra(x);
plot(x,y)

En este caso, la función ' sierra ' sólo considera 2 períodos, pero puedes modificarla estratégicamente para que acepte cualquier número de ciclos...

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Definir entradas en matlab

Publicado por Jorge (226 intervenciones) el 19/01/2010 01:00:01
Otra versión -más depurada- de lo anterior:

Función:

function y = sierra2(x, T)
for i = 1 : length(x)
x(i) = x(i) - floor(x(i)/T) * T;
y(i) = x(i);
end

Está más depurada porque ahora puedes incluir cualquier número de ciclos y puedes variar el período.

La llamarías así:

T = 1315;
num_ciclos = 4;
x = linspace(0, T*num_ciclos, 50*num_ciclos);
y = sierra2(x, T);
plot(x,y)

Nota que el número de puntos a graficar puede afectar la apariencia de la gráfica, porque los valores al inicio o final del período no necesariamente coinciden con 0 o con el valór máximo. O sea, la separación de los valores de ' x ' no debe ser muy grande (eso es lo que se llama resolución).

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Definir entradas en matlab

Publicado por Daniel (8 intervenciones) el 19/01/2010 08:23:54
Gracias Jorge, doy por finalizado el tema :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Definir entradas en matlab

Publicado por abnel (1 intervención) el 04/09/2010 23:16:24
pues quiero que grafiques la parabola de (1,10) sencillo no
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar