milad
milad

Reputation: 169

How to export a symbolic variable from Maple into a textfile (in Matlab format)?

I have a symbolic matrix (18-by-18) in Maple that I want to export to Matlab. I used with(CodeGeneration) and then Matlab(...) in order to convert it to Matlab syntax, but it doesn't respond because the matrix is too large. Is there any other way to do this and also save it to a text file.

P.S.:H is like this:

H = [0.750e1 0 0 -0.170400e1 * cos(q04) * cos(q05) * cos(q06) + 0.335e-1 * sin(q06) * cos(q05) * cos(q04) * cos(q11) + 0.335e-1 * sin(q11) * cos(q04) * cos(q05) * cos(q06) - 0.168e-1 * sin(q25) * sin(q24) * cos(q21) * sin(q04) * sin(q06) - 0.168e-1 * cos(q04) * sin(q05) * cos(q25) * cos(q23) * cos(q22) + 0.168e-1 * cos(q04) * sin(q05) * cos(q25) * sin(q23) * sin(q22) + 0.170400e1 * sin(q04) * sin(q06) + 0.176150e1 * cos(q06) * cos(q22) * sin(q04) * cos(q21) + 0.735e-1 * cos(q06) * sin(q22) * sin(q04) * cos(q21) + 0.176150e1 * sin(q21) * cos(q22) * sin(q04) * sin(q06) + 0.735e-1 * sin(q21) * sin(q22) * sin(q04) * sin(q06) + 0.176150e1 * sin(q06) * cos(q05) * cos(q22) * cos(q04) * cos(q21) + 0.735e-1 * sin(q06) * cos(q05) * sin(q22) * cos(q04) * cos(q21) - 0.176150e1 * sin(q21) * cos(q22) * cos(q04) * cos(q05) * cos(q06) - 0.735e-1 * sin(q21) * sin(q22) * cos(q04) * cos(q05) * cos(q06) - 0.168e-1 * sin(q25) * cos(q24) * cos(q23) * cos(q22) * sin(q21) * cos(q04) * cos(q05) * cos(q06) + 0.168e-1 * sin(q25) * cos(q24) * sin(q23) * sin(q22) * sin(q21) * cos(q04) * cos(q05) * cos(q06) + 0.168e-1 * cos(q11) * sin(q15) * sin(q14) * sin(q04) * sin(q06) + 0.168e-1 * cos(q04) * sin(q05) * cos(q13) * cos(q12) * cos(q15) - 0.168e-1 * cos(q04) * sin(q05) * sin(q13) * sin(q12) * cos(q15) + 0.168e-1 * cos(q06) * sin(q25) * sin(q24) * sin(q04) * sin(q21) + 0.168e-1 * cos(q06) * sin(q15) * sin(q04) * sin(q11) * sin(q14) + 0.168e-1 * cos(q13) * sin(q12) * sin(q11) * cos(q15) * sin(q04) * sin(q06) + 0.168e-1 * sin(q13) * cos(q12) * sin(q11) * cos(q15) * sin(q04) * sin(q06) - 0.168e-1 * cos(q11) * sin(q15) * sin(q14) * cos(q04) * cos(q05) * cos(q06) - 0.168e-1 * cos(q04) * sin(q05) * cos(q13) * sin(q12) * sin(q15) * cos(q14) - 0.168e-1 * cos(q04) * sin(q05) * sin(q13) * cos(q12) * sin(q15) * cos(q14) - 0.168e-1 * cos(q06) * cos(q15) * sin(q04) * cos(q11) * sin(q12) * cos(q13) - 0.168e-1 * cos(q06) * cos(q15) * sin(q04) * cos(q11) * cos(q12) * sin(q13) + 0.168e-1 * sin(q06) * cos(q05) * sin(q15) * cos(q04) * sin(q11) * sin(q14) - 0.11040e0 * sin(q06) * cos(q05) * cos(q04) * cos(q11) * cos(q12) * sin(q13) - 0.11040e0 * sin(q06) * cos(q05) * cos(q04) * cos(q11) * sin(q12) * cos(q13) - 0.9320e-1 * cos(q06) * sin(q04) * cos(q11) * cos(q12) * sin(q14) * cos(q13) + 0.9320e-1 * cos(q06) * sin(q04) * cos(q11) * sin(q12) * sin(q14) * sin(q13) - 0.11040e0 * sin(q11) * cos(q12) * sin(q13) * cos(q04) * cos(q05) * cos(q06) - 0.11040e0 * sin(q11) * sin(q12) * cos(q13) * cos(q04) * cos(q05) * cos(q06) + 0.9320e-1 * cos(q13) * cos(q12) * sin(q11) * sin(q14) * sin(q04) * sin(q06) - 0.9320e-1 * sin(q13) * sin(q12) * sin(q11) * sin(q14) * sin(q04) * sin(q06) + 0.176150e1 * cos(q04) * sin(q05) * sin(q12) - 0.735e-1 * cos(q04) * sin(q05) * cos(q12) + 0.335e-1 * cos(q06) * sin(q04) * cos(q11) - 0.335e-1 * sin(q11) * sin(q04) * sin(q06) + 0.176150e1 * cos(q06) * sin(q04) * cos(q11) * cos(q12) + 0.735e-1 * cos(q06) * sin(q04) * cos(q11) * sin(q12) - 0.176150e1 * sin(q11) * cos(q12) * sin(q04) * sin(q06) - 0.735e-1 * sin(q11) * sin(q12) * sin(q04) * sin(q06) - 0.168e-1 * sin(q06) * cos(q05) * sin(q15) * cos(q04) * cos(q11) * cos(q12) * cos(q14) * cos(q13) + 0.168e-1 * sin(q06) * cos(q05) * sin(q15) * cos(q04) * cos(q11) * sin(q12) * cos(q14) * sin(q13) - 0.168e-1 * cos(q13) * cos(q12) * sin(q11) * sin(q15) * cos(q14) * cos(q04) * cos(q05) * cos(q06) + 0.168e-1 * sin(q13) * sin(q12) * sin(q11) * sin(q15) * cos(q14) * cos(q04) * cos(q05) * cos(q06) - 0.3500e0 * cos(q04) * sin(q05) * sin(q12) * cos(q13) - 0.3500e0 * cos(q04) * sin(q05) * cos(q12) * sin(q13) - 0.9320e-1 * cos(q06) * sin(q04) * sin(q11) * cos(q14) - 0.9320e-1 * cos(q11) * cos(q14) * sin(q04) * sin(q06) - 0.11040e0 * cos(q04) * sin(q05) * sin(q12) * sin(q13) + 0.11040e0 * cos(q04) * sin(q05) * cos(q12) * cos(q13) + 0.168e-1 * sin(q06) * cos(q05) * sin(q25) * cos(q24) * cos(q22) * cos(q23) * cos(q04) * cos(q21) - 0.168e-1 * sin(q06) * cos(q05) * sin(q25) * cos(q24) * sin(q22) * sin(q23) * cos(q04) * cos(q21) - 0.3500e0 * sin(q06) * cos(q05) * cos(q04) * cos(q11) * cos(q12) * cos(q13) + 0.3500e0 * sin(q06) * cos(q05) * cos(q04) * cos(q11) * sin(q12) * sin(q13) - 0.3500e0 * sin(q11) * cos(q12) * cos(q13) * cos(q04) * cos(q05) * cos(q06) + 0.3500e0 * sin(q11) * sin(q12) * sin(q13) * cos(q04) * cos(q05) * cos(q06) + 0.168e-1 * cos(q06) * sin(q25) * cos(q24) * cos(q22) * cos(q23) * sin(q04) * cos(q21) - 0.168e-1 * cos(q06) * sin(q25) * cos(q24) * sin(q22) * sin(q23) * sin(q04) * cos(q21) + 0.168e-1 * sin(q06) * cos(q05) * cos(q25) * sin(q22) * cos(q23) * cos(q04) * cos(q21) + 0.168e-1 * sin(q06) * cos(q05) * cos(q25) * cos(q22) * sin(q23) * cos(q04) * cos(q21) + 0.168e-1 * sin(q25) * cos(q24) * cos(q23) * cos(q22) * sin(q21) * sin(q04) * sin(q06) - 0.168e-1 * sin(q25) * cos(q24) * sin(q23) * sin(q22) * sin(q21) * sin(q04) * sin(q06) - 0.168e-1 * cos(q25) * cos(q23) * sin(q22) * sin(q21) * cos(q04) * cos(q05) * cos(q06) - 0.168e-1 * cos(q25) * sin(q23) * cos(q22) * sin(q21) * cos(q04) * cos(q05) * cos(q06) - 0.43660e0 * cos(q04) * sin(q05) * sin(q22) * sin(q23) + 0.43660e0 * cos(q04) * sin(q05) * cos(q22) * cos(q23) + 0.176150e1 * cos(q04) ...]

