GIBBS overshoot behavior difference

8 ビュー (過去 30 日間)
Jeff
Jeff 2017 年 12 月 27 日
編集済み: David Goodmanson 2017 年 12 月 30 日
There is plenty of literature indicating that the overshoot at a jump discontinuity from the GIBBS effect is 1.08949. However, this has primarily been demonstrated through the STEP input function. This is fine since the jump discontinuity occurs once and the amplitude of the function remains constant after the discontinuity has been encountered.
But what happens if the function amplitude changes after the discontinuity such as in the case of the triangle function? I have demonstrated that the rate at which the overshoot approaches the theoretical value of 1.08949 as a function of k terms in the series is different depending on the function behavior after the discontinuity. So I question the theoretical value of 1.08949 for all functions in general. I have yet to find a good explanation on this matter.
What I have attached is a plot for abs(Ppeak-1) vs k terms in the Fourier series approximation of: 1) rectangle function; 2) triangle function; 3) Friedlander function. The amplitude for the jump discontinuity is UNITY for all 3 cases & all 3 cases has the same period or function width.
The plots for the latter 2 show a dip opposed to the gradual asymptotic approach to 1.08949 value of the rectangle function. The reason for this is at the lower k values the peak value of the series approximation is less than UNITY. This is evident in the Output vs time plots. As the peak value approaches UNITY for higher k values the dip occurs due to abs(Ppeak-1). After the dip the overshoot approaches the 1.08949 value as k increases; however, it is done at different rates.
So this distinction in behavior leads me to question the 1.08949 value as being universal for all functions? Are there any good demonstrations for the GIBBS effect on different functions to show that this theoretical value is universally applicable?
I also included the m-files that generated the data for the plots in case one wants to examine the code.
  3 件のコメント
Jeff
Jeff 2017 年 12 月 28 日
OK, I got my plots in the PDF file & the 3 m-files that generates the data for the 3 cases.
Jeff
Jeff 2017 年 12 月 28 日
I have been given the suggestion that I need to ask a MATLAB question as opposed to a conceptual or theoretical question to get a response. So let me pose this question. I have already demonstrated numerically the behavior difference in the GIBBS overshoot for different input functions.
How can I demonstrate via MATLAB the GIBBS overshoot value of 1.08949 is applicable to any arbitrary input function as the k value approaches infinity?

サインインしてコメントする。

採用された回答

David Goodmanson
David Goodmanson 2017 年 12 月 30 日
編集済み: David Goodmanson 2017 年 12 月 30 日
Hi Jeff,
First of all, if you are fourier expanding a function y(x) in the interval [0,1] and its start value y(0) is not equal to its end value y(1), then the function has a discontinuity. That's because the fourier series is periodic, so the start and end points are effectively next to each other. With that out of the way, take a look at the function
y(x) = 1-x 0 <= x <= 1 (fig 1 trace 1)
It has f(0) = 1, f(1) = 0 and has an upward discontinuity of +1 at the origin. There is no discontinuity anywhere else. With its single discontinuity, y(x) is more basic than the square wave. Its fourier expansion is
y(x) = 1/2 + (1/pi)*Sum{1,N} sin(2*pi*n*x)/n
You can see the Si integral emerging on the right hand side of this. The max value of y(x) shows the familiar overshoot, 1/2 + (1/pi)*Si(pi) = 1.089 as you can confirm, having done very similar sums many times before. It may converge to that value more slowly than does a square wave, I don't know, but the Gibbs phenomenon is about the value, not the rate.
Keeping in mind that y(x) is periodic, suppose you translate y(x) to the right by distance x0 to create a new function y1(x). Then of course the discontinuity moves to x0. Also y1(0) = y1(1) and there is no other discontinuity. I'm not going to prove it but it's pretty intuitive that the overshoot is the same as before. Also, if you multiply y1(x) by a constant r (fig 1 trace 2), then discontinuity height and overshoot are both multiplied by the same factor, so overshoot relative to height does not change.
Suppose there is a "sensible" but otherwise arbitrary function f(x) in the interval [0,1], with a single discontinuity of height r, located at x = x0. Since there is no other discontinuity, necessarily f(0) = f(1). Now the idea is to remove the discontinuity in f(x) by using r*y1(x):
f(x) = [f(x) -r*y1(x)] + r*y1(x)
The part in square brackets has the discontinuity removed and its two end points have the same value. It has no overshoot. The remaining part does have the height r discontinuity and the 1.089 relative overshoot. That means so does f(x), for any reasonable f(x).
(Note that the part in square brackets does have values near the discontinuity, so it may affect the perceived rate of convergence to 1.089 in some manner).
x = 0:1e-3:1;
y = 1-x;
x0 = .25; r = .4;
n = round((1-x0)/1e-3);
y1 = r*[y(n+1:end) y(1:n)];
plot(x,y,x,y1)

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeProgramming についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by