Problem with plotting a function in MATLAB

Click For Summary

Discussion Overview

The discussion revolves around a MATLAB coding problem related to implementing Simpson's method for numerical integration of the function ##e^{-t^2}## and plotting the results. Participants are exploring issues with handling vector inputs and the correctness of the output plot.

Discussion Character

  • Homework-related
  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant shares their MATLAB code for implementing Simpson's method and expresses confusion over incorrect plot outputs.
  • Another participant suggests checking if the function correctly handles vector inputs.
  • Some participants note that the function may not be designed to handle vector inputs, leading to incorrect outputs.
  • There are recommendations to simplify the function and clarify variable usage, particularly regarding the variable ##y## and the constant ##y1##.
  • Concerns are raised about the use of the loop variable ##i##, with suggestions that it should not be used as it may conflict with MATLAB's imaginary unit.
  • Participants discuss the implications of using a vector for ##x## in the loop and how it affects the calculations within the function.

Areas of Agreement / Disagreement

Participants generally agree that the function does not handle vector inputs correctly, but there is no consensus on the best approach to fix the issue or on the specific changes needed in the code.

Contextual Notes

Limitations include the function's inability to process vector inputs properly, and there are unresolved questions about how to iterate over elements of a vector within the loop.

diredragon
Messages
321
Reaction score
15

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:

plot.JPG

Which is weird since the function i wrote gives correct values at all points. What is wrong here?
 

Attachments

  • plot.JPG
    plot.JPG
    8.9 KB · Views: 600
Physics news on Phys.org
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.
 
Orodruin said:
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?
 
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.
 
Orodruin said:
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.
Capture.JPG

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

  • Capture.JPG
    Capture.JPG
    20.1 KB · Views: 551
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.
 
FactChecker said:
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 can't handle a vector but I am not sure how to fix that.
 
diredragon said:
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.
 
Orodruin said:
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
 
  • #10
But the x you input is a vector!
 
  • Like
Likes   Reactions: diredragon
  • #11
Orodruin said:
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:

Similar threads

Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
7
Views
3K
  • · Replies 6 ·
Replies
6
Views
3K
Replies
2
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K