clc; clear all;
L = 1.25; E = 50000; I = 30000; w0 = 2.5; syms x f(x) = (w0/(120*E*I*L))*(-x^5+2*(L^2)*(x^3)-(L^4)*x); df = diff(f,x); true = df(2); roots = solve(f==0, x); true_roots = double(roots); xl = 200; xu = 300; xr = (xl + xu) / 2; es = 0.001; xr_new(1) = xr; if f(xl) * f(xu) < 0 disp('The function changes sign within this bound') for i = 1:100 val(i) = f(xl) * f(xr_new(i)); if val(i) < 0 disp('The root lies in the lower interval') xu = xr_new(i); elseif val(i) > 0 disp('The root lies in the upper interval') xl = xr_new(i); else val = 0; fprintf('The approximate root of the function is %1.2f \n',xr_new(i)) break end xr_new(i+1) = (xl + xu) / 2; ea = abs((xr_new(i+1) - xr_new(i))./xr_new(i+1)); if ea < es break end end else disp('The function does not change sign within this bound') end
The function does not change sign within this bound
% Print the results ea = ea*100;
Unrecognized function or variable 'ea'.
fprintf('The absolute approximate error is: %1.5f \n',ea) n_iterations = i+1; fprintf('The total number of iterations are: %d \n',n_iterations) root = xr_new(1,end); fprintf('The approximate root of the function is: %1.5f \n', root) x1 = -1000 : 1000; y1 = f(x1); y = double(y1); xmin = -1000; xmax = 1000; ymin = -0.5; ymax = 0.5; plot(x1, y1) hold on plot(true_root,0,'mo','MarkerFaceColor','m') set(gca,'XAxisLocation','origin','YAxisLocation','origin','XMinorTick','on') xlabel('x \rightarrow') ylabel('\uparrow f(x)') title('Graphical root')
NOTE:-
Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help , Finance Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.
There are a few inconsistencies.
(1) The simulation in [for ... end] loop never reached due to if condition f(xl)*f(xu) <0. The actual values of f(xl)*f(xu) were in sym and greater than 0. Therefore, by changing it to double and the if condition (f(xl)*f(xu)>), you will get the simulation results.
(2) The found true roots were in sym.
(3) Similarly, y1 = f(x1) was in sym that need to be numerical. Thus, double() is needed.
(4) if val = 0 is not correct that must be val == 0.
(5) It is better (must be) to use fplot() instead of plot to plot actual faction. By this way tru solutions can be shown explicitly - see figure (2).
Here is the corrected code:
clc; clearvars; L = 1.25; E = 50000; I = 30000; w0 = 2.5; syms f(x) f(x) = (w0/(120*E*I*L))*(-x^5+2*(L^2)*(x^3)-(L^4)*x); df = diff(f,x); true = double(df(2)); roots = vpasolve(f==0, x); true_roots =double(roots(:)); xl = 200; xu = 300; xr = (xl + xu) / 2; es = 0.001; xr_new(1) = xr; if double(f(xl)) * double(f(xu)) >0 disp('The function changes sign within this bound') for i = 1:100 val(i) = double(f(xl)) * double(f(xr_new(i))); if val(i) < 0 disp('The root lies in the lower interval') xu = xr_new(i); elseif val(i) > 0 disp('The root lies in the upper interval') xl = xr_new(i); else val == 0; fprintf('The approximate root of the function is %1.2f \n',xr_new(i)) break end
SEE COMPLETE ANSWER CLICK THE LINK
Comments
Post a Comment