Search code examples
arraysmatlabsymbolic-math

MATLAB R2012b - Passing arrays and ints into evalin(symengine,expression)


I'm attempting to generate the Laguerre polynomials, and then evaluate them elementwise over a coordinate array.

Presently my code looks something like:

[X,Y] = meshgrid(x_min:mesh_size:x_max,y_min:mesh_size:y_max);

const_p=0; 

const_l=1; %At present these two values don't really matter, any integer will do

coord_r = sqrt(X.^2 + Y.^2)

lag_input = num2str(coord_r.^2)

u_pl = evalin(symengine,['orthpoly::laguerre(',num2str(const_p),',',num2str(const_l),',',lag_input,')']);

However, that returns the following error for the last line;

Error using horzcat

Dimensions of matrices being concatenated are not consistent.

I assumed that this was because the three objects being converted to strings had different sizes, but after making them the same size the problem persists.

I'd rather avoid looping through each element if I can avoid it.


Solution

  • I would go about this slightly differently. How about the below? Note that I changed const_p and const_l from your choices because the resulting Laguerre Polynomial is spectacularly dull otherwise.

    const_p = 2;
    const_l = 1;
    
    %generate the symbolic polynomial in x
    lagpoly=feval(symengine,'orthpoly::laguerre',const_p,const_l,'x');
    
    %Find the polynomical coefficients so we can evaluate using MATLAB's poly
    coeff=double(feval(symengine,'coeff',lagpoly));
    
    %generate a matrix the same size as coord_r in the original question
    x=rand(512);
    
    %Do the evaluation
    u_pl=polyval(coeff,x);