1

我对 Mathematica 的导出结果有一个问题。两个矩阵 A 和 B 必须以特殊形式导出。这两个代码列出了从 Maple 导出的数据。重要的是,使用写字板打开的导出文件看起来像列(附加文件)。

请,如果您已经检查过它是否正常工作,请给我写答案,谢谢!您可以检查您的答案与文件进行比较。

代码在这里

带有 Maple 代码和导出文件的矩阵 A 和 B

http://www.2shared.com/file/49wW8Z0-/EXAMPLE_EXPORT_MAPLE_FINAL.html

我也将在这里展示给大家可以轻松看到

代码 1)

A := Matrix(2, 2, {(1, 1) = (455200000000/6133413)*w(1), (1, 2) = -(1792000000000/116534847)*w(1), (2, 1) = (455200000000/6133413)*w(2), (2, 2) = -(1792000000000/116534847)*w(2)})


precision := double: writeto(`Aexport.for`):
for i from 1 to 2 do:for j from 1 to 2 do:
if  A[i,j]<>0  then codegen[fortran]([A00[i,j]=A[i,j]],optimized):
fi:od:od:writeto(terminal):

代码 2)

B := Matrix(2, 2, {(1, 1) = 6436781.609, (1, 2) = 0, (2, 1) = 0, (2, 2) = 3862068.966})

  writeto(Bexport);
    for i to 2 do 
    for j to 2 do 
     printf("%016.15E\n", B[i, j]) 
      end do:
        end do:
         writeto(terminal)
4

2 回答 2

1

这只是(B)部分的翻译:

matrix = {{6436781.609, 0}, {0, 3862068.966}}

Export["Bexport", Map[FortranForm, N@Flatten[matrix]], "Table"]

请测试它并让我知道它是否适合您。

与 Maple 版本相比的差异:E以小写形式编写,并且输出的位数不固定(但是,如您所见,所有有效数字都被保留)。这些差异会导致您的应用程序出现问题吗?

于 2011-12-02T10:19:32.037 回答
1

我相信这可以满足您对矩阵 B 的要求:

b = {{6436781.609, 0}, {0, 3862068.966}}

bformatted = 
  NumberForm[
    Flatten@b,
    {16, 15}, 
    NumberFormat -> (Row[{#, "E+", StringTake["00" <> #3, -2]}] &)
  ];

bstring = 
  StringReplace[
    ToString@bformatted,
    {"{"|"}"|" " -> "", "," -> "\n"}
  ];

WriteString["Bexport.dat", bstring, "\n"]

Close["Bexport.dat"]
于 2011-12-02T19:29:37.153 回答