- #1
stvoffutt
- 15
- 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.