but so much longer

Upvotes: 0

Views: 1448

Answers (1)

saforrest
saforrest

Reputation: 196

If you have both Maple and MATLAB, you don't have to export the Maple matrix to a separate file to share it with MATLAB: you can use the MATLAB connector to copy it directly to MATLAB memory. See the documentation for setvar.

That said, as there are symbolic quantities in your Maple container, you'll have to decide how you want those represented in MATLAB before you move them over. The simplest way is simply to build a function which accepts the quantities as parameters and produces a numeric matrix. You can use Maple's code generation tools to produce MATLAB code for such a function.

For example, define the following symbolic Vector in Maple:

V := <x^2+1, sin(x+y)+cos(x+y), 2*exp(y), (3/2)*ln(y)>;

For this or any such Vector, we can use Maple's code generation tools to turn this into a MATLAB function:

CodeGeneration[Matlab]( codegen[makeproc]( V, [x,y] ) );

(Note I've written the symbol list [x,y] explicitly above, but it could be computed if necessary with indets if it were necessary to generalize this approach.)

For this example, Maple 18.01 generates the following MATLAB code:

function cg3return = cg3(x, y)
  A = [0 0 0 0];
  A(1) = x ^ 2 + 1;
  A(2) = sin(x + y) + cos(x + y);
  A(3) = 0.2e1 * exp(y);
  A(4) = 0.3e1 / 0.2e1 * log(y);
  cg3return = A;

Upvotes: 1

Related Questions