Simple implementation of a Bouc-Wen model with Mathematica.

I have been involved a lot with Bouc-Wen model of hysteresis in my PhD. In this example, I have created a simple single-degree-of-freedom implementation of the Bouc-Wen model in Mathematica. The excitation is sinusoidal. The differential equation is solved parametrically so that the user can experiment with the effect of each parameter. This was made possible after version 6 of Mathematica, with the addition of **Manipulate[ ]** function. This function creates a graphical interface, with buttons and sliders. Fiddling with these re-evaluates the contained expression on-the-fly, so that the result of the modification is visible immediately.

In the following video you can see, at first, the effect of moving the "yield point" (u_{y},F_{y}). It must be noted that the term "yield point" is erroneous, as this point does not belong to the response of the model. It is actually the yield point of the corresponding bilinear model i.e. the intersection point of the initial elastic with the post-elastic branches. Next, you can see me fiddling with the other parameters. When using a small value for the exponential parameter n, the transition between elastic and post-elastic branches becomes smooth. When using a large value of n, the model behaves almost like a bilinear model. When fiddling with a (the ratio of post-elastic to elastic stiffness), the slope of the post-elastic branch changes. When changing gamma (γ), the loops change from rounded to a slim "S" shape, etc.

A relevant publication is the following:

##### Note:

Mathematica 9 fails to integrate the differential equation with the message *NDSolve::smpf: Failure to project onto the discontinuity surface when computing Filippov continuation at time 0.* This is solved by adding the method *NDSolve[... , Method -> {"DiscontinuityProcessing" -> False}]*.

However, *DiscontinuityProcessing* is unknown in Mathematica 8 or earlier, so there is a need for two versions of the file. Alternatively, one can add *NDSolve[... , Method -> If[$VersionNumber > 8, {"DiscontinuityProcessing" -> False}, Automatic]* so that the source code remains the same for all versions. I have opted for the separate files, because Mathematica 9 may not be available to you.

[ Bouc-Wen model (Mathematica 7 or 8)] [ Bouc-Wen model (Mathematica 9)]