Matlab - Como almacenar en diferentes variables una secuencia

 
Vista:

Como almacenar en diferentes variables una secuencia

Publicado por Maria E (8 intervenciones) el 10/04/2018 15:04:20
Tengo que realizar un programa que realice lo siguiente:
1. El usuario debe indicar el número de subsistemas.
2. El programa debe pedir los coeficientes del numerador y denominador de los subsistemas.
Tengo algo así:

1
2
3
4
5
6
7
8
9
b=input('número de subsistemas ');
for i=1:length(b)
    mens=['digite el numerador',num2str(i-1)];
    C(i)=input(mens);
end
for j=1:length(b)
    mens=['Digite el denominador',num2str(i-1)];
    D(i)=input(mens);
end

Pero el problema es que solo me lo está almacenando en una sola variable y el hecho es que cada subsistema sería una variable que contiene numerador y denominador. Esta programación es en Matlab.
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
Imágen de perfil de Lindsey
Val: 419
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar en diferentes variables una secuencia

Publicado por Lindsey (119 intervenciones) el 10/04/2018 18:07:13
Hola, bueno, primero creo que deberías verificar el recorrido del for porque 1:length(b) me parece que no te está dando lo que deseas. En lugar de eso puedes usar for i=1:b.
Respecto a lo de guardar cada subsistema en una variable diferente, sí se puede pero encuentro que es más conveniente guardarlo todo en una sola matriz, que puede ser de 2 filas (numerador y denominador) y número de columnas igual al número de subsistemas que se hayan ingresado en b.

1
2
3
4
5
6
7
8
b=input('número de subsistemas ');
subs = zeros(2,b);
for i = 1:b
    subs(1,i) = input(['Digite el numerador',num2str(i-1),':']);
end
for i = 1:b
    subs(2,i) = input(['Digite el denomidador',num2str(i-1),':']);
end

De este modo te queda una matriz así como la describí antes, y si quieres tener los datos del primer subsistema sería subs(:,1), para el segundo subs(:,2) y así sucesivamente.

De todos modos si al final sí quieres tener nombres diferentes para cada subsistema puedes hacerlo con eval, pero no se recomienda el uso de esta función en matlab

1
2
3
4
5
6
7
b=input('número de subsistemas ');
for i = 1:b
    eval(['subs' num2str(i-1) '(1) = input([' '''Digite el numerador'' num2str(i-1) ' ''':'']);']);
end
for i = 1:b
    eval(['subs' num2str(i-1) '(2) = input([' '''Digite el denominador'' num2str(i-1) ' ''':'']);']);
end

Así te quedan variables de nombres diferentes para cada subsistema, subs0, subs1 y así sucesivamente. En cada variable queda un vector de 2 columnas, que corresponden al numerador y denominador ingresados.
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

Como almacenar en diferentes variables una secuencia

Publicado por Maria E (8 intervenciones) el 10/04/2018 19:21:11
Muchas gracias por tu respuesta. Ahora se me genera otra duda.
El usuario debe ingresar los coeficientes del numerador y del denominador como un vector pero me sale este error al ejecutar el scrip.

Seleccione la interconexión: paralelo P o cascada S S
número de subsistemas 2
Digite el numerador0:[1 3 5]

Este es el error

In an assignment A(I) = B, the number of elements in B and I must be the same.

Error in ejemplo4 (line 8)
eval(['subs' num2str(i-1) '(1) = input([' '''Digite el numerador'' num2str(i-1) ' ''':'']);']);

Alguien me indico utilizar poly2sym pero no se como. me podrías ayudar por favor.
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
Imágen de perfil de Lindsey
Val: 419
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar en diferentes variables una secuencia

