tags:

views:

35

answers:

1

I am writing a Matlab program for simpson's rule I keep getting an error about to many outputs when the program gets to left_simpson = Simpson(a,c,(e1)/2,level, level_max); What is wrong with settinf left_simpson to Simpson(a,c,(e1)/2,level, level_max);?

function Simpson(a,b,e1,level, level_max)


level = level + 1;

h = b - a;

c = (a+b)/2;

one_simpson = h*(f(a) + 4*f(c) + f(b))/6;

d = (a+c)/2;

e = (c+b)/2;

two_simpson = h*(f(a) + 4*f(d) + 2*f(c) + 4*f(e))/2;

if level >= level_max

    disp('h')

    simpson_result = two_simpson;

    disp('maximum levels reached')

    disp(simpson_result);

    if abs(two_simpson - one_simpson) < 15*e1

        simpson_result = two_simpson + (two_simpson - one_simpson)/15;

    else 
        left_simpson = Simpson(a,c,(e1)/2,level, level_max);

        right_simpson = Simpson(c,b,(e1)/2,level, level_max);

        simpson_result = left_simpson + right_simpson;

    end

end
+5  A: 

Your function statement, the first line in your code, doesn't declare what Simpson returns. I don't know what Matlab does with such a declaration. I think you should re-write Simpson to explicitly return a value, or values. Have a look at the Matlab documentation for how to do that.

Once you have declared what Simpson returns, then you will probably be able to avoid the 'too many outputs' problem.

High Performance Mark
If a function is no declared with output arguments, it won't output anything (unless it opens figures, prints to command line, saves data, or writes into a handle object)
Jonas
Thanks for the clarification @Jonas, I've been programming Matlab so long I've forgotten, if I ever knew, what happens in cases that I never code.
High Performance Mark

related questions