maximapolynomial-approximations

Multivariate polynomial approximation of a function in Maxima


I have long symbolic function in Maxima, let say

fn(x,y):=<<some long equation using x and y>>

I would like to calculate polynomial approximation of this function, let say

fn_poly(x,y)

within known range of x and y and with maximum error e

I know, that there is a funcionality in Maxima, e.g. plsquares, but it needs a matrix on input and I have only function fn(x,y). I don't know how to generate this matrix from my function. genmatrix creates matrix not usable by plsquares.

Is this possible in Maxima?


Solution

  • Make list of lists and transform it to matrix.

    load(plsquares);
    f(x,y):=x^2+y^3;
    mat:makelist(makelist([X,Y,f(X,Y)],X,1,10,2),Y,1,10,2);
    
    -> [[[1,1,2],[3,1,10],[5,1,26],[7,1,50],[9,1,82]],[[1,3,28],[3,3,36],[5,3,52],[7,3,76],[9,3,108]],[[1,5,126],[3,5,134],[5,5,150],[7,5,174],[9,5,206]],[[1,7,344],[3,7,352],[5,7,368],[7,7,392],[9,7,424]],[[1,9,730],[3,9,738],[5,9,754],[7,9,778],[9,9,810]]]
    
    mat2:[];
    for i:1 thru length(mat) do mat2:append(mat2,mat[i]);
    mat3:funmake('matrix,mat2);
    
    -> matrix([1,1,2],[3,1,10],[5,1,26],[7,1,50],[9,1,82],[1,3,28],[3,3,36],[5,3,52],[7,3,76],[9,3,108],[1,5,126],[3,5,134],[5,5,150],[7,5,174],[9,5,206],[1,7,344],[3,7,352],[5,7,368],[7,7,392],[9,7,424],[1,9,730],[3,9,738],[5,9,754],[7,9,778],[9,9,810])
    
    ZZ:rhs(plsquares(mat3,[X,Y,Z],Z,3,3));
    
    -> Determination Coefficient for Z = 1.0
    -> Y^3+X^2