Maple One Coursework - Curve Fitting

The following code is to define the goodfit() procedure, It takes as it's input; a list of points, the list being of varying length. After finding how many points there are in the given list and assigning it to the variable 'length', it sets a matrix, 'mat' to the relevant number of rows and columns.

It then loops through each row or the matrix and within that loops through each column adding the co-efficient in it's correct place and then the y element to the end of that row, (using the method of curve fitting).

Using the gaussjord() method of the linalg package, the polynomial is created recursively in y. This can then be tested.

goodfit() code:-

goodfit := proc(pts::list)
    local length, result, element, mat, i, j, y;
    length := nops(pts);
    with(linalg);
    mat:= matrix(length, (length+1));
    for j from 1 to length do
        for i from 1 to length do
            element := pts[j][1]^(i-1);
            mat[j, i] := element;
        od;
        mat[j, (length+1)]:= pts[j][2];
    od;
    result:= gaussjord(mat);
    y:= 0;
    for j from 1 to length do
        y:= y + result[j, (length+1)]*(x^(j-1));
    od;
end:

Testing:-

The code was tested using the points (1,23), (2,5), (3,-5), (4,10) and (100,2), plotted from x=0 to x=100. (See Plot A)

> y:= goodfit([[1, 23], [2, -5], [3, -5], [4, 10], [100, 2]]);
> plot([y, [[1, 23], [2, -5], [3, -5], [4, 10], [100, 2]]], x=0..100, 
       color=[grey, black], 
       style=[line, point]);

On plot A it is quite hard to see the individual points, using a graph from x=0 to x=7, it is clearer to observe that the procedure worked: (See Plot B)

> plot([y, [[1,23],[2,-5],[3,-5],[4,10],[100,2]]], x=0..7, 
       color=[grey, black], 
       style=[line, point]);

Plot A:-

When the test points are plotted from x=0 to x=100, the graph looks like it breaks away from the x axis at 15 peaks beneith the x axis at about 80 (with a value of -180000) then crosses the x axis again at 100

Plot B:-

When the test points are plotted from x=0 to x=7, the graph goes up and down with min of 8 and max curve point of about 40