Effacer les filtres
Effacer les filtres

Order terms in symbolic poly converted to string

58 vues (au cours des 30 derniers jours)
Ethan Duckworth
Ethan Duckworth le 17 Juil 2024 à 23:56
Commenté : Ethan Duckworth le 18 Juil 2024 à 10:55
Is there a way to control the order of the terms in a symbolic polynomial that has been converted to string?
E.g. the following
syms x
T=taylor(exp(x),order=3);
string(T)
results in
ans = "x + x^2/2 + 1"
and I would rather have it as 1+x+x^2/2 or the reverse order. I'll be putting this in the title of a plot so if there is some other way to automatically get the correct order in the title that would work equally as well.

Réponse acceptée

Liam Ivers
Liam Ivers le 18 Juil 2024 à 1:13
Modifié(e) : Liam Ivers le 18 Juil 2024 à 1:17
Use the sympref function to change the display of the symbolic polynomial:
I noticed that the string function does not update with this change(A = "x + x^2/2 + 1"), but it does if you use the latex command (B = '1+x+\frac{x^2}{2}') which may look better for plot headings.
syms x
T=taylor(exp(x),order=3)
sympref('PolynomialDisplayStyle','ascend')
A = string(T)
B = latex(T)
titletext = ("$" + latex(T) + '$')
title(titletext,Interpreter='latex')
  2 commentaires
Sam Chak
Sam Chak le 18 Juil 2024 à 1:36
@Ethan Duckworth, Consider trying this "what-you-see-is-what-you-get" direct approach.
sympref("PolynomialDisplayStyle", "ascend");
syms x
T = taylor(exp(x), order=3)
T = 
titletext = ("$" + latex(T) + '$');
fplot(T), grid on
title(titletext, Interpreter='latex')
Ethan Duckworth
Ethan Duckworth le 18 Juil 2024 à 10:55
Weird that string(T) doesn't preserve the order of the terms, but that latex(T) does!

Connectez-vous pour commenter.

Plus de réponses (1)

James Tursa
James Tursa le 18 Juil 2024 à 1:26
Modifié(e) : James Tursa le 18 Juil 2024 à 1:50
Brute force if you need the string for some reason?
syms x
ex = taylor(exp(x),order=3)
ex = 
[C,T] = coeffs(ex)
C = 
T = 
terms = fliplr(C.*T)
terms = 
n = numel(terms);
s = char(terms(1));
for k=2:n
c = char(terms(k));
if( c(1)=='-' )
s = [s ' - ' c(2:end)];
else
s = [s ' + ' c];
end
end
s
s = '1 + x + x^2/2'
  1 commentaire
Ethan Duckworth
Ethan Duckworth le 18 Juil 2024 à 10:54
Wholy cow! That works, but the shorter approach by @Liam Ivers is the one I accepted.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Symbolic Math Toolbox dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by