2014-05-24 129 views
0

我有一个Maple中的符号矩阵(18乘18),我想导出到Matlab。 我使用with(CodeGeneration),然后Matlab(...)为了将其转换为Matlab语法,但它不响应,因为矩阵太大。有没有其他的方式来做到这一点,并将其保存到文本文件。如何将Maple的符号变量导出为文本文件(Matlab格式)?

PS:H是这样的:

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) ...] 

但要长得多

+0

您可以导出较小的矩阵吗?这有点破解,但如何将矩阵分成行或列? [[ExportMatrix]](http://www.maplesoft.com/support/help/Maple/view.aspx?path=ExportMatrix)是否可以工作,还是仅用于数字数据?除非你的矩阵元素依赖于自定义或专门的函数,否则代码生成对于这个看起来似乎有点过分你真的只需要一种方法将矩阵转换为Matlab可以处理的文本格式。 – horchler

+1

@horchler:'ExportMatrix'仅用于数字数据。 “专业功能”是什么意思? – milad

+0

如果您可以更具体地了解矩阵的内容并提供演示代码,它可能会帮助人们提供帮助。它是否包含您编写的自定义函数或可能特定于Maple的专用函数?如果它是像多项式,触发器,指数等任何数学环境所具有的通用东西,那么您可以直接将它们作为文本输出,并自己对Matlab进行任何额外的转换(或在Matlab中)。我没有枫叶,所以我无法帮助你。看起来这个网站上没有很多Maple用户。 – horchler

回答

1

如果你有两个枫树和MATLAB,你不必枫矩阵导出到一个单独的文件共享它与MATLAB:您可以使用MATLAB连接器将其直接复制到MATLAB内存。请参阅setvar的文档。这就是说,由于Maple容器中有符号数量,所以在移动它们之前,您必须决定如何在MATLAB中表示这些代表。最简单的方法是简单地构建一个接受数量作为参数并产生数字矩阵的函数。您可以使用Maple的代码生成工具为这种功能生成MATLAB代码。

例如,定义以下符号矢量枫树:

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

对于这种或者此类载体,我们可以使用Maple的代码生成工具把它变成一个MATLAB函数:

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

(注意,我已经在上面明确地写了符号列表[x,y],但是如果有必要的话,如果有必要的话可以用indets来计算它,如果有必要概括这种方法的话。)

对于本示例,Maple 18.01生成以下MATLAB代码:

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; 
相关问题