4-point Gauss Quadrature with MATLAB

  • Thread starter Thread starter stvoffutt
  • Start date Start date
  • Tags Tags
    Gauss Matlab
AI Thread Summary
The discussion revolves around using 4-point Gauss Quadrature (GQ) in MATLAB for numerical analysis. The user has successfully implemented a GQ routine but encounters a syntax issue when trying to pass different function files as arguments. They receive an error indicating insufficient input arguments when calling their main function with a specific function handle. The user seeks guidance on correctly passing function handles to their GQ routine to allow for flexibility in evaluating various functions. Ultimately, they resolve the issue independently.
stvoffutt
Messages
15
Reaction score
0

Homework Statement


I need to evaluate a function using 4-point GQ.


Homework Equations


GQ theory


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)

weights=1/2*(b-a)*reference_weights;
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));
end

---------------------------------------------------------------------------------------------
%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.
 
Physics news on Phys.org
I figured it out. Thanks.
 

Similar threads

Replies
4
Views
1K
Replies
4
Views
5K
Replies
7
Views
1K
Replies
10
Views
2K
Replies
21
Views
3K
Replies
2
Views
5K
Back
Top