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:-

Plot B:-



