PDA

查看完整版本 : [讨论] 感觉在最优化求解联合微分方程组求解的问题上mathcad还是很弱


cgfan
2010-08-20, 15:00
提出这个问题也有可能是我的mathcad使用不精所致. 不过感觉自己也是从2.5起DOS时代就 开始用mathcad, matlab和maple了,所以感觉我的疑问也应该是其他人的问题.

虽然mathcad是我最喜欢的数学软件(能用它解决的问题,我就不用别的), 但是也确实感到了一些不变. 举个具体例子来说

我有三个化学反应, 反应方程及其反应速率常数如下
A+B=C (k1)
A+B=D (k2)
B=B2 (k3)
方便说明问题起见, B, C, D都是气体,

[问题]通过大量实验测量其浓度后根据实验结果求出三个反应的速率常数k1,k2,k3

现在我根据一些实验曲线认为有以下关系(常微分方程组)成立

dC/dt=k1*B
dD/dt=k2*sqrt(B)
dB/dt=-(k3*B+k1*B+k2*sqrt(B))

前面已经提到B,C,D的浓度随时间的变化关系都已经通过实验得到浓度曲线,
则现在的问题转化为

用由以上微分方程组所确定的三个函数关系(当然是含有待定参数k1,k2,k3的函数了)去拟合实验数据从而得到速率常数


这样的话就遇到以下四个问题

1.三个函数是否可求出表达式或数值解(对本例而言,用maple或mathematica可三步求出所有解析解,但这不在本次讨论范围之内)

2.k1k2和k3要同时满足三种最小二乘关系(这其实是一个最优化+拟合问题了)

3.如何协同微分方程组求解与最优化以及拟合三个过程, 因为这三个过程是要同时进行才能得出有效结果的

4. 参数的初值敏感性问题 (无论是优化,拟合还是求方程都要给k赋初值)

以前遇到此类问题都是用fortran之类的工具解决(因为要用mathcad的脚本语言来解决的话感觉不是一般的麻烦),后来发现在matlab中用非线性优化函数lsqnonlin()或其他类似函数联合各种微分方程组求解函数可以非常轻松地一次性解决上述所有问题,而且编程过程十分简单, 20分钟以内绝对可以搞掂.

从那时候就开始希望mathcad能够在这方面(多种较高级的功能协同作业)有较大改进, 因为具体问题很多都涉及同时运用多种数学知识的(比如这里就要用到优化+拟合+微分方程同时进行) ,不过等了这么多版本都没有等到. 倒是现在变成了6.0后连苹果系统都不支持了,sigh....

btw 我直到现在都觉得6.0 plus(win/mac)是我用过的感觉最爽的mathcad版本,自我感觉6.0版现在还是最优秀的.是mathcad发展史上一个质的飞跃

zpz11111
2010-08-21, 05:21
你是说“我直到现在都觉得6.0 plus(win/mac)是我用过的感觉最爽的mathcad版本,自我感觉6.0版现在还是最优秀的.是mathcad发展史上一个质的飞跃 ”?

cgfan
2010-08-21, 09:38
我的意思是觉得mathcad发展历程上到6.0版是一个质变的飞跃, 后续版本虽然也有发展但是感觉不像6.0那样给人震撼. 并非说6就是功能最强的.

比如后来那个math connex功能本来不错,但也夭折了.

而且四大数学软件matlab, mathcad, maple 和 mathematica中本来mathcad的mac版做得挺好的, 那时其他的数学软件很多都没有mac版本. 但是6.0以后从7开始, mathcad成了四个软件中唯一不提供多平台支持的软件了. 感觉这很不明智

另外我感觉mathcad另外一个主要问题是,版本的向后兼容性不好, 不如其他软件

听朋友说, 归ptc后,售后服务好像不如从前了, 一个针对已知bug的sp补丁竟然还要另外交$1200, 简直是开发商鼓励使用盗版, 补丁都要钱

不过向斑竹大人推荐一个和mathcad各种操作很相似的免费软件--Smath studio, 这小东西现在还可以在手机, ppc上运行, 而且可以跨平台(关键是很多快捷键和mathcad一样,呵呵), 界面见附件.

这个东西还有个网页版,不过功能少些,地址如下http://smath.info/live