我正在 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
这使我无法对集成结果进行进一步操作。
- 知道为什么这是返回值吗?
- 知道可能存在的漏洞吗?
最佳答案
两条曲线之间的面积等于“上曲线”和“下曲线”之差的积分,因此第二个被积函数的符号不正确。
然而,主要问题是您使用的是符号 表达式。这意味着 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/