【问题标题】:Numerically integrate the function数值积分函数
【发布时间】:2021-12-13 23:36:02
【问题描述】:

我在matlab中有以下代码:

gamma=1.01;
[t,phi] = ode45(@(t,x)(gamma-F(x,pi/6, 0.5)), [0,100], 0);
plot(t,phi)
hold off; 
title('\gamma = 1.01')
function out = F(p, a, b)
phi = mod(p,2*pi);
out = (0      <= phi & phi < a     ).*(phi/a) ...
    + (a      <= phi & phi < pi/2  ).*((phi*(b-1)/((pi/2)-a))-(a*(b-1))/((pi/2)-a)+1)...
    + (pi/2   <= phi & phi < pi-a  ).*((phi*(1-b)/((pi/2)-a))-((pi-a)*(1-b))/((pi/2)-a)+1)...
    + (pi-a   <= phi & phi < pi+a  ).*(-phi/a + pi/a)...
    + (pi+a   <= phi & phi < 3*(pi/2)).*((phi*(1-b)/((pi/2)-a))-(((pi+a)*(1-b))/((pi/2)-a))-1)...
    + (3*pi/2 <= phi & phi < 2*pi-a).*((phi*(b-1)/((pi/2)-a))-(((2*pi-a)*(b-1))/((pi/2)-a))-1)...
    + (2*pi-a <= phi & phi < 2*pi  ).*(phi/a-2*pi/a);
end

我有一个问题。能否请您说一下如何在 MATLAB 中对这个函数进行数值积分(我想是这样称呼的)?

所以从这个 得到这个

【问题讨论】:

    标签: function matlab integration


    【解决方案1】:

    对于数值积分,您可能应该使用简单的trapzhttps://www.mathworks.com/help/matlab/ref/trapz.html。你也可以使用integralhttps://www.mathworks.com/help/matlab/ref/integral.html

    因此,对于您的代码,您需要简单

    area=trapz(t,phi);
    

    这是函数的整体积分 - 曲线下方的总面积。如果你想展示积分是如何随着t 增长的,你需要使用cumtrapz 进行累积积分的函数:

    area = cumtrapz(t,phi);
    plot(t, area)
    % This is essentially equivalent to doing `trapz` in a loop with less hassle (for... area(i)=trapz(t(1:i),phi(1:i));...)
    

    但是,您的红线不显示积分(积分将是红线或蓝线下方的区域)。似乎您想在几个点上近似函数,并将这些点连接起来?为此,您可以尝试搜索具有二阶导数的局部最大值/最小值的点,这些点应该对应于所需的点。

    要获得导数,请使用diffhttps://www.mathworks.com/help/matlab/ref/diff.html

    所以

    der1 = diff(phi);
    der2 = diff(der1);
    isLocalMax = (der2(2:end-1) > der2(1:end-2)) & (der2(2:end-1) > der2(3:end));
    isLocalMin % equivalent...
    plot(t(isLocalMax|isLocalMin), phi(isLocalMax|isLocalMin))
    

    【讨论】:

    • @ZiziArcher 非常感谢!我想用trapz 询问你的情况。我将它添加到代码中,但情节是一样的。我应该改变其他东西吗?
    • @Jane Integral 由trapz 给出是整个区域(= 单个数字),如果您想查看区域如何随时间增长(@ 987654335@).
    • @ZiziArcher 你太有帮助了!非常感谢!
    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 2016-11-05
    • 2013-10-20
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多