Get coefficients of complex equation

I am trying to get coefficients of Quadric Surfaces in General Form like here: http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/geometry/simple.html
My code is:
args=[1,1,1,0,0,0,0,0,-5,0];
a=args(1);b=args(2);c=args(3);d=args(4);e=args(5);f=args(6);g=args(7);h=args(8);m=args(9);s=args(10); %M=i , j = s
syms x y z real
Q=[a,d,e,g;
d,b,f,h;
e,f,c,m;
g,h,m,s];
X=[x,y,z,1]';
func(x,y,z)=X'*Q*X;
[A,B]=coeffs(func)
My problem is that I don't get coefficients all those with zeros values my result should be : [1,1,1,0,0,0,0,0,-5,0]
I get : [ 1, 1, 1, -10]
How do I get the zeros as well

 Respuesta aceptada

saar beno
saar beno el 15 de Mzo. de 2013
The only solution that I found is:
[parameters,Eqations]=coeffs(funcToConvert)
parameters= sym2poly(parameters(x,y,z));
EqationsCells=arrayfun(@char,Eqations(x,y,z),'Un',0);
SerachRes=Myeq(EqationsCells,{'matrix([[x^2, 1, 1]])'});
index= GetSearchIndex( SerachRes );
if 0==index
a=0;
else
a=parameters(index);
end
SerachRes=Myeq(EqationsCells,{'matrix([[x, x, 1]])'});
index= GetSearchIndex( SerachRes );
if 0==index
d=0;
else
d=parameters(index)/2;
end
SerachRes=Myeq(EqationsCells,{'matrix([[x, 1, x]])'});
index= GetSearchIndex( SerachRes );
if 0==index
e=0;
else
e=parameters(index)/2;
end
SerachRes=Myeq(EqationsCells,{'matrix([[x, 1, 1]])'});
index= GetSearchIndex( SerachRes );
if 0==index
g=0;
else
g=parameters(index)/2;
end
SerachRes=Myeq(EqationsCells,{'matrix([[1, x^2, 1]])'});
index= GetSearchIndex( SerachRes );
if 0==index
b=0;
else
b=parameters(index);
end
SerachRes=Myeq(EqationsCells,{'matrix([[1, x, x]])'});
index= GetSearchIndex( SerachRes );
if 0==index
f=0;
else
f=parameters(index)/2;
end
SerachRes=Myeq(EqationsCells,{'matrix([[1, x, 1]])'});
index= GetSearchIndex( SerachRes );
if 0==index
h=0;
else
h=parameters(index)/2;
end
SerachRes=Myeq(EqationsCells,{'matrix([[1, 1, x^2]])'});
index= GetSearchIndex( SerachRes );
if 0==index
c=0;
else
c=parameters(index);
end
SerachRes=Myeq(EqationsCells,{'matrix([[1, 1, x]])'});
index= GetSearchIndex( SerachRes );
if 0==index
m=0;
else
m=parameters(index)/2;
end
SerachRes=Myeq(EqationsCells,{'matrix([[1, 1, 1]])'});
index= GetSearchIndex( SerachRes );
if 0==index
s=0;
else
s=parameters(index);
end
But it seem no so efficient

Más respuestas (1)

Walter Roberson
Walter Roberson el 15 de Mzo. de 2013

0 votos

By default, coeffs() extracts coefficients with respect to the indeterminates. If a particular symbol has disappeared because its only multiplier was 0, then it is not an indeterminate of the expression and its coefficient will not be extracted by default.
You should possibly use the third form of coeffs

Categorías

Productos

Etiquetas

Preguntada:

el 15 de Mzo. de 2013

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by