用quad2d计算Matlab中的数值积分

时间:2015-02-16 12:45:23

标签: matlab

我在Matlab中使用quad2d时遇到问题。要计算的表达式是:

$\frac{8}{pi^2}\sum_{k=1}^{n}(\frac{sin(\frac{k*pi}{2}){k^2}e^-(k*pi)^2 sin(k*pi*x)$

我写了以下代码:

fun = @(x,y) (8/(pi^2))*((sin(y.*pi/2))/(y.^2))*exp(-(((y.*pi)^2)*0.1))*sin(y.*pi*x.*1)

ca=quad2d(fun,0,1,1,200)

我想用两个不同的变量计算上面表达式的数值积分。当我在Matlab中写这个时,我得到的错误信息是:

  

警告:Matrix的工作精度非常高。
  有很多错误消息。有没有人知道应该采取哪些不同的做法?

1 个答案:

答案 0 :(得分:2)

您遇到的问题是*.*的使用不一致且部分错误。您必须知道quad2d使用xy的矩阵或向量来进行整合。说清楚:

  • .*表示逐元素乘法。同样,./.^表示元素划分或权力。
  • 如果一个参数是标量(数字),则
  • *是标量的乘法,如果两个输入都是向量或矩阵,则为矩阵乘法。

在您的问题中,据我所知,您不需要任何矩阵乘法。因此,您必须替换所有*/^,其中元素包含两个矩阵(即xy)操作。您仍然可以使用*等将矩阵与标量相乘。我在这里完成了这个:

fun = @(x,y) (8/(pi^2))*((sin(y*pi/2))./(y.^2)).*exp(-(((y*pi).^2)*0.1)).*sin(pi*y.*x);

请注意y*pi/2,例如,不需要点,因为pi/2是标量,y是矢量矩阵。你可以在那里使用.*,两者都可以。

现在整合工作没有错误:

ca=quad2d(fun,0,1,1,200)

ca = 
   0.0318