分段智能示例:

f[x_]:=Piecewise[{{x^2, 0<x<1-epsilon},{x,1<x<2-epsilon},{2,x>2}}]


有没有办法在间隔epsilon中连接这些零件,所以我得到了平滑的功能?
编辑:顺便说一句,我并不是说它需要在连接点上可导出,只是在某些数字工作中它看起来像一个“自然”的连接。
编辑2:
两个黑色圆圈表示问题所在的位置。我希望它看起来像一个可导函数(尽管它不需要严格的数学意义,但是我不希望这两个尖峰)。红色圆圈代表看起来不错的部分。

我可以做的是通过非线性拟合[x-epsilon,x + epsilon]来做到这一点,但我希望分段函数有更简单的方法。

最佳答案

首先,给定一个函数,我们应该在整个范围{x,0,2}上精确地定义它,即。其值在范围1-epsilon <= x < 12 - epsilon <= x < 2上。


最简单的方法是在两个范围内都定义f1[x]分段线性,但是结果函数在胶合点上是不可微的,并且会涉及尖峰。

为了避免这种情况,我们应该在这种情况下至少选择(在这种情况下)三阶多项式:

P[x_] := a x^3 + b x^2 + c x + d


并使用f[x]将它们粘合在一起,并假定它们具有“粘合条件”(给定点的功能以及它们的一阶导数的相等性),即。求解结果方程:

W[x_, eps_]:= P[x]//. Flatten@Solve[{#^2 == P[#],
                                     1   == P[1],
                                     2#  == 3a#^2 +2b# +c,
                                     1   == 3a +2b +c},   {a, b, c, d}]&@(1-eps)

Z[x_, eps_]:= P[x]//. Flatten@Solve[{#  == P[#],
                                     2  == P[2],
                                     1  == 3a#^2 +2b# +c,
                                     0  == 12a +4b +c},  {a, b, c, d}]&@(2-eps)


为了可视化结果,我们可以利用Manipulate

f1[x_, eps_]:=  Piecewise[{{x^2, 0 <  x < 1 -eps}, {W[x, eps], 1 -eps <= x < 1},
                           { x , 1 <= x < 2 -eps}, {Z[x, eps], 2 -eps <= x < 2},
                                                   {    2    ,           x >=2}}];
Manipulate[ Plot[f1[x, eps],  {x, 0, 2.3},
                 PlotRange ->    {0, 2.3}, ImageSize->{650,650}]
                                                        //Quiet, {eps, 0, 1}]


根据epsilon > 0,我们得到微分函数f1,而对于epsilon = 0f1在两点上是微分的。

Plot[f1[x, eps]/. eps -> .4, {x, 0, 2.3}, PlotRange -> {0, 2.3},
                             ImageSize -> {500, 500}, PlotStyle -> {Blue, Thick}]




如果我们希望f1是一个平滑函数(无穷微分),则应该尝试使用先验函数定义范围f1中的[1 - epsilon <= x < 1),例如Exp[1/(x-1)]等。

关于wolfram-mathematica - 分段零件之间的平滑连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8545981/

10-13 04:43