Explore BrainMass
Share

Explore BrainMass

    multiple roots using bisection

    This content was COPIED from BrainMass.com - View the original, and get the already-completed solution here!

    Writing program for Matlab where I find multiple roots using bisection, please see attachment

    I wrote this program (with a lot of help) that finds multiple roots using bisection. For example, this program found the first 10 roots of cos(5x). Now, I'm supposed to find and store the first 50 roots of
    Where
    = 50; L = 200; = 0.447; = 4.47
    = 25; L= 200; = 0.748; = 1.875
    = 15; L= 200; = 0.045; = 19.25

    The instructions say: Now we must only modify the variable that determines the number of roots to find. We must also refine (i.e. improve) the bracket search algorithm so that roots that are not evenly spaced can be found. Test your algorithm by finding the roots for at least three different combinations of the parameters and L. How can you verify that your algorithm has not missed any of the roots? HINT: Consider the maximum frequency (dig back to that trig you forgot) to help determine the size of an appropriate bracket for this part of the problem.

    (1) I only understand the first sentence of these instructions. How do I modify my program to find those 50 roots and, yes, how can I verify that my algorithm has not missed any of the roots?
    (2) Also, could you please describe what each line of the main program is doing? I understand the subprogram, 'bisection,' pretty well. I know the two programs are similar.

    Main Program (for finding first 10 roots of cos(5x))
    function root=multibisection(func,j,xtol,ftol)
    xlower=0;
    xupper=xlower+j;
    ylower=feval(func,xlower); %takes func and evaluates xlower into that function
    yupper=feval(func,xupper);
    i=1;
    while i<11
    ylower=feval(func,xlower); %takes func and evaluates xlower into that function
    yupper=feval(func,xupper);
    if abs(ylower)<ftol;
    root=xlower;
    return
    elseif abs(yupper)<ftol;
    root=xupper;
    return
    end

    while (yupper*ylower)>0
    xlower=xupper;
    xupper=xlower+j;
    yupper=feval(func,xupper);
    ylower=feval(func,xlower);
    end
    b=bisection(func,xlower,xupper,xtol,ftol);
    roots(i)=b;
    i=i+1;
    xlower=b+j;
    xupper=xlower+j;
    end
    roots
    format long

    Sub Program
    function root=bisection(func,xlower,xupper,xtol,ftol)

    xroot=(xlower + xupper)/2;
    yroot=feval(func,xroot);
    count=0;

    while abs(yroot)>ftol;
    ylower=feval(func,xlower); %takes func and evaluates xlower into that function
    yupper=feval(func,xupper);
    if ylower*yroot<0;
    xupper=xroot;
    yupper=yroot;
    else
    xlower=xroot;
    ylower=yroot;
    end

    if abs(xupper-xlower)<xtol
    root=xroot;
    return
    end
    root=xroot;

    xroot=(xlower + xupper)/2;
    yroot=feval(func,xroot);

    count=count + 1;
    if count>500 %max number of iterations
    count
    range=xupper-xlower
    disp ('too many interval halvings, stopping ...')
    root=xroot
    return
    end
    end %ends the while loop

    Line4 m-file
    function y=line4(x)
    y=cos(5*x);

    Testing:
    >> multibisection(@line4,0.314,1e-11,1e-11)

    roots =

    Columns 1 through 4

    0.31415926533914 0.94247779608140 1.57079632675968 2.19911485721864

    Columns 5 through 8

    2.82743338823505 3.45575191891333 4.08407044967386 4.71238898037956

    Columns 9 through 10

    5.34070751111268 5.96902604181838

    © BrainMass Inc. brainmass.com April 3, 2020, 1:43 pm ad1c9bdddf
    https://brainmass.com/computer-science/searching/multiple-roots-bisection-9089

    Attachments

    Solution Preview

    Please view attached word document

    I wrote this program (with a lot of help) that finds multiple roots using bisection. For example, this program found the first 10 roots of cos(5x). Now, I'm supposed to find and store the first 50 roots of
    Where
    = 50; L = 200; = 0.447; = 4.47
    = 25; L= 200; = 0.748; = 1.875
    = 15; L= 200; = 0.045; = 19.25

    The instructions say: Now we must only modify the variable that determines the number of roots to find. We must also refine (i.e. improve) the bracket search algorithm so that roots that are not evenly spaced can be found. Test your algorithm by finding the roots for at least three different combinations of the parameters and L. How can you verify that your algorithm has not missed any of the roots? HINT: Consider the maximum frequency (dig back to that trig you forgot) to help determine ...

    Solution Summary

    The expert writes a program for Matlab where multiple roots are found. The solution helps with multiple roots using bisection is given.

    $2.19

    ADVERTISEMENT