我想在x轴上绘制特定值上下的区域。
我面临的问题是离散值。例如下面的代码有一个明确的X = 10,所以我写的方式是我可以找到索引并计算该特定值的上方和下方的值但是如果我想找到上下曲线下的区域4这个程序现在可以使用了。
虽然在绘图中matlab会进行样条拟合(或某种拟合用于连接离散值),但y对应于x = 4的值,matlab计算似乎无法存储或访问它。
%Example for Area under the curve and partial area under the curve using Trapezoidal rule of integration
clc;
close all;
clear all;
x=[0,5,10,15,20];% domain
y=[0,25,50,25,0];% Values
LP=log2(y);
plot(x,y);
full = trapz(x,y);% plot of the total area
I=find(x==10);% in our case will be the distance value up to which we want
half = trapz(x(1:I),y(1:I));%Plot of the partial area
我们怎样才能找到曲线下面积为x = 2或3或4或6或7或......的数据
答案 0 :(得分:1)
这是对patrik评论的详细阐述,“先插入然后整合”。
出于这个答案的目的,我将假设所讨论的区域是可以在图中看到的区域,并且由于plot
通过直线连接点,我认为线性插值是足够的。此外,由于梯形规则本身是基于线性插值,我们只需要在间隔的开始和结束处插值。
从给定点开始
x = [0, 5, 10, 15, 20];
y = [0, 25, 50, 25, 0];
和积分间隔限制,比如说
xa = 4;
xb = 20;
我们首先选择限制范围内的数据点
ind = (x > xa) & (x < xb);
xw = x(ind);
yw = y(ind);
然后通过边缘处的插值来完成它们:
ya = interp1(x, y, xa);
yb = interp1(x, y, xb);
xw = [xa, xw, xb];
yw = [ya, yw, yb];
现在我们可以简单地应用梯形积分:
area = trapz(xw, yw);
答案 1 :(得分:0)
我认为您需要更多样本,或者插入数据。另一种方法是使用函数句柄。然后你需要知道这个功能。下面是使用线性插值的示例。
x0 = [0;5;10;15;20];
y0 = [0,25,50,25,0];
x1 = 0:20;
y1 = interp1(x0,y0,x1,'linear');
xMax = 4;
partInt = trapz(x1(x1<=xMax),y1(x1<=xMax));
其他一些插值可能是合适的,但如果没有更多信息,这很难说。此外,这从开头到x进行插值。但是,我想从中确定如何更改限制应该很容易。该解决方案与前者不同,因为它取决于数据的金字塔形状较少。所以说,它更通用。