Round coefficients of symbols

106 views (last 30 days)
Brian
Brian on 19 Jun 2013
Answered: Carlos on 8 Dec 2022
I have a solution matrix with equations and coefficients in front of symbols. I want to round them to a certain decimal.
example: X=[1.89545464564*S+0.00000085*M, 1.00000055*S-0.68129354234*M; 0.00000000345*S+0.00000346*M, 1.00004353*S+1.68129354234*M];
How to round the coefficients that are in front of S and M in my matrix to something like 2 or 3 decimal places.
Thank you!

Answers (4)

Andrei Bobrov
Andrei Bobrov on 19 Jun 2013
syms M S
X=[1.89545464564*S+0.00000085*M, 1.00000055*S-0.68129354234*M; 0.00000000345*S+0.00000346*M, 1.00004353*S+1.68129354234*M];
out = vpa(X,4);

Brian
Brian on 6 Nov 2014
That is close, but not quite what I was looking for. The output of your code provided is:
--------------------------------------------------
out = [ 0.00000085*M + 1.895*S, 1.0*S - 0.68129354234042693860828876495361*M;
0.00000346*M + 0.00000000345*S, 1.681*M + 1.0*S]
--------------------------------------------------
I want the 0.00000085 and similar numbers to just say 0, disappear, or say 0.000*S. Also I'm unsure why the 0.68129354234 coefficient does not get rounded. It does round if the sign were positive instead of negative.
My desired output would be:
--------------------------------------------------
out = [ 1.895*S + 0.000*M, 1.000*S - 0.6813*M;
0.000*S + 0.000*M, 1.000*S + 1.681*M]
_______________________________
ANSWER:
I used Digits(4) at the top of the code. This was the best I could do. Rounded everything to 4 significant figures. I was already using vpa earlier in the code as well.

Image Analyst
Image Analyst on 7 Nov 2014
Use the second argument for round(). From the (R2014b) help for round():
Y = round(X,N) rounds to N digits:
N > 0: round to N digits to the right of the decimal point.
N = 0: round to the nearest integer.
N < 0: round to N digits to the left of the decimal point.
  1 Comment
amin ya
amin ya on 8 Jul 2019
These are symbolic variables. round doesnot work for syms

Sign in to comment.


Carlos
Carlos on 8 Dec 2022
Hope it's not too late:
syms M S
X=vpa([1.89545464564*S+0.00000085*M, 1.00000055*S-0.68129354234*M; 0.00000000345*S+0.00000346*M, 1.00004353*S+1.68129354234*M]);
for i = 1:length(X)
Coef = coeffs(X(i));
for j = 1:length(Coef)
if Coef(j) < 0.001 %you can change 0.001 to adjust precision
X(i) = subs(X(i),Coef(j),0);
end
end
end
X = vpa(X,5) %use vpa becouse the function subs adds unwanted decimals.

Community Treasure Hunt

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

Start Hunting!