Missing coefficients in symbolic expressions with coeffs
Show older comments
Ok, I have been trying to use coeffs here is what I am currently have a problem with, although I have 5 symbolic variables, not all show up in every equation so when I try and gather coeffients I would like to be able to catch even the 0 values. heres what I have so far.
clc
clear
m= [2 -3 ; 3 -2];
q = [ -1 -1]';
xv = sym('x1');
lm = length(m);
yv = sym(zeros(1, lm))';
zv = sym(zeros(1, lm))';
for k=1:lm
yv(k) = sym(sprintf('x%d', k+1));
zv(k) = sym(sprintf('x%d', k+lm+1));
end
A = [-(m*yv+xv*q);m*yv+xv*q-zv; yv-zv;zv-yv];
Aineq=zeros;
temp = zeros;
for i=1:length(A)
temp=coeffs(A(i,:))
for j=1:length(temp)
Aineq(i,j)=temp(j)
end
end
Aineq
the last nested for was my attempt to gather the coefficients. I but I cannot place them in the right way this way. Any suggestions? I have looked at ineval and feval but I do not see the how to use these tools
Oh this is what my output looks like A =
-2*x2+3*x3+x1
-3*x2+2*x3+x1
2*x2-3*x3-x1-x4
3*x2-2*x3-x1-x5
x2-x4
x3-x5
x4-x2
x5-x3
Aineq =
1 -2 3 0
1 -3 2 0
-1 2 -3 -1
-1 3 -2 -1
1 -1 0 0
1 -1 0 0
-1 1 0 0
-1 1 0 0
So this is where I am stuck at this point.
1 Comment
Mech Princess
on 23 Jul 2012
Hi. does any one know how to do this when the expressions in A has constants also? I tried the code and it gets errors because of the constants. Thanks
Accepted Answer
More Answers (1)
Andrei Bobrov
on 24 Feb 2012
xx = symvar(A);
Aineq = zeros(numel(A),numel(xx));
for j1 = 1:numel(A)
[v1,v2] = coeffs(A(j1),xx);
Aineq(j1,ismember(xx,v2)) = v1;
end
on Nick Drake comment: try code
xx = cat(1,xv ,yv,zv)
Aineq = zeros(numel(A),numel(xx));
for j1 = 1:numel(A)
[v1,v2] = coeffs(A(j1),xx);
Aineq(j1,ismember(xx,v2)) = v1;
end
on Nick Drake comment2, on PC (W7 32 bit, MATLAB R2011b):

Categories
Find more on Common Operations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!