Missing coefficients in symbolic expressions with coeffs
10 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
Mech Princess
2012 年 7 月 23 日
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
採用された回答
Nick Drake
2012 年 3 月 1 日
1 件のコメント
Mech Princess
2012 年 7 月 24 日
編集済み: Mech Princess
2012 年 7 月 24 日
There is an error in the if-else statement: Anyone has a solution? Thanks
??? The following error occurred converting from sym to double:
Error using ==> mupadmex
Error in MuPAD command: DOUBLE cannot convert the input expression into a double array.
If the input expression contains a symbolic variable, use the VPA function instead.
その他の回答 (1 件)
Andrei Bobrov
2012 年 2 月 24 日
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):
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!