Publicado por Lindsey (119 intervenciones) el 12/04/2018 18:40:57
Hola, disculpa por demorar. El problema en esta ocasión es que en el código aparece la instrucción subs(1)=lo que ingrese el usuario, pero si se escribe subs(1), en esta variable solo puedes guardar un número, intenta cambiar los paréntesis de (1) y (2), por llaves, {1} y {2}.
Con este cambio, las variables generadas subs0, subs1, y en adelante, son arreglos de celda y no matrices, por lo que si quieres acceder al numerados de la primera variable subs0, tendrías que usar subs0{1}, y para el denominador subs0{2}, y así para las demás variables.
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

Como almacenar en diferentes variables una secuencia

Publicado por Maria E (8 intervenciones) el 12/04/2018 18:52:52
El programa debe solicitar el número de subsistemas
y debe solicitar los coeficientes del número y del denominador las veces que haya indicado en el subsistema, pero estos datos van a hacer vectores.

cuando corro el programa sale esto

número de subsistemas 3
Digite el numerador0:1 2 6
1 2 6
|
Error: Unexpected MATLAB expression.

El programa no me esta reconociendo estos valores como vector por lo cual me sale error, además después de que me los ingrese estos deben estar alojados en unas variables. o sea que el número de variables será igual que el número de subsistemas y cada subsistema esta compuesto por númerador y denominador.
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

Como almacenar en diferentes variables una secuencia

Publicado por Maria E (8 intervenciones) el 12/04/2018 23:52:05
El programa debe hacer lo siguiente:
1. Solicitar al usuario que ingrese el número de subsistemas
2. Solicitar al usuario los coeficientes del numerador y denominador de cada subsistema.

Un subsistema es algo así:
S^2 + 4S + 7 / 3S^3 + 2S^2 + 6S + 1
Pero el usuario solo ingresaría los coeficientes o sea
Numerador [1 4 7]
Denominador [3 2 6 1]
Y esto sería un subsistema
O sea que si el usuario dice 3 subsistemas el programa debe pedir 3 veces el numerador y 3 veces el denominador y esto serian 3 variables cada una con numerador y denominador.
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
Imágen de perfil de Lindsey
Val: 419
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar en diferentes variables una secuencia

Publicado por Lindsey (119 intervenciones) el 13/04/2018 03:57:36
Para ingresar el numerador y el denominador debes incluir los corchetes, así como lo habías escrito en tu mensaje anterior.
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
Imágen de perfil de Lindsey
Val: 419
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar en diferentes variables una secuencia

Publicado por Lindsey (119 intervenciones) el 13/04/2018 03:58:44
O sea así:

Seleccione la interconexión: paralelo P o cascada S S
número de subsistemas 2
Digite el numerador0:[1 3 5]
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

Como almacenar en diferentes variables una secuencia

Publicado por Maria E (8 intervenciones) el 13/04/2018 05:17:24
El problema es que cuando lo digito así me sale error.

Seleccione la interconexión: paralelo P o cascada S S
número de subsistemas 2
Digite el numerador0:[1 2 3]
Cell contents assignment to a non-cell array object.

Error in prueba (line 4)
subs {1,i} = input(['Digite el numerador',num2str(i-1),':']);

Tengo que buscar la manera de que no me saque error y que este se me almacene en una variable que contenga numerador y denominador.
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
Imágen de perfil de Lindsey
Val: 419
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar en diferentes variables una secuencia

Publicado por Lindsey (119 intervenciones) el 13/04/2018 14:22:06
Te había respondido sobre cómo resolverlo con eval porque vi que estabas usando el código de eval, pero ahora estás usando el código que no utiliza eval y en ese se definió previamente subs como una matriz, por lo que no le puedes asignar valores como si fuera un arreglo de celdas, te dejo ambos códigos, ya los probé y ambos funcionan

Sin eval
1
2
3
4
5
6
7
8
clear all
b=input('número de subsistemas ');
for i = 1:b
    subs{1,i} = input(['Digite el numerador',num2str(i-1),':']);
end
for i = 1:b
    subs{2,i} = input(['Digite el denomidador',num2str(i-1),':']);
