象征性的分段函数的不定积分给出错误的结果

23 Ansichten(30天)的
马库斯Wirsing
马库斯Wirsing 我2018年8月28日
我遇到了这个有些奇怪的行为,似乎,我得到一个错误的结果。
考虑到分段函数定义为:
x =符号(“x”);
f =分段(abs (x) < 0.5, 1,0);
这是一个简单的矩形脉冲。
试图计算不定积分,
F = int (F);
和策划了这个结果:
这显然不是一个正确的给定函数的不定积分。
我也试图用一个变量计算定积分的极限,取得了不同的结果:
F = int (F,负无穷,x)
似乎工作,给预期的结果:
然而在以0为下限又给了一个错误的结果:
F = int (F, 0, x);
这是Matlab的缺陷,还是一个错误在我身边吗?
2 Kommentare
马库斯Wirsing
马库斯Wirsing 我2018年8月29日
我不同意,假设。我只是测试用的x绑定与另一个象征性variabel不配合集成变量。结果还是一样的。

Melden您西奇,嗯祖茂堂kommentieren。

Antworten (3)

格雷格
格雷格 我2018年8月29日
Bearbeitet:格雷格 我2018年8月29日
我不同意第二个附加图像“显然不是一个正确的给定函数的不定积分。”If you take its derivative (simply look at the slope of the line), you get 0 outside x = +/- 1/2, and 1 inside. That smells like a proper answer to me.
至于你的“定积分,“我不知道发生了什么。但是,如果你手动整合几个离散值,它给一个适当的曲线下的面积(从我可以告诉)。
area_curve = [];%我从不推荐这样不断循环…
ival = 2: .05:2
area_curve (+ 1, - 1) = int (f, x, [0, ival]);
结束
图;
情节(area_curve);
5 Kommentare
格雷格
格雷格 我2018年8月29日
有一个更好的答案,是的。你的答案错了吗?也许不是。

Melden您西奇,嗯祖茂堂kommentieren。


沃尔特·罗伯森
沃尔特·罗伯森 我2018年8月29日
信谊x一个b
f =分段(abs (x) < 0.5, 1,0);
F = int (F, a, b);
FF =潜艇(F, 0);
fplot (FF, 2 [0])
3 Kommentare
马库斯Wirsing
马库斯Wirsing 我2018年8月29日
复查文档后,我注意到的文档“int”说:
“如果一个或两个集成范围a和b不是数字,int假定一个< = b,除非你显式地指定否则。”
所以情节我得到int (f, 0, x)实际上是符合文档说什么。但是,我仍然不明白为什么不定积分没有给定的限制给了错误的答案。

Melden您西奇,嗯祖茂堂kommentieren。


约翰D 'Errico
约翰D 'Errico 3丢。2018
Bearbeitet:约翰D 'Errico 3丢。2018
就我个人而言,我建议试图定义一个分段函数使用abs是一件危险的事,这只会给你带来麻烦。我建议一个更直接的方法,将更可读的,所以更安全。因此……
信谊x
f =分段(x < -0.5, 0, x > = -0.5 & x < 0.5, 1, x > = 5, 0)
f =
分段(x < 1/2, 0, x在Dom:间隔((1/2),1/2),1 1/2 < = x, 0)
如你所见,MATLAB转化为一个简单的表达式,它认识到明确的领域每一段生活。
MATLAB与定积分没有麻烦,没有争议的问题。
int (f (2。4))
ans =
1/10
但是当你使用int,无限期形式?
g = int (f)
g =
分段(x < 1/2, 0, x在Dom:间隔((1/2),1/2),x, 1/2 < = x, 0)
每一段的积分是正确的,就其本身而言,除了MATLAB不引入一个积分常数。这是符合MATLAB是如何工作的。它从来没有写在我们被教导要抨击常数在calc开始。因此,每一项的积分是……
int (0) = C1
int (1) = x + C2
但由于这是一个分段函数,MATLAB集成分开每一块,当我们看到g,但再一次,我们没有看到那些该死的常数。现在,当我们试图把一一个明确的不定积分法?再一次,我们学会了在早期calc这样做简单,用积分的极限,并减去结果。
潜艇(g。4)潜艇(g, 2)
ans =
-2/5
那么为什么失败呢?因为MATLAB忘了那些积分常数实际上是很重要的。事实上,分段积分可以说应该是:
g =分段(x < 1/2, 0, x在Dom:间隔((1/2),1/2),x + 1/2, 1/2 < = x, 1)
常数的不同之处在于纯粹的集成,那么容易轻易忽略和遗忘。每个积分常数的间隔应调整根据前一段的常数,并对前一段函数的积分。
这是一个错误吗?也许。至少,这是一个重要的特性。;-)你说土豆,其他人说虫子骑块茎。
现在,让我们回到最初的评论,正确使用的分段是更好的事情。你应该看到,有两个片段在f的表达式是常数,在0。一个合适的积分的定义作为一个分段函数将有不同的积分常数在每一个时间间隔,以便积分是定义良好的。所以我们会适当g定义为:
g (x) = {C1 x < -0.5
x + C2 -。5 < = x < 0。5
C3 x > = 0.5}
(我使用一个易于阅读的形式写这里,尽管MATLAB语法无效。)这适用于未知常数C1, C2, C3。仔细选择常量使上述表达式一致和连续将收益率这适定的不定积分表达式
g (x) = {0 x < -0.5
x +。5 -。5 < = x < 0。5
1 x > = 0.5}
正如你所看到的,我们需要有不同的积分常数在两个不同的子区间,f (x)是零。
然而,当你试图让棘手,您创建了一个函数只有两个明确的间隔,根据abs (x)住在哪里。问题是,积分常数需要改变,取决于x实际上住在哪里。
所以,就像我说的,即使我们忽略这个问题,MATLAB的int命令似乎有问题分段函数,通过定义函数复杂,int将永远无法得到正确的答案。至少,你是自找麻烦。

Produkte


版本

R2018a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的