Question

#6 Write a Matlab program that finds numerically all the roots (or the zeros) of the...

#6 Write a Matlab program that finds numerically all the roots (or the zeros) of the algebraic equation below in the interval 1.0 <=x<=3.0: sqrt(log(x^2+1))=x^2*sin(e^x)+2

Part a) Prompt the user to enter a positive integer number n, defined the range 2<=n<=15, and then verify if the number entered lies within the specifications. Your program must allow the user to reenter the number without the need to rerun the program.

Part b) Create a user-defined function for the bisection method(see details below). Inside the user-defined function, use the built-in Matlab inline function command (see Lecture Part #3 on Blackboard) to define a function (f(x)) corresponding to the difference between the two sides of the above algebraic equation:

f(x)=sqrt(log(x^2+1)) -x^2*sin(e^x)-2

Part c) Determine ALL the roots(or zeros) of the above-defined equation using the BISECTION METHOD (see details below)with a precision better than 10-n, where n is the number provided by the user by searching the roots using the bisection function in the interval [1,3] at interval steps of 0.2.

Part d) A plot displaying the function corresponding to the difference between the two sides of the above-defined algebraic equation. The x-axis MUST be defined in the range [1,3 ]and the plot MUST have 1000 evenly spaced points. Label the x-axis and y-axis and add a title to the plot. Display inside the function plot all the roots determined from the bisection method.

THE BISECTION METHOD: approximates a root of a function (named f(x)) on an interval containing the root. Assume that xL and xR is an interval [xL,xR] where the function has one root. Assume also that function f(x)is continuous in the interval. If the interval is bisected by computing its midpoint, xM,

XM=(XL+XR)/2

then, three possible situations may occur:

1.f(xM)=0, then xM is the root of the function;

2.the root is in the left half of the interval [xL,xM];

3.the root is in the right half of the interval [xM,xR];

f f(xM)≠ 0, then the interval (left half or right half) where the root is located is bisected again. This process is repeated until |f(xM)|<10-n, returning as the root of the function the last calculated xM.

0 0
Add a comment Improve this question Transcribed image text
Answer #1


Program Screen Shot:

clc, clear, close all IL | 8 part a) n = 0; $initialize with a value out of range while n<2 || n>15 n = input(Enter a positiE while err > tol && iter <= maxIter xM = (xL+xR)/2; compute midpoint if sign (f (XM)) == sign (f(xL)) XL = xM; else xR = xM;

Sample Output:

Command Window Enter a positive integer between 2 and 15: 0 Enter a positive integer between 2 and 15: 30 Enter a positive inf(x) roots O f(x) 1 1.2 1. 4 1.6 1.8 2 22 2.4 2.6 2.8 3

Program Code to Copy:

clc,clear,close all

%% part a)
n = 0; % initialize with a value out of range
while n<2 || n>15
n = input('Enter a positive integer between 2 and 15: ');
end

%% PART b)
f = @(x) sqrt(log(x.^2+1)) -x.^2.*sin(exp(x))-2;

%% PART c)
x0 = 1; xend = 3;
tol = 10^-n;
dx = 0.2; % interval of x
% initialize xL and xR
xL = x0;
xR = xL + dx;

roots = [];
while xR <= xend % ensure xR remains in range of x
err = Inf; % initialize precision error a large positive value
maxIter = 100; %if can't be found in these iterations, it's not a root
iter = 1;
% bisection method starts
while err > tol && iter <= maxIter
xM = (xL+xR)/2; % compute midpoint
if sign(f(xM)) == sign(f(xL))
xL = xM;
else
xR = xM;
end
err = abs(f(xM)); % compute the precision error
iter = iter + 1;
end
xR = xR + dx; % extend xR to the right and continue searching
  
if iter <= maxIter % root is found at xM
roots = [roots xM];
% update xL and xR
xL = xM;
xR = xL + dx;
end

end
% display the roots to command window
disp('roots: '),disp(roots)

%% PART d)
x = linspace(x0,xend,1000);
plot(x,f(x)),hold on, plot(roots,f(roots),'o')
legend('f(x)','roots','location','northwest')
xlabel('x'),ylabel('f(x)'),grid on


------------------------------------------------------------------------------
COMMENT DOWN FOR ANY QUERY RELATED TO THIS ANSWER,

IF YOU'RE SATISFIED, GIVE A THUMBS UP
~yc~

Add a comment
Know the answer?
Add Answer to:
#6 Write a Matlab program that finds numerically all the roots (or the zeros) of the...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT