找回密码
 注册
Simdroid-非首页
查看: 260|回复: 13

[符号计算] 求一大堆方程的实数解

[复制链接]
发表于 2009-12-24 18:07:33 | 显示全部楼层 |阅读模式 来自 北京海淀
悬赏500仿真币已解决
本帖最后由 waynebuaa 于 2009-12-25 13:35 编辑

现有一大堆的方程,用的是Maxima命令描述的,被保存在s14.len10.txt里面请编程实现:要求输入的是该文件,输出的是所有有实数解的方程,以及这些方程的实数解。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
说明:其实s14.len10.txt文件原是s14.len10.out文件,linux下的文本文件,我只是改了一下名字,linux下的换行符在windows下的记事本里是识别不了。不过Mathematica 可以识别,所以,你直接Import就可以了
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

最终目的是为了追求程序的通用性,即换成另一个文件,如s18.len18.out,程序依然能使用
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

扔个石头先:
发表于 2009-12-24 18:07:34 | 显示全部楼层 来自 黑龙江哈尔滨
Simdroid开发平台
本帖最后由 TBE_Legend 于 2009-12-25 03:51 编辑
对于其中每一个方程,解起来那是挺容易的事
但总共有97个方程等着你来解,所以,得考虑一下其他方式了
waynebuaa 发表于 2009-12-24 18:15


扔个石头先:


  1. Clear["Global`*"]
  2. txt = Import["d:\\s14.len10.txt", "String"];
  3. txt = StringReplace[txt,
  4.    x1_ ~~ "_" ~~ x2_ -> ToLowerCase[x1] ~~ ToLowerCase[x2]];
  5. txt = StringSplit[txt, ";"];
  6. txt = StringCases[txt,
  7.    "solve([" ~~ x1__ ~~ "],[" ~~ x2__ ~~ "])" ->
  8.     "NSolve[{" ~~ x1 ~~ "},{" ~~ x2 ~~ "}]"];
  9. txt = Cases[txt, {x_String} -> x];

  10. txt2eqs2sols[txt_?StringQ] := Module[{str1, str2, str11},
  11.   {str1, str2} = {StringSplit[txt, "},{"][[1]] ~~ ",",
  12.     StringSplit[txt, "},{"][[2]]};
  13.   str11 = StringReplace[str1, x_ ~~ "," -> x ~~ "==0,"];
  14.   Cases[ToExpression[StringDrop[str11, -1] ~~ "},{" ~~ str2], _Real, 3]
  15.   ]
  16. txt2eqs2sols /@ txt
复制代码
回复

使用道具 举报

 楼主| 发表于 2009-12-24 18:15:56 | 显示全部楼层 来自 北京海淀
对于其中每一个方程,解起来那是挺容易的事
但总共有97个方程等着你来解,所以,得考虑一下其他方式了
回复

使用道具 举报

 楼主| 发表于 2009-12-25 11:23:02 | 显示全部楼层 来自 北京海淀
谢谢 TBE_Legend
问题的重点是给出一个通用的方程求解命令,怪我没把问题准备好,给你带来麻烦了。源文件其实是s14.len10.out,最开始在Linux下产生的。你再把名字s14.len10.txt改回来,直接用Import["s14.len10.out"],就可以了。
回复

使用道具 举报

发表于 2009-12-25 13:17:24 | 显示全部楼层 来自 北京
对效率有要求吗?
回复

使用道具 举报

发表于 2009-12-25 13:28:39 | 显示全部楼层 来自 北京
在WORD下先将文件格式转换成符合Mathematica 格式的形式然后再保存成txt文件然后导入效果会好些,TBE_Legend 写的内容就像写WORD中的宏一样,但是在WORD中宏可以录制的,更加方便.
回复

使用道具 举报

发表于 2009-12-25 13:34:36 | 显示全部楼层 来自 黑龙江哈尔滨
谢谢 TBE_Legend
问题的重点是给出一个通用的方程求解命令,怪我没把问题准备好,给你带来麻烦了。源文件其实是s14.len10.out,最开始在Linux下产生的。你再把名字s14.len10.txt改回来,直接用Import["s14.len10.ou ...
waynebuaa 发表于 2009-12-25 11:23


1)我的那程序就一原始人程序,很丑地说,以前没整过字符串,所以就拿来连连手。
应该会有高手们来参与的,呵呵

2)你说的通用求解方法是什么意思呢? 方程到什么时候不都得一个一个地求解吗?

我感觉最简单的办法是直接找数字,然后把数字组成矩阵(A*x=b中的A和b)(这个help文档中就有现成的例子),然后用LinearSolve求解,顶多再加个并行求解。还能怎么更通用?

3)对了,wayne兄,你对ode感兴趣吗? 有没有兴趣一起研究下 AdvancedNumericalDifferentialEquationSolvingInMathematica.pdf 这本书,里面的好多例子能真的体现mmtc编程的极高水平,对理解mmtc的编程之道,个人感觉这要比做欧拉题等好得多。
回复

使用道具 举报

 楼主| 发表于 2009-12-25 13:48:22 | 显示全部楼层 来自 北京海淀
ode狠感兴趣
欧拉编程我很久没做了

好吧,我贴上我的代码,看大伙能不能帮我改进改进

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2009-12-25 13:49:43 | 显示全部楼层 来自 北京海淀
网速好慢阿
发一个帖子我都等死了
回复

使用道具 举报

 楼主| 发表于 2009-12-25 14:03:05 | 显示全部楼层 来自 北京海淀
TBE_Legend,:victory:,
AdvancedNumericalDifferentialEquationSolvingInMathematica.pdf这本书我没有,能否发给我一份
回复

使用道具 举报

发表于 2009-12-25 14:32:35 | 显示全部楼层 来自 黑龙江哈尔滨
TBE_Legend,:victory:,
AdvancedNumericalDifferentialEquationSolvingInMathematica.pdf这本书我没有,能否发给我一份
waynebuaa 发表于 2009-12-25 14:03


嗯,你的程序的质量比我高得多。

wayne:

这本书的notebook为:virtual book -> Mathematics and Algorithms -> Advanced Topics ->Advanced Numerical Differential Equation Solving in Mathematica.

pdf在这里下载:http://www.wolfram.com/learningcenter/tutorialcollection/

欢迎在simwe交流关于这本书的问题。呵呵~

祝好~!
回复

使用道具 举报

 楼主| 发表于 2009-12-25 15:22:06 | 显示全部楼层 来自 北京海淀
最近正在解决一道很棘手的问题,我会常来的
回复

使用道具 举报

发表于 2009-12-25 16:04:39 | 显示全部楼层 来自 华南理工大学
本帖最后由 weichanghe2000 于 2009-12-26 18:43 编辑

Advanced Numerical Differential Equation Solving in Mathematica 我也需要,谢谢啊。
回复

使用道具 举报

发表于 2010-1-5 12:42:21 | 显示全部楼层 来自 广东江门
way,

Try to seperate your problem.
Asking small and clear question, you will have the answer.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-19 21:00 , Processed in 0.048341 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表