【问题标题】:Using integral2 in Matlab with vectors在带有向量的 Matlab 中使用integral2
【发布时间】:2013-03-15 06:51:37
【问题描述】:

我正在尝试以数值方式评估双积分。具体积分太复杂了,不过这里不相关,我只想要大意。

假设我有:

x=1;
y=1;

fun = @(theta,phi)  (x.*sin(theta) + y.*cos(phi));
result = integral2(fun,0,pi,0,2*pi)

这给出了一个值。假设我想对 X 和 Y 的一系列值执行此操作。 理想情况下,我希望将 x,y 作为向量:

x=1:10;
y=1:10;

Matlab 给出(使用错误。* 矩阵尺寸必须一致。)

解决办法是什么? (理想情况下,我不想使用 for 循环)。

【问题讨论】:

  • 您确定要在不使用this formula 的情况下以这种方式集成到dtheta/dphi 上吗?只是好奇
  • 我认为我不需要那个。谢谢。

标签: matlab


【解决方案1】:

当您希望函数接受数组时,可以使用arrayfun 来“提升”您的函数

x = 1:10;
y = 1:10;
result = arrayfun(@(x, y) integral2(@(theta,phi) x.*sin(theta) + y.*cos(phi),0,pi,0,2*pi), x, y);

fun = @(theta, phi, x, y) x.*sin(theta) + y.*cos(phi);
result = arrayfun(@(x, y) integral2(@(theta,phi)fun(theta,phi,x,y), 0,pi,0,2*pi), x, y);

【讨论】:

  • 谢谢德米特里,做到了!顺便说一句,这是“标准”方式吗?或者这是一个“把戏”?
  • 这是制作单线的标准方法。这不是真正的矢量化,因此它可能会很慢(比较 x = ones(1, 1000000);tic;x = x * 2;tocy = ones(1, 1000000);tic;y = arrayfun(@(y) y*2, y);toc),但在像你这样的情况下(迭代次数少,迭代本身很重),当你不能正确地进行矢量化时,它会帮助没有任何问题跨度>
  • 我明白了。顺便说一句,如果我想使用像 z=sin(theta)*cos(phi) 这样的“别名”怎么办,其中 z 只是简化输入的快捷方式。我无法将其定义为变量,因为 theta 本身并未定义为适当的变量。有什么想法吗?
  • 您可以定义一个函数z=@(theta, phi) sin(theta)*cos(phi)并将其用作z(theta, phi)
  • 所以没有方法可以让我只写z?因为我已经写了几十遍了,希望它简短。
猜你喜欢
  • 2018-03-30
  • 1970-01-01
  • 2023-03-17
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多