Commit 26d52025 authored by Olle Kjellqvist's avatar Olle Kjellqvist
Browse files

initial commit

parent af5d4175
*aux
*log
*pdf
function saveMatrix2File(fileName,data,prec,columnNames)
%saveMatrix2File(fileName, data, prec, columnNames)
% Saves data to a delimiter separated file
% The data to be save must be ordered columnwise in a matrix
% There is an option for adding names for the columns in the output file
%
% fileName is the output filename
% data is the matrix to be saved
% prec controls the precision
% columnName contains the strings for column names, if omitted no column names will be given
%if ~exist('SAVING_ON'); return; end
fid = fopen(fileName,'w');
if nargin == 4
if strcmp(columnNames, 'timeseries')
columnNames = {'t'};
for k=1:1:size(data,2)-1
columnNames = {columnNames{:}, ['y' num2str(k)]};
end
end
for n = 1:length(columnNames)-1
fprintf(fid,strcat(char(columnNames(n)),';'));
end
fprintf(fid,strcat(char(columnNames(end)),'\n'));
fclose(fid);
end
% write the data to file
dlmwrite(fileName, data, 'delimiter',';','-append', 'precision',prec)
end
\ No newline at end of file
mag;phase;w
4.63;-2.86;0.01
4.63;-3.44;0.012
4.63;-4.02;0.014
4.62;-4.7;0.0164
4.62;-5.5;0.0192
4.62;-6.43;0.0224
4.62;-7.51;0.0262
4.61;-8.78;0.0307
4.6;-10.3;0.0359
4.6;-12;0.042
4.58;-14;0.0491
4.57;-16.4;0.0574
4.54;-19.1;0.0671
4.51;-22.4;0.0785
4.47;-26.1;0.0918
4.44;-28.4;0.1
4.42;-30.4;0.107
4.34;-35.4;0.125
4.24;-41.2;0.147
4.11;-47.9;0.172
3.95;-55.5;0.201
3.74;-64.1;0.235
3.48;-73.7;0.274
3.17;-84.4;0.321
2.82;-96.1;0.375
2.43;-109;0.439
2.03;-122;0.513
1.64;-135;0.6
1.27;-148;0.702
0.952;-161;0.82
0.69;-174;0.959
0.631;-177;1
0.486;-186;1.12
0.333;-196;1.31
0.224;-206;1.53
0.148;-215;1.79
0.0962;-222;2.1
0.0621;-229;2.45
0.0397;-235;2.87
0.0253;-240;3.36
0.016;-244;3.92
0.0101;-248;4.59
0.00636;-251;5.37
0.00399;-254;6.27
0.00251;-256;7.34
0.00157;-258;8.58
0.000995;-260;10
0.000985;-260;10
0.000617;-261;11.7
0.000386;-262;13.7
0.000242;-264;16
0.000151;-265;18.8
9.46e-05;-265;21.9
5.92e-05;-266;25.7
3.7e-05;-267;30
1e-06;-269;100
\documentclass{standalone}
\usepackage{tikz, pgfplots}
\usepackage[utf8]{inputenc}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
xmode=log,
ymode=log,
ylabel={Gain},
xmin=0.1, xmax=3,
ymin=0.01, ymax=10,
yminorticks=false,
scale only axis,
width=5cm,
height=2cm,
]
\addplot[thick, blue] table[x=w, y=mag, col sep=semicolon] {bode_1.csv};
\addplot[dashed, black, samples=2, domain=0.001:100] {1};
\addplot[thick, black] coordinates {(1.0393,1) (1.0393,1/1.7282)};
\addplot[dotted, black] coordinates {(1.0393,1/1.71) (1.0393, 0.01)};
\addplot[dotted, black] coordinates {(0.8, 1) (0.8, 0.01)};
\node at (axis cs:0.2,0.1) [anchor=north] {$G_m = 1.73$} -- (axis cs:0.5537, 170);
\end{axis}
\begin{axis}[%
xmode=log,
xmin=0.1, xmax=3,
ylabel={Phase [deg]},
xlabel={Frequence [rad/s]},
ytick={-180, -90, 0},
scale only axis,
width=5cm,
height=2cm,
yshift=-2.5cm,
]
\addplot[thick, blue] table[x=w, y=phase, col sep=semicolon] {bode_1.csv};
\addplot[dashed, black, samples=2, domain=0.01:10] {-180};
\addplot[dotted, black] coordinates {(1.0393,0) (1.0393, -180)};
\addplot[dotted, black] coordinates {(0.8, 0) (0.8, -180+20.6126)};
\addplot[thick, black] coordinates {(0.8, -180+20.6126) (0.8, -180)};
\node at (axis cs:0.2,-180) [anchor=north] {$\phi_m = 20.6^\circ$} -- (axis cs:0.5537, 170);
\end{axis}
\end{tikzpicture}
\end{document}
% This script assumes that saveMatrix2File has been added to the path, and
% that control-systems toolbox has been installed.
A = [-.6 1 0
0 -.6 1
0 0 -.6];
B = [0 0 1]'; C = [1 0 0];
P = ss(A, B, C, 0); % Define a linear system
[mag, phase, w] = bode(P); % Get the magnitude, phase and angular frequencies
[Gm, Pm, Wcg, Wcp] = margin(P);
margin(P)
saveMatrix2File('bode_1.csv', [squeeze(mag), squeeze(phase), squeeze(w)], 3, {'mag', 'phase', 'w'})
saveMatrix2File('margin_1.csv', [Gm, Pm, Wcg, Wcp], 3, {'Gm', 'Pm', 'Wcg', 'Wcp'})
\ No newline at end of file
Gm;Pm;Wcg;Wcp
1.73;20.6;1.04;0.8
% This script assumes that saveMatrix2File has been added to the path, and
% that control-systems toolbox has been installed.
A = [-.6 1 0
0 -.6 1
0 0 -.6];
B = [0 0 1]'; C = [1 0 0];
P = ss(A, B, C, 0); % Define a linear system
[re, im] = nyquist(P);
re = squeeze(re);
im = squeeze(im);
saveMatrix2File('nyquist_1.csv', [re, im], 3, {'re', 'im'})
S = feedback(1,P); % Sensitivity function
Ms = norm(S, 'inf') % Maximum sensitivity
% Find real, and imaginary part of the maximum sensitivity
[s, n] = min(abs(1+re +1i*im));
% Show in console window
Re_ms = re(n)
Im_ms = im(n)
\ No newline at end of file
re;im
4.62;-0.231
4.62;-0.277
4.62;-0.315
4.61;-0.358
4.61;-0.407
4.6;-0.462
4.59;-0.525
4.58;-0.596
4.56;-0.676
4.54;-0.767
4.52;-0.869
4.49;-0.985
4.45;-1.11
4.39;-1.26
4.33;-1.42
4.24;-1.59
4.13;-1.79
4;-2
3.91;-2.11
3.82;-2.22
3.61;-2.45
3.35;-2.68
3.03;-2.9
2.66;-3.1
2.22;-3.26
1.73;-3.35
1.2;-3.37
0.645;-3.27
0.11;-3.07
-0.369;-2.75
-0.754;-2.34
-1.02;-1.87
-1.14;-1.39
-1.14;-0.943
-1.05;-0.571
-0.893;-0.288
-0.715;-0.096
-0.63;-0.0318
-0.543;0.0195
-0.394;0.0777
-0.276;0.098
-0.187;0.0964
-0.124;0.0843
-0.0801;0.0687
-0.051;0.0533
-0.0321;0.0401
-0.0199;0.0294
-0.0123;0.0212
-0.00754;0.0151
-0.00459;0.0106
-0.00279;0.00741
-0.00169;0.00515
-0.00102;0.00356
-0.000614;0.00245
-0.000369;0.00168
-0.000222;0.00115
-0.000178;0.000979
-0.000133;0.00079
-8e-05;0.00054
-4.8e-05;0.000369
-2.88e-05;0.000251
-1.72e-05;0.000171
-1.03e-05;0.000117
-6.19e-06;7.96e-05
-3.71e-06;5.43e-05
-2.22e-06;3.69e-05
-1.8e-08;1e-06
-2.22e-10;3.7e-08
-1.8e-12;1e-09
-1.8e-16;1e-12
-2.22e-18;3.7e-14
-1.8e-20;1e-15
-1.8e-24;1e-18
-1.8e-28;1e-21
-2.22e-30;3.7e-23
-1.8e-32;1e-24
-1.8e-36;1e-27
-1.8e-40;1e-30
-1.8e-44;1e-33
-2.22e-46;3.7e-35
-1.8e-48;1e-36
-1.8e-52;1e-39
-1.79e-56;1e-42
-1.96e-60;1e-45
-1.84e-64;1e-48
-6.8e-66;3.7e-50
-1.84e-67;1e-51
-1.84e-70;1e-54
-1.84e-73;1e-57
-1.84e-76;1e-60
% This is example code generating a nyquist plot.
% Written by Olle Kjellqvist @ the department of Automatic Control
% 2020/02/19
\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tikz, pgfplots}
\usetikzlibrary{external, decorations.markings, arrows}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
ylabel={Re},
xlabel={Im},
xmin=-2, xmax=5,
ymin=-2, ymax=2,
scale only axis,
width=5cm,
height=5cm,
axis lines=middle,
axis equal,
]
\draw[dotted] (axis cs:0,0) circle [radius=transformdirectionx(1)];
\addplot[thick, blue, postaction={decorate,
decoration={markings,
mark=at position 0.2 with {\arrow{latex};},
mark=at position 0.7 with {\arrow{latex};},
}}] table[x=re, y=im, col sep=semicolon] {nyquist_1.csv};
\addplot[thick, red] coordinates {(-1,0) (-0.7147, -0.096)};
\addplot[red, mark=o] coordinates {(-1,0) (-0.7147, -0.096)};
\node at (axis cs:2, -2) [anchor=south] {$M_s=3.73$};
\addplot[dashed, blue, postaction={decorate,
decoration={markings,
mark=at position 0.2 with {\arrow[rotate=180]{latex};},
mark=at position 0.7 with {\arrow[rotate=180]{latex};},
}}] table[x=re, y expr=-\thisrow{im}, col sep=semicolon] {nyquist_1.csv};
\end{axis}
\end{tikzpicture}
\end{document}
t;s1;s2;s3
0;0;0;0
0.101;0.0442;0.0434;0.0425
0.201;0.17;0.163;0.157
0.302;0.36;0.34;0.322
0.402;0.596;0.554;0.516
0.503;0.853;0.78;0.718
0.603;1.11;1;0.909
0.704;1.34;1.2;1.08
0.804;1.53;1.35;1.21
0.905;1.66;1.46;1.3
1.01;1.72;1.52;1.36
1.11;1.72;1.52;1.37
1.21;1.66;1.48;1.35
1.31;1.54;1.41;1.31
1.41;1.38;1.31;1.25
1.51;1.2;1.19;1.17
1.61;1.01;1.07;1.1
1.71;0.829;0.96;1.03
1.81;0.676;0.865;0.967
1.91;0.561;0.791;0.919
2.01;0.49;0.744;0.885
2.11;0.468;0.724;0.866
2.21;0.494;0.729;0.862
2.31;0.563;0.757;0.869
2.41;0.666;0.803;0.886
2.51;0.792;0.86;0.91
2.61;0.929;0.922;0.937
2.71;1.06;0.984;0.965
2.81;1.19;1.04;0.991
2.91;1.28;1.09;1.01
3.02;1.35;1.12;1.03
3.12;1.38;1.14;1.04
3.22;1.38;1.15;1.05
3.32;1.35;1.14;1.05
3.42;1.28;1.12;1.05
3.52;1.2;1.09;1.04
3.62;1.1;1.06;1.03
3.72;0.999;1.03;1.02
3.82;0.904;0.997;1.01
3.92;0.824;0.969;1
4.02;0.764;0.947;0.994
4.12;0.727;0.932;0.988
4.22;0.717;0.924;0.983
4.32;0.733;0.924;0.981
4.42;0.77;0.93;0.981
4.52;0.826;0.941;0.982
4.62;0.894;0.957;0.985
4.72;0.967;0.974;0.988
4.82;1.04;0.991;0.992
4.92;1.1;1.01;0.996
5.03;1.15;1.02;0.999
5.13;1.19;1.03;1
5.23;1.21;1.04;1
5.33;1.2;1.04;1.01
5.43;1.18;1.04;1.01
5.53;1.15;1.03;1.01
5.63;1.1;1.03;1.01
5.73;1.05;1.02;1.01
5.83;0.996;1.01;1
5.93;0.946;1;1
6.03;0.904;0.993;1
6.13;0.873;0.987;1
6.23;0.854;0.982;0.999
6.33;0.85;0.979;0.998
6.43;0.859;0.979;0.998
6.53;0.879;0.98;0.997
6.63;0.909;0.983;0.997
6.73;0.946;0.987;0.998
6.83;0.984;0.991;0.998
6.93;1.02;0.996;0.998
7.04;1.06;1;0.999
7.14;1.08;1;0.999
7.24;1.1;1.01;1
7.34;1.11;1.01;1
7.44;1.11;1.01;1
7.54;1.1;1.01;1
7.64;1.08;1.01;1
7.74;1.05;1.01;1
7.84;1.02;1.01;1
7.94;0.997;1;1
8.04;0.97;1;1
8.14;0.948;0.999;1
8.24;0.932;0.997;1
8.34;0.922;0.995;1
8.44;0.92;0.994;1
8.54;0.925;0.994;1
8.64;0.937;0.994;1
8.74;0.953;0.995;1
8.84;0.972;0.996;1
8.94;0.993;0.997;1
9.05;1.01;0.999;1
9.15;1.03;1;1
9.25;1.04;1;1
9.35;1.05;1;1
9.45;1.06;1;1
9.55;1.06;1;1
9.65;1.05;1;1
9.75;1.04;1;1
9.85;1.03;1;1
9.95;1.01;1;1
10.1;0.997;1;1
10.2;0.983;1;1
10.3;0.972;1;1
10.4;0.963;0.999;1
10.5;0.958;0.999;1
10.6;0.958;0.998;1
10.7;0.961;0.998;1
10.8;0.967;0.998;1
10.9;0.975;0.999;1
11;0.986;0.999;1
11.1;0.997;0.999;1
11.2;1.01;1;1
11.3;1.02;1;1
11.4;1.02;1;1
11.5;1.03;1;1
11.6;1.03;1;1
11.7;1.03;1;1
11.8;1.03;1;1
11.9;1.02;1;1
12;1.01;1;1
12.1;1.01;1;1
12.2;0.998;1;1
12.3;0.991;1;1
12.4;0.985;1;1
12.5;0.98;1;1
12.6;0.978;1;1
12.7;0.977;1;1
12.8;0.979;1;1
12.9;0.983;1;1
13;0.987;1;1
13.1;0.993;1;1
13.2;0.999;1;1
13.3;1;1;1
13.4;1.01;1;1
13.5;1.01;1;1
13.6;1.02;1;1
13.7;1.02;1;1
13.8;1.02;1;1
13.9;1.01;1;1
14;1.01;1;1
14.1;1.01;1;1
14.2;1;1;1
14.3;0.999;1;1
14.4;0.995;1;1
14.5;0.992;1;1
14.6;0.989;1;1
14.7;0.988;1;1
14.8;0.988;1;1
14.9;0.989;1;1
15;0.991;1;1
15.1;0.993;1;1
15.2;0.996;1;1
15.3;0.999;1;1
15.4;1;1;1
15.5;1.01;1;1
15.6;1.01;1;1
15.7;1.01;1;1
15.8;1.01;1;1
15.9;1.01;1;1
16;1.01;1;1
16.1;1.01;1;1
16.2;1;1;1
16.3;1;1;1
16.4;0.999;1;1
16.5;0.997;1;1
16.6;0.996;1;1
16.7;0.994;1;1
16.8;0.994;1;1
16.9;0.994;1;1
17;0.994;1;1
17.1;0.995;1;1
17.2;0.997;1;1
17.3;0.998;1;1
17.4;1;1;1
17.5;1;1;1
17.6;1;1;1
17.7;1;1;1
17.8;1;1;1
17.9;1;1;1
18;1;1;1
18.1;1;1;1
18.2;1;1;1
18.3;1;1;1
18.4;1;1;1
18.5;1;1;1
18.6;0.998;1;1
18.7;0.998;1;1
18.8;0.997;1;1
18.9;0.997;1;1
19;0.997;1;1
19.1;0.997;1;1
19.2;0.997;1;1
19.3;0.998;1;1
19.4;0.999;1;1
19.5;1;1;1
19.6;1;1;1
19.7;1;1;1
19.8;1;1;1
19.9;1;1;1
20;1;1;1
n = 200;
tmax = 20;
steps = zeros(n, 3);
zetas = [0.1, 0.2, 0.3];
for i = 1:3
zeta=zetas(i);
w0 = 3;
A = [-zeta*w0 w0*sqrt(1-zeta^2)
-w0*sqrt(1-zeta^2) -zeta*w0];
B = [0;1];
C = [1 0]*w0/sqrt((1-zeta^2));
P = ss(A, B, C, 0);
t = linspace(0, tmax, n);
steps(:,i) = step(P,t);
end
saveMatrix2File('step_1.csv', [t', steps], 3, {'t', 's1', 's2', 's3'})?ymax
\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tikz, pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
xlabel={Time [s]},
ylabel={$y$},
scale only axis,
ymin=0,
ymax=2,
xmin=0,
xmax=20,
width=7cm,
height=3cm,
grid=both,
minor tick num=1,
legend style={legend cell align=left, at={(0.98, 0.02)}, anchor=south east}]
\addplot[thick, blue] table[x=t, y=s1, col sep=semicolon] {step_1.csv};
\addlegendentry{$P_1$}
\addplot[thick, dashed, green!40!black] table[x=t, y=s2, col sep=semicolon] {step_1.csv};
\addlegendentry{$P_2$}
\addplot[thick, dashed, red!40!black] table[x=t, y=s3, col sep=semicolon] {step_1.csv};
\addlegendentry{$P_3$}
\end{axis}
\end{tikzpicture}
\end{document}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment