en fr

nyctergatis.com

Sysquake Remote Live

Unforced Dynamic Response

This pages reproduces the script of Fig. 2.38 of Dorf and Bishop 98 (p. 81), with a few additional lines of code to let you change parameters.

y0:
wn:
zeta1: > 1 (overdamping)
zeta2: < 1 (underdamping)

Source code

Here is the code inserted in the file stored on the server. If you look at the source of this page in your browser, you will see only the HTML code produced by Sysquake Remote.

<?sqr
y0 = 0.15; wn = sqrt(2);
zeta1 = 2 / (2 * sqrt(2)); zeta2 = 1 / (2 * sqrt(2));
t = [0:0.1:10];

%%% a few lines added to permit the visitor to enter other parameters
use sqr;
format = ['y0: %{8}n\n',...
		  'wn: %{8}n\n',...
		  'zeta1: %{8}n &gt; 1 (overdamping)\n',...
          'zeta2: %{8}n &lt; 1 (underdamping)\n',...
		  '%{Revert}R%{Update}S'];
names = {'y0', 'wn', 'zeta1', 'zeta2'};
s0 = struct('y0',y0, 'wn',wn, 'zeta1',zeta1, 'zeta2',zeta2);
s = processhtmlform(format, names, s0);
s.zeta1 = max(s.zeta1, 1.001);	% must be > 1
s.zeta2 = min(s.zeta2, 0.999);	% must be < 1
displayhtmlform(format, names, s, 'GET');
y0 = s.y0; wn = s.wn; zeta1 = s.zeta1; zeta2 = s.zeta2;
zeta2 = min(zeta2, 1);	% must not be larger than 1
%%%

t1 = acos(zeta1) * ones(1, length(t));
t2 = acos(zeta2) * ones(1, length(t));
c1 = (y0 / sqrt(1-zeta1^2)); c2 = (y0 / sqrt(1-zeta2^2));
y1 = c1 * exp(-zeta1 * wn * t) .* sin(wn * sqrt(1-zeta1^2) * t + t1);
y2 = c2 * exp(-zeta2 * wn * t) .* sin(wn * sqrt(1-zeta2^2) * t + t2);

bu = c2 * exp(-zeta2 * wn * t); bl = -bu;

beginfigure('size', [400, 300]);
plot(t, y1, 'K'); plot(t, y2, 'B');
plot(t, bu, ':'); plot(t, bl, ':');
label('t [s]', 'y(t)');
str = sprintf('overdamped zeta1=%.3g\nunderdamped zeta2=%.3g', ...
              zeta1, zeta2);
legend(str, 'KB');
endfigure;
?>

Reference

R.C. Dorf and R.H. Bishop, Modern Control Systems, 8th ed. Addison Wesley Longman, Menlo Park, CA, 1998.