end
Recuerda que en este todo se guarda en una variable "subs", si quieres acceder al primer subsistema sería numerador: subs{1,1}, y denominador: subs{2,1}, y así.

Con eval
1
2
3
4
5
6
7
8
clear all
b=input('número de subsistemas ');
for i = 1:b
    eval(['subs' num2str(i-1) '{1} = input([' '''Digite el numerador'' num2str(i-1) ' ''':'']);']);
end
for i = 1:b
    eval(['subs' num2str(i-1) '{2} = input([' '''Digite el denominador'' num2str(i-1) ' ''':'']);']);
end
En este quedan diferentes variables subs0, subs1, y así.

Así se ejectua

1
2
3
4
5
6
7
número de subsistemas 3
Digite el numerador0:[1 2]
Digite el numerador1:[4 5 6]
Digite el numerador2:[7 8 9 10]
Digite el denominador0:[11 12 13]
Digite el denominador1:[14]
Digite el denominador2:[15 16]
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

Como almacenar en diferentes variables una secuencia

Publicado por Maria E (8 intervenciones) el 13/04/2018 15:02:35
Perfecto! muchas gracias.

Ahora con estos datos me toca mostrar en la ventana de comando la formula de la respuesta al impulso de cada subsistema.
Pero para poder hallarla tengo que expresar estos vectores como polinomios y no se como hacerlo.

Se que después de que los tenga como polinomios hallo la función de transferencia que sería así.

H= tf(num,den);
y la respuesta al impulso sería
t=0:0.01:10;
h= impulse(H,t);
donde el vector t seria entre 0 y 10 s.

Me podrían ayudar con esta otra duda. 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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar en diferentes variables una secuencia

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 13/04/2018 16:07:56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>> a=[3 4 5]
 
a =
 
     3     4     5
 
>> b=[5 6 8]
 
b =
 
     5     6     8
 
>> H= tf(a,b)
 
H =
 
  3 s^2 + 4 s + 5
  ---------------
  5 s^2 + 6 s + 8
 
Continuous-time transfer function.


1
2
3
4
5
6
7
8
9
10
>> clear all
>> a=[3 4 5]
a =
     3     4     5
 
>> syms s
 
>> N=poly2sym(a,s)
 N =
 3*s^2 + 4*s + 5


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab
JJCC Y ASOCIADOS


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
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

Como almacenar en diferentes variables una secuencia

Publicado por Maria E (8 intervenciones) el 13/04/2018 16:11:29
Hola Jose,

Si así como lo haces en sencillo, el problema es que los datos están almacenados en una matriz como el código que me indico Lindsey, porque son varios subsistemas que va a ingresar el usuario.
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar en diferentes variables una secuencia

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 13/04/2018 16:14:04
Estimada Maria.
Nosotros aportamos en lo que podemos. Ya el usuario tiene que adaptar a sus necesidades, las sugerencias que le damos en el foro.


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab
JJCC Y ASOCIADOS


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
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
Imágen de perfil de Lindsey
Val: 419
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar en diferentes variables una secuencia

Publicado por Lindsey (119 intervenciones) el 13/04/2018 16:45:45
Recuerda lo que te dije sobre cómo acceder a la información del arreglo de celdas.
Puedes anexar esto al código, pero el de sin eval:

1
2
3
for i=1:b
    H(i) = tf(subs{1,i},subs{2,i})
end

Sin el punto y coma al final de la línea 2 te muestra la función de transferencia en la ventana de comando.
Si estuvieras usando el código del eval, tendrías que volver a usar eval en este for y pues como ya ves es más complicado de leer, y más complicado de hacer, pero si lo deseas puedes hacerlo en base al código que ya te dejé. Dentro de este mismo for puedes agregar lo de la respuesta a función impulso.
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

Como almacenar en diferentes variables una secuencia

Publicado por Maria E (8 intervenciones) el 13/04/2018 16:53:30
Muchísimas Gracias.

Me faltaba adicionarlo en ese nuevo ciclo for.

Excelente tu ayuda.
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