matlab - 定积分Matlab

标签 matlab function math linear-algebra integrate

我正在 Matlab 中做一个项目,需要找到两条线之间的区域(在区间 [- 1,+1]。所以想法是将两条线相减并在 [-1, xIntersection] 和 [xIntersection, +1] 之间积分,将结果求和,如果为负,则改变其符号。

有关如何找到两条线的交点的详细信息,请查看 link .

我正在使用 Matlab 的 函数 int() ,这里是我的代码片段:

xIntersection = ((x_1 * y_2 - y_1 * x_2) * (x_3 - x_4) - (x_1 - x_2) * (x_3 * y_4 - y_3 * x_4) ) / ((x_1 - x_2) * (y_3 - y_4) - (y_1 - y_2) * (x_3 - x_4));

syms x;
integral = int( line 1 - line 2 expression containing x, x, -1, xIntersection) + int( line 1 - line 2 expression containing x, x, xIntersection, 1)
if(integral < 0),
    integral = integral * -1;
end

问题是 Matlab 不返回积分的实数值,而是返回包含除法的表达式,即:

107813370750829368626584124420059/162259276829213363391578010288128

这使我无法对集成结果进行进一步操作。

  1. 知道为什么这是返回值吗?
  2. 知道可能存在的漏洞吗?

最佳答案

两条曲线之间的面积等于“上曲线”和“下曲线”之差的积分,因此第二个被积函数的符号不正确。

然而,主要问题是您使用的是符号 表达式。这意味着 MATLAB 将尽最大努力为您提供一个准确 的答案,而不是一个近似的答案(数值)。

如果您想要数字结果,请使用数字方法:

result = ...
    quadgk( @(x) line1(x) - line2(x), -1, xIntersection) + ...
    quadgk( @(x) line2(x) - line1(x), xIntersection, 1 );

result = ...
    quadgk(@(x) abs(line1(x) - line2(x)), -1, +1);

简称:)

我相信 integral 是较新版本的 MATLAB (> R2010a) 中的首选函数,但我无法对此进行测试。

关于matlab - 定积分Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18734671/

相关文章:

image - 在保留标题和标签的同时删除子图中的死角

javascript - 为单独的 div 创建 onmouseover 函数

ios - 如何在函数外更改字典中的 Double 值?

javascript - 使用 Apps 脚本在 onclick 内调用函数

c++ - 当满足两个条件时,如何在 C++ 中停止 For 循环?

python - 用于在 python 中循环数组 - 来自 matlab

matlab - 线性规划约束 : multiplication of optimization variables

arrays - 将 MATLAB 元胞数组导出到 csv 文件

c++ - 如何检查分割的平面是否是真实平面

PHP数学计算真的很慢