求教方程的解输出到文件后,输出形式的问题
mathematica吧
全部回复
仅看楼主
level 2
平峰13 楼主
求教大神,
用Solve解出方程的后,在notebook端输出类似如下,
{{x -> ConditionalExpression[1 - y, 3/2 < b < 3 && b/(-1 + b) < a < 3 && 1/b < y < (-1 + a)/a]}}
但是如果用Export输出上述结果到文件,文件内容就变成了:
{x -> ConditionalExpression[1 - y, Inequality[3/2, Less, b, Less, 3] && Inequality[b/(-1 + b), Less, a, Less, 3] && Inequality[b^(-1), Less, y, Less, (-1 + a)/a]]}
有什么办法能使文件内显示的内容跟notebook输出的形式一致吗?
2017年11月30日 04点11分 1
吧务
level 15
……试了半天,发现对于你这个特定问题,可以有个邪招。举例:
expr = Inequality[3/2, Less, b, Less, 3]
Export["a.txt", expr // ToBoxes // ToExpression] // SystemOpen
但这招对于混合了大(小)于和大(小)于等于的情况无效。具体的转换规则我也不清楚,如果确实需要弄清楚这个可以考虑去Stackexchange上问问。
不过啊,话说回来,你为啥需要实现这个?
如果是想把表达式导出去方便以后在Mathematica里用,那这个无所谓,因为两个形式Mathematica都认;再说了这种情况用DumpSave更方便。
如果是要用在别的程序语言里,那需要处理的显然就不止是不等号了。
如果是要插入Word之类的地方,那显然复制为LaTeX或者MathML(顺便,.docx的公式编辑器能直接识别MathML)更合理。
所以说你为啥想这么干?
2017年12月02日 07点12分 2
其实手动将, Less, 替换为 < 就能解决,但是目前我还没找到mathematica能够自动完成这个转换的方式
2017年12月02日 14点12分
@平峰13 实际上,如果你将输出手动复制(Ctrl+C,Ctrl+V)到TXT里,Mathematica是会自动将小于等于变为<=的。所以相应的变换规则确实是存在于Mathematica里的,但我找不到它在哪……
2017年12月02日 15点12分
@平峰13 其实,还有一个略带妥协的方案:Export["a.txt", 2 < b <= 3 // LogicalExpand]
2017年12月02日 15点12分
@xzcyr 我觉得应该是有这种操作,复制粘贴这种方式不适合数据量大的情况[泪]
2017年12月02日 15点12分
吧务
level 15
要不就大力出奇迹吧,示例:
Export["a.txt",
StringJoin[ToString /@ (2 < b <= 3 /. Inequality -> List /. Less :> "<" /.
LessEqual -> "<=")]] // SystemOpen
上面只是个例子,要覆盖全部情况你还得多来几条规则大概。
2017年12月02日 15点12分 3
厉害了,我试试
2017年12月02日 15点12分
吧务
level 11
很简答 输出为wl格式
比如Export["test.wl", Solve[x^2 + a x + 1 == 0, x]]
2017年12月03日 13点12分 4
它可以原封不动输出wolfram表达式的
2017年12月03日 13点12分
wl就是文本格式 直接可以打开 另外第一行有注释 可以用Get相反那个命令去掉 我一下忘了 想起来再补充
2017年12月03日 13点12分
@wshzh1966 不一定要改扩展名,你把第三个参数改成"Package"也是可以的,但是,这个方法和我2楼的解法面临一样的问题:你导出 2 < b <= 3 试试。
2018年01月06日 09点01分
吧务
level 11
比如这是你的问题的表达式
2017年12月03日 13点12分 5
谢谢小吧,但是我试了一下导出的wl文件如果用其他文本打开软件还是会变成Inequality[3/2, Less, b, Less, 3]这种形式,就是我使用的环境除了MMA还有其他软件
2017年12月08日 09点12分
@平峰13 不会呀 用notepad++没看到有
2017年12月09日 04点12分
@平峰13 你试试记事本
2017年12月09日 04点12分
level 9
{{x->ConditionalExpression[1-y,3/2<b<3&&b/(-1+b)<a<3&&1/b<y<(-1+a)/a]}}//InputForm//ToString
也许这样就行了?
2017年12月09日 03点12分 7
不行啦……
2018年01月06日 09点01分
1