发布网友 发布时间:2024-10-05 14:06
共2个回答
热心网友 时间:2024-10-05 15:53
1、计算结果中的Ei是指数积分函数,其定义可参考expint函数的文档:
doc expint
2、MATLAB符号数学工具箱的Ei函数使用mfun计算。需要注意,Maple内核与MuPad内核的定义有差别,根据贴出的计算结果判断,你用的MATLAB应该是2008a或更早的版本,用的是Maple内核。
3、需要注意的是,Ei函数对积分下限有要求,一般应该是正数。对于负数,积分的结果是复数,而对于0,结果为inf。所以你所要求的绘图区域不合理。
4、上面介绍了相关的背景,有了这些背景知识,绘图可以有几种方法:
(1)使用meshgrid生成绘图的网格数据(这步是基础,每种方法都会用到),然后用subs代入求得的表达式,再用double函数将符号量转换为数值类型,然后绘图,例如:
syms r1 r2 u不过,这段代码的效率不高,计算耗时比较长。
另外,对于那个双重for循环,简单点可以写成
Y = subs(y,{r1 r2},{R1 R2})但这种写法在很多版本下计算存在问题,而且对于提高效率并没有帮助(只是代码简练了一些)。
(2)在使用符号计算得到y的基础上,调用mfun进行计算。这种方法需要运行程序得到部分结果之后再编代码,显得比较笨拙,不推荐。
(3)建议的做法是,直接使用expint函数计算:
N = 30;显然,这种做法的代码精炼很多,效率也是前面的方法完全不能相比的。
热心网友 时间:2024-10-05 15:48
我查了一下,你用syms做的运算结果里有这个Ei,但是Ei并不是matlab的函数,所以才有那么个错误提示。
我觉得你直接把ezsurf里的 y 用原始表达式表示就好了,别用什么syms算了。Matlab的符号运算感觉只是让你看看而已,后续用处不大