Info
This question is closed. Reopen it to edit or answer.
Problems with code with symbolic variables.
1 view (last 30 days)
Show older comments
Hi guys, I have an issue with this code. The problem is that with k>3, the algorithm stops and does not work. I tried deleting the variables but does not work either. If someone knows how to work with symbolic variables we can talk via gmail or Telegram if you wish I will be really grateful for that.
function [S, Gnew,Enew] = BGroebner1(k)
M = 3*k + 1;
x = sym('x');
r = sym('r');
c = sym('c', [1 M+1]);
% Define the sum of monomials with negative coefficients
CC = x;
for i = 1:M+1
CC = CC + c(1,i)*x^(-i);
end
sM = expand(CC^(3));
for i = M:1:3*M+3
sM = subs(sM, x^(-i), r);
end
sMnew = sM;
sMnew = subs(sMnew,r,0);
sMnew1 = expand(x^(M-1)*sMnew);
C =coeffs(sMnew1,x);
E =sym('E',[1,M-1]);
for i= M-1:-1:1
E(1,M-i) = C(1,i);
end
% Calculate Groebner basis,
num_syms = M+1;
syms_cell = cell(1, num_syms);
for i = M+1:-1:1
syms_cell{i} = sym(['c', num2str(M+2-i)]);
end
c = [syms_cell{:}];
G = gbasis(E,c,"MonomialOrder",'Lexicographic');
J = (M+1)*M;
sM1 = expand(CC^{M});
sMnew2 = expand(x^(J)*sM1);
E2 = coeffs(sMnew2,x);
EM = E2(J);
EM1=E2(J-1);
F= sym('F');
Enew = [E,EM,EM1+F];
% Groebner basis with (E^M)_1, (E^M)_2 + F
Gnew = gbasis(Enew,[F c],"MonomialOrder",'Lexicographic');
%% Calculate the solutions of the E_{1}, E_{2},...
eqn =sym('eqn', [1 M-1]);
for i=1:1:M-1
eqn(i)= Enew(i)==0;
end
d = sym('c', [1 M+1]);
S = vpasolve(eqn,d);
end
0 Comments
Answers (1)
John D'Errico
on 18 Jun 2024
No. I won't consult by gmail, or whatever. But there is no need.
Even for k==2, what do I see?
eqn =
[3*c1^2 + 3*c3 == 0, 3*c4 + 6*c1*c2 == 0, c1^3 + 6*c3*c1 + 3*c2^2 + 3*c5 == 0, 3*c2*c1^2 + 6*c4*c1 + 3*c6 + 6*c2*c3 == 0, 3*c1^2*c3 + 3*c1*c2^2 + 6*c5*c1 + 6*c4*c2 + 3*c3^2 + 3*c7 == 0, 3*c4*c1^2 + 6*c3*c1*c2 + 6*c6*c1 + c2^3 + 6*c5*c2 + 3*c8 + 6*c3*c4 == 0]
A messy nonlinear polynomial system of equations. And even at that, the solver took some serious time to find a solution. (And that was only one solution. Note that for any such problem, there would almost always be multiple solutions available. vpasolve finds only ONE solution. And the solution it does find may not be one that makes you happy, even if you could indeed recognize what about such a solution is even good or bad.) For larger values of k, the system will become far more complex, with many thousands, even millions of terms generated internally in those equations.
Your computer is not infinitely powerful. Well it is not, unless you work in TV or in a movie, where computers can do anything within a tiny fraction of a second, and only a few clicks on the keyboard or even a spoken command.
Just because you can write code to do something, does not mean a solution can be found in a finite amount of time.
0 Comments
This question is closed.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!