Matlab - Generar un vector con raices reales y positivas

   
Vista:
Imágen de perfil de IngNella

Generar un vector con raices reales y positivas

Publicado por IngNella nela_paredes@hotmail.com (1 intervención) el 12/06/2015 01:53:56
1.- Genero los coeficientes de un polinomio, ya q este va a depender de la varible In que va a cambiar, entonces esto me genera varios polinomios de grado 4( siempre trabajare con grado 4)

2.- a cada polinomio que genero necesito las raices, y de estas solo necesito los valores positivos y reales, alli es donde viene el problema, necesito generar un vector que solo contenga, las raices que cumpla con la condicion "Valores positivos y reales "

esta ultimo vector es el q no puedo generar
lo que he logrado es generar raicesN, y contiene al parecer las ultimas raices de la ultima evalucion
esto es lo he avanzado, agradesco su ayuda con mi duda

clc
clear all
close all

%Definiendo contantes
q = 1.6e19; %Carga elemental
A = 1e8; %Nonradiative recombination rate
B = 1e-10; %Radiative recombination coefficient
C = 3e-29; %Auger recombination coefficient
tp = 1/(0.625e-12); %Photon lifetime
f = 0.3; %Factor de confinamento
ug = 4; %Group refractive index
c = 3e8; %Light speed in a vacuum
vg=c/ug; %Velocidad de grupo
a = 2.5e-16; %Gain constant
v = 100e-6; %Volumen da region activa
no = 1e18; %Carrier density at transparency
bsp= 10e-3; %Spontaneous-emission factor

for In = 0:30e-3
%calculo de los coeficientes del polinomio
k4= (q*C*f*vg*a)/v;
k3= (f*vg*a*q*B*(1-bsp))/v-q*C*(tp-no*f*vg*a);
k2= (q*f*vg*a*((A/v)-B*no+B*bsp*no)-q*B*(tp+bsp));
k1= (In*f*vg*a)/v + q*A*no*f*vg*a - q*A*tp;
k0= (tp+(no*f*vg*a))*In;

%Guardado los valores en un vector
N=[k4 k3 k2 k1 k0];

% EN ESTA PARTE ES DONDE NECESITO GENERAR DICHO VECTOR, POR QUE ESOS VALORES LOS NECESITO LUEGO PARA EL CALCULO DEL Photon number

%calculando las raices del ecuacion grado 4
raicesN=roots(N);

%calculo del Photon number
%if raicesN>0
%bsp=10e-5;
%P4=(B*bsp*raicesN^2)/(tp-f*vg*a*(raicesN/v-no));
end
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 Royeth

Generar un vector con raices reales y positivas

Publicado por Royeth jesus.royeth@gmail.com (760 intervenciones) el 12/06/2015 03:34:14
veo algunos detalles en tu programa , por ejemplo :
1
for In = 0:30e-3
para In desde 0 hasta un número muy pequeño , si no le especificas un delta o step matlab lo asume como 1 por lo que In solo se ejecuta hasta 0 ya que el siguiente número sería 1 y se pasa.
es decir que se está ejectuando ese ciclo una sola vez
he agregado en tu programa el código que elimina las raices que no sean positivas y tengan números imaginarios y con ese vector raicesN se calcularía otro vector P4 que es lo que entendí que quisite hacer, en todo caso aquí te dejo el código :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
clc
clear all
close all
 
%Definiendo contantes
q = 1.6e19; %Carga elemental
A = 1e8; %Nonradiative recombination rate
B = 1e-10; %Radiative recombination coefficient
C = 3e-29; %Auger recombination coefficient
tp = 1/(0.625e-12); %Photon lifetime
f = 0.3; %Factor de confinamento
ug = 4; %Group refractive index
c = 3e8; %Light speed in a vacuum
vg=c/ug; %Velocidad de grupo
a = 2.5e-16; %Gain constant
v = 100e-6; %Volumen da region activa
no = 1e18; %Carrier density at transparency
bsp= 10e-3; %Spontaneous-emission factor
i=1;
for In = 0:30e-3
%calculo de los coeficientes del polinomio
k4= (q*C*f*vg*a)/v;
k3= (f*vg*a*q*B*(1-bsp))/v-q*C*(tp-no*f*vg*a);
k2= (q*f*vg*a*((A/v)-B*no+B*bsp*no)-q*B*(tp+bsp));
k1= (In*f*vg*a)/v + q*A*no*f*vg*a - q*A*tp;
k0= (tp+(no*f*vg*a))*In;
 
%Guardado los valores en un vector
N=[k4 k3 k2 k1 k0];
% EN ESTA PARTE ES DONDE NECESITO GENERAR DICHO VECTOR, POR QUE ESOS VALORES LOS NECESITO LUEGO PARA EL CALCULO DEL Photon number
 
%calculando las raices del ecuacion grado 4
raicesN=roots(N);
raicesN(and(real(raicesN)<0,imag(raicesN)~=0))=[];
bsp=10e-5;
P4{i}=(B*bsp*raicesN.^2)/(tp-f*vg*a.*(raicesN./v-no));
%calculo del Photon number
%if raicesN>0
i=i+1;
%P4=(B*bsp*raicesN^2)/(tp-f*vg*a*(raicesN/v-no));
end
disp(P4{:})

https://www.facebook.com/royethmatlab
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