Newmark-beta Method for Nonlinear Single DOF Systems

Predict the nonlinear (or linear) response of a single degree-of-freedom damped mass-spring system subject to an external dynamic force.
Aktualisiert 1 Jun 2021

Lizenz anzeigen

Solve the ordinary differential equation of motion for a viscously damped mass-spring system that exhibits nonlinear, cyclic, force-displacement behavior when subject to an arbitrary external force. The derivatives are implicitly integrated through time by using the Newmark-beta method as presented in [1]. The complete numerical form of the governing equation is then expressed as a residual and a solution is found using a Newton-Raphson algorithm obtained from [2]. The material behavior of the spring may be either linear or nonlinear, as Newton's method should converge either way.
A nonlinear relationship between the restoring force and the displacement is defined by using a backbone curve. The data is input as a set of abscissa-ordinate pairs that must be strictly positive. The user-provided backbone is then reflected through both the horizontal and vertical axes such that the relationship becomes isotropic, i.e., the same whether the spring is being stretched or compressed. The first data point is assumed to be the initial elastic yield point. If the system begins to recover while yielding, the backbone is shifted from its original yield point up to the current displacement. This shifting creates a very basic form of strain hardening. However, it fails to capture the more realistic effect of cyclic strain hardening and degradation. The implementation of some method to improve the hysteretic behavior of the spring is the main focus of future developments.
The script is divided into three main parts: Input Parameters, Source Computations, and Postprocessing. The only thing a basic user need modify is the Input Parameters section. Optionally, they may also perform auxiliary calculations in the Postprocessing section. There are two demonstrations provided: `steelBar.m` and `chopraEx55.m`. The former is a model of a non-slender steel bar that deforms under uniaxial compression and tension and supports a, relatively, very large mass. Its backbone curve represents ASTM A992 steel at 20 degrees-Celsius and was generated in accordance with [3]. The latter demonstration reproduces Example 5.5 from [1] exactly, and serves as a verification of this code.
This project is intended to be for academic or research purposes, and so I encourage anyone to experiment with alternatives or new capabilities. And if you do, please share your ideas with me! I've explained almost every bit of code directly in the files, including instructions for some of the inputs. I also discuss important modelling assumptions and certain limitations, so be sure to read the commentary.
If you have questions or comments, please feel free to contact me. I am happy to assist with issues and take any and all feedback into consideration so that I may provide improvements. I am also open to academic discussions about the related subjects. Finally, I am always interested in employment opportunities ;)
[1] Chopra, AK. (2014). "Dynamics of Structures, Theory and Applications to Earthquake Engineering: Global Edition." Pearson Education. 4th ed.
[2] Burden, RL, Faires, DJ. (1993). "Numerical Analysis." PWS Publishing Company. 5th ed.
[3] Cai W, Morovat MA, Engelhardt MD. (2017). "True stress-strain curves for ASTM A992 steel for fracture simulation at elevated temperatures." Journal of Construction Steel Research. 139.

Zitieren als

Christopher Wong (2024). Newmark-beta Method for Nonlinear Single DOF Systems (, MATLAB Central File Exchange. Abgerufen .

Kompatibilität der MATLAB-Version
Erstellt mit R2020b
Kompatibel mit allen Versionen
Windows macOS Linux

Community Treasure Hunt

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

Start Hunting!
Version Veröffentlicht Versionshinweise

Minor syntax and code commentary edits


Implemented an option to use the so-called "Modified Newton-Raphson" method (constant stiffness) and wrote script that is similar to Chopra's Example 5.6.


more flexibility for regression testing


Slightly refactored testing script again


enhancements to regression testing script


Reverting a couple lines of code that are not compatible with some recent version of MATLAB


Major updates to all codes; implemented data format validation of function inputs; simplified input file syntax; developed Fourier transform function & applied it to automatic time-step selection; fixed round-off error bug in 'generate1DGridPoints()'


created a regression testing system


Added Example 5.4 from A.K. Chopra to demonstrate the linear elastic case. Also, edited some misleading commentary


I think something went wrong in the update... trying again.


V2 update: most of the calculations have been placed in a MATLAB function script. This way, the main files are more focused on inputs and the workspace gets populated with only nontrivial data.


New image.


Made edits to the public description.


Quick syntax formatting.


Version 2.0 introduces significant improvements to the overall solution procedure and code format. The algorithm used has deviated some from A.K. Chopra's and execution is now based on a broader and more well defined set of input parameters.


Just needed to edit the description. Did not change the code.