1.原始方法为写多层for循环,几次积分就有几层for,但是这样的话会导致运行代码的速度太慢,效率太低,以双重积分为例→
两层均为500个区间,则程序需要积分半天左右,且误差很大,改变上下限会对结果影响很大。
2.改变算法,利用矩阵运算:
- 以二重积分为例,积分变量为两个,可以用两个矩阵将两个变量可能的取值存起来。算法:
- 积分前提:外层积分x,linspace的区间数为m+1;里层积分y,linspace区间数为n+1
- 分支条件1:x、y的积分区间中,xmin or xmax or ymin or ymax在计算过程中会使被积函数产生异常值,如nan\inf。因此将linspace生成的向量,每两个相邻元素相加后/2,取中间值,则x的区间数变为m个,y的区间数变为n个。
- 参数矩阵:
- 设x经上述生成的积分范围行向量为x0,y为y0,则
- x0转置成列向量(m*1)后,用repmat生成每列都为x0,共n列的矩阵X
区间间隔:
- y0生成每行都为y0,共m行的矩阵Y。若y0的元素会因x的值而变化(即y的积分范围与x取值有关,会因x变化),则使用m次linspace生成m个对应的y0行向量,组成Y阵即可:
(1)y0与x无关:
区间间隔:
(2)y0与x有关: 对应的y行向量为
:
即第一行为x1对应的y积分范围,第二行为x2对应的y积分范围。
区间间隔: ,注意是会变化的
5.后续计算中都要使用支持矢量运算的函数。输出的被积函数的值第i行j列数值即为(xi,yj)对应的取值