# Problem with plotting a function in MATLAB

## Homework Statement

Write code for solving the integral $\int_{0}^{x}e^{-t^2}dx$ using simpsons method and then plot the function from $x = 0$ to $x = 5$ with $0.1$ increment.

## Homework Equations

3. The Attempt at a Solution [/B]
I was told that the best way to plot the function is to write it in Matlab so i decided to give it a go since i haven't really worked in matlab before.This is my integral solution code:
Matlab:
function y = simpson_method(x)

y1 = exp(-0.^2);
y2 = exp(-(x).^2);

c = 0;
d = 0;
incr = 0.1;

for i = 1 : (x - 0)/incr - 0.5

y = exp(-(0 + i*incr).^2);

if i/2 == floor(i/2)

d = d + y;
continue
else
c = c + y;
continue
end
end

y = incr/3 * (y1 + 4*c + 2*d + y2);
and the plot code:
Matlab:
x = 0:0.1:15;
y = simpson_method(x);
plot(x,y)
But the output plot is wrong and looks like this: Which is weird since the function i wrote gives correct values at all points. What is wrong here?

#### Attachments

• 8.9 KB Views: 284

Related Engineering and Comp Sci Homework Help News on Phys.org
Orodruin
Staff Emeritus
Homework Helper
Gold Member
You might want to check whether or not your function gives the correct output when you feed it a vector of several points to evaluate it at.

You might want to check whether or not your function gives the correct output when you feed it a vector of several points to evaluate it at.
I'm not sure how to do that on matlab just yet. Is there somewhere i can see examples of that?

Orodruin
Staff Emeritus
Homework Helper
Gold Member
That is what you are doing when you first write x = 0:9.1:15 and then function(x). You are passing a vector as argument and your function needs to be able to handle that.

That is what you are doing when you first write x = 0:9.1:15 and then function(x). You are passing a vector as argument and your function needs to be able to handle that. It does output wrong when i input a vector. How do i fix that in the code? How to make a function able to handle a vector?

#### Attachments

• 25.4 KB Views: 273
FactChecker
Gold Member
You should take a close look at your function. Notice that y1 is always 1. Is that what you want in the last equation for y? I recommend that you simplify the function, add comments to keep it clear, and do not use the variable y inside the loop.

You should take a close look at your function. Notice that y1 is always 1. Is that what you want in the last equation for y? I recommend that you simplify the function, add comments to keep it clear, and do not use the variable y inside the loop.
I made all the corrections and it's still outputting wrong when i feed it a vector like before.
Matlab:
function y = simpson_method(x)  %function which i integrate is e^(-x^2)
yn = exp(-(x).^2);                    %I am using the simpsons method which calculates like this:
%h/3*(f(0) + 4*(f1) + 2*(f(2) + 4*f(3) + ... + f(n))
c = 0;
d = 0;
h= 0.1;

for i = 1 : (x - 0)/h - 0.5                 %summing the parts of the function

f = exp(-(0 + i*h).^2);                %calculating f(i*h)

if i/2 == floor(i/2)                   %checking whether it's even or odd i and adding it to the sum

d = d + f;
continue
else
c = c + f;
continue
end
end

y = h3 * (1+ 4*c + 2*d + yn);         %summing all the parts and return the integral
It has to be that it cant handle a vector but im not sure how to fix that.

Orodruin
Staff Emeritus
Homework Helper
Gold Member
for i = 1 : (x - 0)/h - 0.5 %summing the parts of the function
What do you think this line does?

Edit: I also strongly advice against using i as a variable. It should be reserved for the imaginary unit.

What do you think this line does?
This line is a for loop which increases i from 1 to x/n which is a number of sub-intervals. The -0.5 was added as it does not output correct when i simply write x/n

Orodruin
Staff Emeritus
Homework Helper
Gold Member
But the x you input is a vector!

• diredragon
But the x you input is a vector!
Oh i see it now, can't use x. Does it also pose a problem in the definition of yn? Also do i now need somehow to state that only one element at a time from x is used in the loop. How do i do that?

Last edited: