如何计算两条曲线之间的面积

时间:2017-09-03 14:07:47

标签: matlab math area

基于以下代码:

clear vars;
close all;

x1 = [0 0 0.01 0.09 0.1 0.11 0.2 0.3 0.35 0.50 0.64 0.8 1]
y1 = [0.05 0.10 0.15 0.20 0.25 0.30 0.38 0.42 0.45 0.48 0.52 0.86 1]

x2 = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.9 0.9 1]
y2 = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.9 0.9 1]

plot(x1, y1); hold on;
plot(x2, y2);

我需要计算两条曲线之间的面积(绿色区域),例如:

enter image description here

我该如何计算?

2 个答案:

答案 0 :(得分:4)

此区域是每个交叉点之间指定域中两条曲线积分的差异(如MBo所述)。因此,您可以使用InterX找到交叉点,然后使用import java.io.{ObjectInputStream, ByteArrayInputStream} import java.util import org.apache.kafka.common.serialization.{Deserializer, Serializer} class CustomDeserializer extends Deserializer[User]{ override def configure(configs: util.Map[String,_],isKey: Boolean):Unit = { } override def deserialize(topic:String,bytes: Array[Byte]) = { val byteIn = new ByteArrayInputStream(bytes) val objIn = new ObjectInputStream(byteIn) val obj = objIn.readObject().asInstanceOf[User] byteIn.close() objIn.close() obj } override def close():Unit = { } } import java.io.{ObjectOutputStream, ByteArrayOutputStream} import java.util import org.apache.kafka.common.serialization.Serializer class CustomSerializer extends Serializer[User]{ override def configure(configs: util.Map[String,_],isKey: Boolean):Unit = { } override def serialize(topic:String, data:User):Array[Byte] = { try { val byteOut = new ByteArrayOutputStream() val objOut = new ObjectOutputStream(byteOut) objOut.writeObject(data) objOut.close() byteOut.close() byteOut.toByteArray } catch { case ex:Exception => throw new Exception(ex.getMessage) } } override def close():Unit = { } } 执行此操作:

trapz

答案 1 :(得分:-3)

由于其中一条曲线是直线,您可以旋转,然后将新x轴的区域相加。

线条为45度。所以旋转矩阵是

 cos 45   sin 45 
 -sin 45  cos 45

将第二条曲线中的每个点乘以该矩阵。这给出了以新线作为新x轴的点。现在使用三角形的面积(0.5 *宽*高)来累加片段的区域。