Error in sym: Character vectors and strings in the first argument can only specify a variable or number.
20 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
So I have this simple code
x = sym('x',[5,1]);
T1 = sprintfc('x%d(t)', 1:5); T1=T1'; syms(T1{:});
eqn = x(1)^2 + x(2) + x(3)/3 + x(4) - x(5);
subs(eqn,x(1:5),T1(1:5))
This used to work perfectly before. Now, I'm using Matlab 2018a. It gives me this error:
Error using sym>convertChar (line 1448)
Character vectors and strings in the first
argument can only specify a variable or
number. To evaluate character vectors and
strings representing symbolic expressions,
use 'str2sym'.
Error in sym>tomupad (line 1214)
S = convertChar(x);
Error in sym (line 211)
S.s = tomupad(x);
Error in sym/subs>@(x)sym(x) (line 209)
Y =
cellfun(@(x)sym(x),Y,'UniformOutput',false);
Error in sym/subs>normalize (line 209)
Y =
cellfun(@(x)sym(x),Y,'UniformOutput',false);
Error in sym/subs>mupadsubs (line 157)
[X2,Y2,symX,symY] = normalize(X,Y); %#ok
Error in sym/subs (line 145)
G = mupadsubs(F,X,Y);
What should I change in this so that I get the required output? I think I have to use syms x1 x2 etc, instead of sym. However, the number of symbolic variables is random, and I don't know how to create symbolic variables in a loop using syms.
2 commentaires
Réponses (3)
Walter Roberson
le 31 Mai 2018
MATLAB has been warning for a number of releases that it was no longer going to be possible to syms() an expression. R2018a is the release that they pulled the plug. str2sym is the replacement.
The difference is that str2sym takes a MATLAB expression as input, whereas sym() used to take a mupad expression as input.
0 commentaires
Aleksei Tepljakov
le 21 Nov 2018
Modifié(e) : Aleksei Tepljakov
le 21 Nov 2018
This is ludicrous and equally outrageous. Introduce a new feature in R2017b, give up on a feature in R2018a. Who does that? Where's the time to adopt existing code?
I made a simple compatibility fix in the code that I now maintain so that it works with simple functions in both pre- and post-R2017b. However, here comes the surprise: it still doesn't fix the overall issue apparently because str2sym doesn't support custom functions. So if I say, for example, str2sym('x1+custom_fun(x2)') where custom_fun is a m-function in the cwd or on MATLAB path, the result is an error: “Unable to convert string to symbolic expression: Invalid data type. Input arrays must be numeric or logical.” This completely breaks the symbolic features of the toolbox along with my applications.
1 commentaire
Aleksei Tepljakov
le 12 Avr 2019
Solution to my problem, as implemented in the form of a compatibility function in GPTIPS2F: https://github.com/is-centre/gptips2f-matlab/blob/master/core/gpsym.m
Achieved by using ugly crutches & also contacting MathWorks support (they were helpful). Still, perhaps someone will find this useful.
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!