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

 Akzeptierte Antwort

saar beno
saar beno am 15 Mär. 2013

0 Stimmen

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

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 15 Mär. 2013

0 Stimmen

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

Kategorien

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by