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发展史上一个质的飞跃
虽然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发展史上一个质的飞跃