# Best Practice for Defining Large Constant Array in Function (Must Code-generate)

7 views (last 30 days)

Show older comments

I have a function that uses a largish array of constant Legendre polynomial coefficients. I'm curious, from a performance standpoint, of the best way to define these constants in a MATLAB Function. The simplest approach is to define them directly:

function y = foo(x)

%#codegen

coeff = [1,2,3,3;...

2,34,45,5;...

45,565,56754,43;

.

. % Many lines of coeff.

.

.];

y = someFunction(x,coeff);

end

I could make coeff persistent as follows, but am not sure if there is any performance benefit of doing this:

function y = foo(x)

%#codegen

persistent coeff

if isempty(coeff)

coeff = [1,2,3,3;...

2,34,45,5;...

45,565,56754,43;

.

. % Many lines of coeff.

.

.];

end

y = someFunction(x,coeff);

end

I'm curious about the consesus on best practice in this circumstance, I need the resulting function to code-generate in a Simulink MATLAB function.

### Answers (1)

Sean de Wolski
on 10 Apr 2020

Edited: Sean de Wolski
on 10 Apr 2020

##### 2 Comments

Sean de Wolski
on 16 Apr 2020

System objects are fit well for the dual use case that you point out. I.e. use in MATLAB or direct reuse in Simulink with the MATLAB System Block.

I don't understand all of the internals, but they're supposed to be efficient in how the JIT or generated code manage things to make the step() method as fast as possible for real-time systems. Hence why the DSP System Toolbox has many of these objects all geared for code generation. If your states aren't changing, they may be of little value. In my experience, much of the OO overhead was improved in >=R2015b with the new MATLAB execution engine.

Check out this video https://www.mathworks.com/videos/accelerate-image-compression-algorithm-77688.html

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!