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

 채택된 답변

saar beno
saar beno 2013년 3월 15일

0 개 추천

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

추가 답변 (1개)

Walter Roberson
Walter Roberson 2013년 3월 15일

0 개 추천

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

카테고리

도움말 센터File Exchange에서 Mathematics and Optimization에 대해 자세히 알아보기

제품

질문:

2013년 3월 15일

Community Treasure Hunt

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

Start Hunting!

Translated by