1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: 4-point Gauss Quadrature with MATLAB

  1. Dec 12, 2013 #1
    1. The problem statement, all variables and given/known data
    I need to evaluate a function using 4-point GQ.

    2. Relevant equations
    GQ theory

    3. The attempt at a solution
    I have got more of a programming issue in MATLAB. I am new to MATLAB. Actually this is for a numerical analysis course where we kind of learn MATLAB on the fly. First, I have 4 .m files to calculate the 4-point GQ which are listed below. Now, I have the program running for a specific function.m file and it calculates correctly. But I want to modify my existing GQ routine such that I can call any function.m file I want to. I think this is more of a syntax issue than anything. Since I have no experience with MATLAB any input or suggestions will be greatly appreciated.
    .m files:

    Main Program
    function gauss_quadFULL(a,b,'integrand')
    format longe;

    %fhandle = @integrand;
    reference_weights = [0.3478548 0.6521452 0.6521452 0.3478548];
    reference_nodes = [-0.861136312 -0.339981044 0.3399810436 0.8611363116];
    [New_weights, New_nodes] = gauss_quad(a,b,reference_weights,reference_nodes);
    FourPoint_Gauss = guass_quadSUM('integrand',New_weights,New_nodes)

    %This function takes the reference weights/nodes and transforms them to the [-1,1] interval

    function [weights, nodes] = gauss_quad(a,b,reference_weights,reference_node)

    nodes = 1/2*((b-a)*reference_node+(b+a));
    [weights, nodes]

    %Does the sum for GQ using nodes and weights

    function result = guass_quadSUM(fhandle,New_weights,New_nodes)

    result = 0;
    nn = length(New_weights); % We choose weights here instead of nodes because
    % in multidemensions nodes is a matrix.
    for j=1:nn
    result = result + New_weights(j)*feval(fhandle,New_nodes(j));

    %example function
    function result = function_f_quad(x)

    result = cos(pi/4*x)/sin(pi/4*x)^2;


    When I call the main function I get the following error:

    EDU>> gauss_quadFULL(0,1,function_f_quad)
    Error using function_f_quad (line 3)
    Not enough input arguments.

    Again, if I replace the loop sum by:
    result = result + New_weights(j)*function_f_quad(New_nodes(j));
    I get the correct answer. My question is how to pass the GQ main routine a new function, say f1.m, that does the same thing but for any function that I have in an .m file? I have tried messing with the handles and single quotes but I keep getting the same error in my program. Please help. Thank you in advance.
  2. jcsd
  3. Dec 12, 2013 #2
    I figured it out. Thanks.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted