Matlab - Separar celda con varias variables sym

 
Vista:
sin imagen de perfil

Separar celda con varias variables sym

Publicado por Ytyo (4 intervenciones) el 05/10/2016 02:52:23
Luego de una serie de pasos logré agrupar la información que requiero, pero ahora me resulta un poco difícil resolver el sistema final de ecuaciones, ya que distintas variables sym se agrupan en una sola celda de la matriz

Este código me organiza la ultima parte del asunto:
----------------------------------------------
1
2
3
4
5
6
7
8
9
10
for i=1:1:n
    aux2=find(barras==nodos(i))'
    sumM(i)=0;
        for j=1:1:length(aux2)
         if aux2(j)<b+0.1
            sumM(i)=sumM(i)+Mij(barras(aux2(j)),barras(aux2(j)+b));
         else sumM(i)=sumM(i)+Mij(barras(aux2(j)),barras(aux2(j)-b))
         end
    end
end
------------------------------------------------
La matriz sumM es la que contiene los datos que pretendo despejar.

- Desde el planteamiento inicial del problema tengo las variables sym combinadas.


Mis variables son las (g), pero no logro separarlas del modo que me gustaría:
----
()g1 ()g2 0 0 0 ()
()g1 ()g2 ()g3 0 0 ()
0 ()g2 ()g3 ()g4 0 ()
0 0 ()g3 ()g4 ()g5 ()
0 0 0 0 ()g5 0
0 0 0 ()g4 0 0
0 0 ()g3 0 0 0
0 ()g2 0 0 0 0
()g1 0 0 0 0 0
----
- Los valores en cero podrían no serlo en otras situaciones
- No logro separar las variables que están en la matriz sym de una columna
- finalmente la matriz desarrollada en el último paso toma la forma:
-----------------------------------------------------------------------------

(6730012515203629*g1)/67108864 + (1208130233354651*g2)/67108864 + 4545430145378701/1073741824

(1208130233354651*g1)/67108864 + (11578248963852863*g2)/67108864 + (2424118224324617*g3)/67108864 + 726192

(2424118224324617*g2)/67108864 + (12429567035137291*g3)/67108864 + (1633789268996865*g4)/67108864 + 1598700

(1633789268996865*g3)/67108864 + (42122732846814065*g4)/134217728 + (7316970345814181*g5)/268435456 + 1275312

(7316970345814181*g4)/268435456 + (35587575770826605*g5)/134217728

(3533825678126553*g5)/33554432

(3533825678126553*g4)/33554432

(4313752048494327*g3)/134217728

(4313752048494327*g2)/134217728

(4313752048494327*g1)/134217728 - 4545430145378701/2147483648

----------------------------------------------------------
(agregué un espacio entre las lineas para que se entienda)
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
sin imagen de perfil

Separar celda con varias variables sym

Publicado por Ytyo (4 intervenciones) el 05/10/2016 07:41:32
Me costó un poco, pero la clave la encontré con los comandos

symvar(A) y coeffs(A)

coeffs me entrega los coeficientes en el sentido inverso:

A= [ag1+bg2+cg3]

coeffs(A)= [c,b,a]


lo demás del siguiente script se adecua a mi caso. La última expresión comprueba que obtengo las expresiones que originalmente se encerraban en una casilla, pero ahora la puedo desarrollar como una multiplicación de matrices.

De seguro alguien puede decirme un desarrollo más abreviado.


-----------------------------------------
aux3=zeros(n,n+1);

for i=1:1:n
col=symvar(sumM(i));
row=coeffs(sumM(i));
Lcol=length(col);
Lrow=length(row);

if Lrow>Lcol %Esto indica que hay valores sin variable sym asociada (máximo 1 valor extra en mi caso)
aux3(i,n+1)=row(1);
end
for j=1:1:Lcol
row2(j)=row(Lrow-j+1);
aux4=find(gij==col(j));
aux3(i,aux4)=row2(j);

end
end

aux3*[gij';1] %comprobación
sumM
---------------------------

Al comprobar la transformación pareciera que algunos valores cambian, pero los coeficientes originales variaron menos de 10^-8.
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