【问题标题】:Evaluate double integral using trapezoidal rule (Matlab)使用梯形规则评估双积分(Matlab)
【发布时间】:2015-06-21 14:30:03
【问题描述】:

我有一个使用梯形规则评估双积分的任务。第一部分是使用带极限的梯形规则评估双积分 0

我有一个工作脚本:

N = 100;
xh= 1.25;
x = linspace(0,2,N);
y = linspace(0,1,0.5*N);
dx = diff(x(1:2));
dy = diff(y(1:2));
[x,y] = meshgrid(x,y);
funk = exp(-10.*((x-xh).^2+y.^2)).*cos(y.*(x-xh));
funk(2:end-1,:) = funk(2:end-1,:)*2;
funk(:,2:end-1) = funk(:,2:end-1)*2;
out = sum(funk(:))*dx*dy/4;

disp(out)

现在第二部分的限制是 0

如何让 y(代码中的第 4 行)从 x 矩阵中获取相应的 x 值来创建 y 矩阵?如果我让它工作,我不应该改变代码中的任何其他内容,或者我错过了什么?

【问题讨论】:

    标签: matlab integration


    【解决方案1】:

    有趣的问题。想象一个网格,其中x 坐标跨越0 <= x <= 2y 坐标跨越0 <= y <= pi。这是因为当x = 2,然后y = pi*2/2 = pi

    现在想象从原点到(x,y) = (2,pi) 绘制一条斜率为pi/2 的直线。您要关注的(x,y) 的值是网格的右下角

    为此,只需创建一个meshgrid,其中x 跨越[0,2]y 跨越[0,pi],然后选择网格的右下角。假设一个 100 x 100 点的网格:

    %// Generate grid of points
    N = 100;
    xx = linspace(0,2,N);
    yy = linspace(0,pi,N);
    [x,y] = meshgrid(xx,yy);
    
    %// Obtain valid region
    ind = y <= (pi/2)*x;
    
    %// Show valid region in black and white
    imagesc(ind);
    axis xy;
    colormap gray;
    set(gca,'XTick',10:10:100);
    set(gca,'YTick',10:10:100);
    set(gca,'XTickLabel',xx(10:10:end));
    set(gca,'YTickLabel',yy(10:10:end));
    

    这是我们得到的数字:

    白色区域是我们要寻找的区域。 ind 包含一个logical 矩阵,它允许我们选择我们需要选择的meshgrid 中的哪些值。因此,您的代码现在就是这样:

    %// Generate grid of points
    N = 100;
    xh = 1.25;
    xx = linspace(0,2,N);
    yy = linspace(0,pi,N);
    [x,y] = meshgrid(xx,yy);
    
    %// Obtain valid region
    ind = y <= (pi/2)*x;
    
    %// Perform calculations with normal grid
    dx = diff(xx(1:2));
    dy = diff(yy(1:2));
    funk = exp(-10.*((x-xh).^2+y.^2)).*cos(y.*(x-xh));
    funk(2:end-1,:) = funk(2:end-1,:)*2;
    funk(:,2:end-1) = funk(:,2:end-1)*2;
    
    %// Select out valid region coordinates
    funk = funk(ind);
    
    %// Now sum
    out = sum(funk(:))*dx*dy/4;
    

    对于out,我得到:

    >> out
    
    out =
    
             0.156821355105871
    

    【讨论】:

    • 首先,我现在有一些额外的信息。正确答案应该是 ≈ 0.156。使用您的代码,我得出= 0。据我所知,该区域应该是正弦曲线的一部分,请考虑“小山”。不过我明白你的逻辑。
    • @MarkJansson 已修复。我为diff 使用了错误的变量。我的答案是 0.1568。我已经编辑了我的答案。请检查一下。
    • @MarkJansson - 太好了 :) 如果您不介意,请考虑接受我的回答。这告诉 StackOverflow 社区您不再需要帮助。这可以通过单击我帖子顶部的复选标记图标来完成,位于向上和向下箭头按钮下方的左侧。祝你好运!
    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 2020-06-02
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多