【问题标题】:Need Mathematica short code like these same from Maple需要像 Maple 一样的 Mathematica 短代码
【发布时间】:2011-12-02 09:53:21
【问题描述】:

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

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

代码在这里

矩阵 A 和 B 以及 Maple 中的代码和导出文件

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)

【问题讨论】:

  • 不清楚问题是什么。你需要mathematica中的代码来做这个maple代码的工作吗?
  • 是的acl,我需要一个mathematica代码。
  • George,你为什么不用你的普通账户发这个?
  • 不知道,我的账号在这里打不通,发不了帖,不知道账号有什么问题?
  • @user1077093:我注意到您的帐户(在其中一个 stackexchange 网站上)由于您提出的大量低质量问题而被暂停了一段时间。 (基于your recent question 的不良格式,一些没有改进的地方)。但是您的帐户现在看起来不错 - 您应该尝试再次使用它。

标签: matrix wolfram-mathematica maple


【解决方案1】:

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

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

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

请测试一下,让我知道它是否适合你。

与 Maple 版本相比的不同之处:E 写为小写,输出的位数不固定(但是,如您所见,所有有效数字都被保留) .这些差异会导致您的应用出现问题吗?

【讨论】:

  • @Szabolics 用写字板打开文件时,它像行一样打印,Maple 像列一样打印,这对于矩阵B,但是如何也打印A?
  • @user1077093 我在我的系统上使用 Mathematica 8 获得了一个列。但是如果您有不同的版本,您可以尝试Export["Bexport", List/@Map[FortranForm, N@Flatten[matrix]], "Table"] 来强制执行一个列。我没有看到 (A) 的简单解决方案,因为 Mathematica 仅具有用于将表达式(不是 statements)转换为 Fortran 形式的内置函数。所以细节需要在 Mathematica 中手工实现,耗费大量时间。也许其他人会这样做。
  • @Szabolcs,这是可行的,只是不是一个自动过程。你能快速概述一下他的 Maple 代码在做什么吗?具体来说codegen 应该做什么?如果需要,将其发布在聊天室中。
  • @rcollyer 这里是函数maplesoft.com/support/help/Maple/view.aspx?path=codegen的详细信息
  • 我以表格形式应用它,它像行而不是列一样打印在写字板上,我不知道为什么 matrix = {{6436781.609, 0}, {0, 3862068.966}}; a = Map[FortranForm, N@Flatten[matrix]]; a >> "C:\\test1.txt"
【解决方案2】:

我相信这可以满足您对矩阵 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"]

【讨论】:

  • 谢谢巫师先生,我会努力的。但是,mathematica 将这个 Bexport.dat 保存在哪里?那么矩阵A呢?是否可以制作类似的或需要新的东西?
  • @George,它被保存到通过评估Directory[] 显示的路径。您可以使用SetDirectory 进行设置。您也可以使用完整路径名,但请注意,您需要像这样“转义”反斜杠:"C:\\Data\\Mathematica\\project1\\Bexport.dat"
  • 我没有回复矩阵 A,因为我不确定你在那里做什么。稍后我会再看一遍。
  • 向导您可以看到导出的矩阵 A 也准备好以列形式进行 fortran 计算。这里2shared.com/file/49wW8Z0-/EXAMPLE_EXPORT_MAPLE_FINAL.html
猜你喜欢
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
相关资源
最近更新 更多