Hi,
Before I found out MATLAB had an integral function, I created my own integral function by using the composite Simpson's Rule.
The code not only finds the integral but also plots the curve of the integral. I have tried many functions and so far they have all excecuted properly with the exception of the function ln(x). When I include this integral, the function is solved and I obtain the correct "area under the curve". However, when I try plotting the function, it will only plot the last two points of the array which correspond to the last x value (length of the step size of the integral). I have included two codes, the first one using MATLAB's function so you know how the integral should look like. The second one is the script I wrote that solves the Simpson's Rule.
% Function I am integrating
function fval = myFunInt(x)fval = log(x);end
Using MATLAB's function
cleara=1; % lower limit
b=30; % upper limit
n=1000; % subintervals
h = (b-a)/n; % Spacing
x = 0:30;z = zeros(1,n+1);int = zeros(1,n+1);for j = 0:n x_j=a+j*h; % x values are being allocated in the empty array
x(:,j+1)=x_j; fun = @myFunInt; y=integral(fun,a,x(:,j+1)); int(:,j+1)=y;endplot(x,int);
Using Simpson's Rule
cleardisp('******************************************************************');a=1; % lower limitb=30; % upper limitn=1000; % subintervalsh = (b-a)/n; % Spacing% Creating an empty array where all the arguments will be generated.
% These arguments are the x values that will be inputted into myFunInt(x).
% The x values will be created in the for loop below where x_j is defined
x = zeros(1,n+1);z = zeros(1,n+1);for j=0:n x_j=a+j*h; % x values are being allocated in the empty array x(:,j+1)=x_j;%***************************************************************************
% Creating an empty array where the even values will be allocated.
% This term is enabled when n>2.
even_term = zeros(1,n/2-1);if j>=4 i = 1:j/2-1; even_term(:,i) = 2.*myFunInt(x(:,2*i+1));end%**************************************************************************
% Creating an empty array where the odd values will be allocated.
odd_term = zeros(1,n/2);if j>=2 k = 1:j/2; odd_term(:,k) = 4.*myFunInt(x(:,2*k));end%All the terms in the function are now added to obtain the final
% integral value (area under the curve) of the function.
first_term = myFunInt(x(:,a+1));last_term = myFunInt(x(:,n));final_integral = h./3*(first_term+sum(even_term)+sum(odd_term)+last_term);z_j = final_integral;z(:,j+1)=z_j;endplot(x,z);
Any recommendation is appreciated.
In the end I know I can end up just using MATLAB's integration function but I would rather know why my code is not properly plotting the integral of ln(x).
Thank you!
Guillermo Naranjo
Best Answer