为什么MATLAB返回一个解决方案“NaN”和把警告消息“矩阵是奇异的工作精度。”当使用ODE15s吗?

4视图(30天)
我想把一个微分方程的边界条件随时间。例如,下面的叫“ode15s”输出向量“y”充满了“NaN”:
> > odefun = @ (T, Y) Ydot_TNES1 (T Y NSTEP TEMPK0、CR、MESHSP, DISLOC, DISPV, DISPI);
> > [T、Y] = ode15s (odefun tspan, Y0,选项);
这种行为的原因是什么?

接受的答案

MathWorks支金宝app持团队
在这种情况下,您有一个MATLAB文件中定义的条件“Ydot_TNES1”随时间改变。它是由下面的表达式。请注意,“EFV”和“EFI”是常数,而“博尔茨”是玻尔兹曼常数:
> > CVDOT (1, - 1) = (EFV /博尔茨* exp (EFV /(博尔茨* T))) / T ^ 2;
> > CIDOT (1, - 1) = (EFI /博尔茨* exp (EFI /(博尔茨* T))) / T ^ 2;
执行的代码后,请注意,MATLAB抛出警告“矩阵是奇异的精密工作。”This indicates that the problem is either poorly scaled, or singular.
可以通过指出解决问题的变量“T”在上面的方程中由ode15s解释为“时间”。这可以通过检查函数声明语法验证,因为所有的ODE套件函数期望函数处理表单的“@ (t, y) f (t, y)”。“T = 0时,上面的方程都是单数,因此集成在时不会产生有限的解决方案。
这个问题得到解决,这个边界条件是错误的,并且是由于混淆变量的问题。“T”应该是对应的温度。在“T”更改为“临时工”,代码运行而不抛出任何错误消息,和最终的解决方案是按比例缩小的。
注意,调试与热力学相关的问题时,重要的是要记住,“温度”和“时间”很容易混淆。很快地发现这个问题的一个方法是去寻找方程的表达式以下地方:
> > exp (e / T)(博尔茨*);
这个方程对应于著名的“玻耳兹曼分布”,和“T”应该解释为温度。

更多的答案(0)

类别

找到更多的在热力学和热传递帮助中心文件交换

下载188bet金宝搏


释放

R2016b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!