Hi All. Just wondering why answer to (i) is not 4.9e+4. an why answer to (iii) is not (9x)/2 or 4.5 x. Many thanks. Brian

% (i) Find f(1.2) in the form 'a x 10^n' where a is correct to 1 decimal place
% (ii) Find x for which g(x) = 3.5
% (iii) Find g(f(x)) in simplest form
clear, clc
syms x
f = exp(9*x); g = log(sqrt(x));
% (i)
f_at_x = subs(f,x,1.2); % evaluates f(x = 1.2) as symbolic
f_at_x = double(f_at_x); % converts to double (real)
f_at_x = round(f_at_x,1) % ??? round to 1 decimal place
f_at_x = 4.9021e+04
% (ii)
solve (g == 3.5, x)
ans = 
% (iii)
g_f_x = (subs(g,x,f));
g_f_x = simplify(g_f_x)
g_f_x = 

Antworten (2)

Your value in (i) for f(1.2) is 49020.80113638172, so when you round to 1 decimal, it becomes 49020.8 which in engineering notation is 4.9021e4 because of rounding the right most digit.
You should reread the question to understand why you are not getting 4.9 as answer (hint:question is asking a where f(1.2) = a * 10^n ) :)
syms x
f = exp(9*x); g = log(sqrt(x));
% (i)
f_at_x = subs(f,x,1.2); % evaluates f(x = 1.2) as symbolic
format long % change displasy setting
f_at_x = double(f_at_x) % converts to double (real)
f_at_x =
4.902080113638172e+04
f_at_x_rounded = round(f_at_x,1) % ??? round to 1 decimal place
f_at_x_rounded =
4.902080000000000e+04
format bank % change displasy setting
f_at_x_rounded
f_at_x_rounded =
49020.80
For part ii, log(x^n) = n*log(x) so both expressions are equivalent
fun1 = @(x) 0.5*log(exp(9*x));
fun2 = @(x) log(exp(4.5*x));
fun1(1.2) == fun2(1.2) % are they equal?
ans = logical
1

7 Kommentare

Thanks for that Aquatris. But f_at_x_rounded, after 'bank format' , displays as 49020.80 . How do I finish by displaying as 4.9e+4? Thanks v much.
Now this is a different question. Now you are asking how to convert 49020.80113638172 to 4.9 * 10^4. Here is one way
x = 49020.80113638172; % represent as x = a * 10^n
n = floor(log10(x))
tmp_ = 1; % decimal accuracy for a, 1,2,3,4 etc
a = floor(x/10^(n-tmp_))/10^tmp_
a = 4.9000
newX = a*10^n
newX = 49000
Hi Voss. Super! Thanks very much for that. B
@Brian Smyth You're welcome!
Note that fprintf is for outputting formatted text to the command line or to text files. If instead you want to display formatted text in a plot, say, you could use sprintf, which supports the same options for formatting that fprintf does, but returns a character vector containing the formatted text:
x = 49020.80113638172;
plot(1:10)
str = sprintf('%.1e',x) % formatted text (character vector, str)
str = '4.9e+04'
text(5,8,str) % create a text object at point (5,8) showing that formatted text
Hi Voss.
That's good to know. Never quite understood the difference between the two (i..e fprintf and sprintf)! Thank you.

Melden Sie sich an, um zu kommentieren.

Torsten
Torsten am 5 Jul. 2024
Verschoben: Voss am 5 Jul. 2024
For (iii), use
syms x real
instead of
syms x

Gefragt:

am 5 Jul. 2024

Kommentiert:

am 5 Jul. 2024

Community Treasure Hunt

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

Start Hunting!

Translated by