Matlab using Maple symbolic engine suddenly and oddly don't run in certain loop.

for i=1:1000
Firstly, my code can successfully run through loop.
But, at a certain i, such as i = 137 or 152 and so on, the problem is occur, that is
  1. the program seems like paused, the 'command window' no longer output value of variables which successfully output in the same previous loop.
  2. And when I try to pause the program using 'pause' button but the 'pausing' always shows, no response, even though after 12 hours or more.
  3. Meanwhile, the CPU occupied by Matlab is zero when getting into trouble.
  4. There is another odd thing, when I use 'Run and Advance' for this same code, the code sometimes run well, no bad thing happens, however, sometimes the problem occurs as usual.
So, What the problem is? And does it caused by Maple symbolic engine? Because when I use MuPAD there is no such problem.
Matlab 2017a and Maple 2018.

3 Comments

It's going to be difficult if not impossible to offer any suggestions without seeing a small segment of code that we can try to run to reproduce the behavior you're seeing.
The structure of my program is almost like the following code, which is a simplified version. And this program doesn't occur the problem like what I described in the question.
for i=1:3000
syms x y z;
eqns=sym('eqns',[1 3]);
u=[x+2*y+3;y-4*z;2*z+5*y-x/2];
v=[2*x+y;4*y-z;5*z+2*y-x];
% To obatain eqns.
for j=1:3
eqns(j,1)=maple('simplify',u(j,1)-v(j,1));
end
% Convert eqns to matrix.
maple('with(LinearAlgebra):');
var=[x;y;z];
eqns_list = maple('convert', eqns, 'list');
vars_list = maple('convert', var, 'list');
B=maple('GenerateMatrix',eqns_list, vars_list, 'augmented=true', 'outputoptions=[storage=sparse]')
% Convert Symbolic matrix B into numerical matrix B_.
B_=eval(B);
B_num=B_(:,1:totnode);
b=B_(:,totnode+1);
% Solve B_num*x=b;
% By the way, u=maple('LinearSolve',B_) can also be used to solve B_num*x=b, however the problem occurs as usual.
end
After debug my wrong code, I find that
  • In differrent i loop, the following code sometimes run fast, but sometimes run slow. Why? it's odd. So, I thought that the problem may happended here.
B=maple('GenerateMatrix',eqns_list, vars_list, 'augmented=true', 'outputoptions=[storage=sparse]')
B_=eval(B);
  • Meanwhile, When I debug the code, the problem doesn't occur, everything are fine. However, when I directly run my code, the problem occurs as usual. More sad thing is that the problem doesn't occurs in same i loop at every time when I run the code.
What's wrong???
zhang sifei's "Answer" moved here:
I think the cause of this problem may occurs here
The wrong code is
T(i,1)=T(i,1)+w*(u(j,1)-u(i,1))*v*f;
and the sym/subsasgn (line 64) is
Does anybody tell me how to solve it?

Sign in to comment.

Answers (1)

B_=eval(B);
You should never eval() a symbolic expression. The internal language used by the character representation of symbolic expressions is not the language of MATLAB itself, and is not the the internal symbolic toolbox language. This is true for both the Maple based symbolic engine and the later MuPAD based symbolic engine.
You should instead subs() for any variables you want to replace with values from the workspace, and possibly double() the result to make it numeric.

6 Comments

T(i,1)=T(i,1)+w*(u(j,1)-u(i,1))*v*f;
does not appear in any of the code you posted, so it is difficult to say what might be happening.
Sir, you do really help a lot, thank you very much for your useful answer !
Meanwhile, I have a question about subs(), could you give me an example? Such as, do I change the code from
T(i,1)=T(i,1)+w*(u(j,1)-u(i,1))*v*f; % w, v and f are scalar, T and u are symbolic vector.
to
T(i,1)=T(i,1)+subs(w*(u(j,1)-u(i,1))*v*f,[w,v,f],[1,2,3]);
Does it is right?
And finally, I have to explain that this code
T(i,1)=T(i,1)+w*(u(j,1)-u(i,1))*v*f;
is just a simple arithmatic operation but contains symbolic variable and scalar. However, the problem occurs when the code runs here.
I do not have a MATLAB with Maple installed with it handy, but I suspect that you should be using
B_ = double(B);
However, the problem occurs when the code runs here.
I think you have overlooked the point that the line of code you refer to is not anywhere in what you have posted, so we volunteers have no idea where in the code it appears or what else might be happening near there.
  1. In Windows event viewer, I found error report:
1.png
3.png
2. and in the Security and Maintenance control panel, I found:
2.png
What's wrong?
I do not know what is wrong. I would guess that it hung inside of Maple for some reason.

Sign in to comment.

Asked:

on 10 Nov 2019

Commented:

on 4 Dec 2019

Community Treasure Hunt

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

Start Hunting!