rendered paste body# =====================================================================================
1;
tr=pi/180;
tg=180/pi;
a=e^(j*120*tr);
# Counters
global SECTION = 0
global SUBSECTION = 0
global SUBSUBSECTION = 0
# Функция выводит на экран комплексное число в радиальной форме
# ex.: printc("Z11", Z11)
function printc(s,a)
printf("%s = %ge^(%gj)\n",s,abs(a),arg(a)*180/pi);
endfunction
function myprint(s,m,a)
printf("%s = %ge^%gj\n",s,m,a);
endfunction
# Функция печатает функцию тока и напряжения по их комплексному значению
# s - строка
# cpl - комплексное значение тока/напряжения
# n - номер гармоники
function printi(s,cpl,n)
tg=180/pi;
tr=pi/180;
if(arg(cpl)<0)
add_str = "";
else
add_str = "+";
endif
printf("\t %s(t) = sqrt(2) %g sin(%dwt%s%g)\n",s,abs(cpl),n,add_str,arg(cpl)*tg);
endfunction
# Функция печатает функцию тока и напряжения при нессиметрии, выводит 1, 3 и 5 гармоники
# s - строка
# i1 - ток/напряжение 1й гармоники
# i2 - ток/напряжение 2й гармоники
# i3 - ток/напряжение 3й гармоники
function printn(s,i1,i3,i5)
tg=180/pi;
tr=pi/180;
if(arg(i1)<0)
add_str1 = "";
else
add_str1 = "+";
endif
if(arg(i3)<0)
add_str3 = "";
else
add_str3 = "+";
endif
if(arg(i5)<0)
add_str5 = "";
else
add_str5 = "+";
endif
printf(" %s(t) = %g 2sin(wt%s%g) + %g 2sin(3wt%s%g) + %g 2sin(5wt%s%g)\n",
s,abs(i1),add_str1,arg(i1)*tg,
abs(i3),add_str3,arg(i3)*tg,
abs(i5),add_str5,arg(i5)*tg);
endfunction
# Отрисовываем график, x,y - массивы с координатами
function mydraw(x,y)
#graw("reset;");
clearplot;
gset grid;
#gset title "ea(t) = 220 2sin(wt) + 110 2sin(3*wt+100) + 60 2sin(5*wt-20)";
#gset title "tit";
gset xlabel "t"
gset ylabel "cosf"
gset key top left;
#gset xrange [0:];
#gset yrange [0:];
gset smooth csplines;
hold on;
plot(x,y,"1;;");
hold off;
gset terminal postscript;
gset output "out.eps";
replot;
gset terminal x11;
gset output;
pause -1;
endfunction
# Отрисовываем график, x,y - массивы с координатами
function mydraw_new(x,y, tit, xlab, ylab)
clearplot;
grid("on");
title(tit);
xlabel(xlab);
ylabel(ylab);
#gset key top left;
#gset smooth csplines;
__gnuplot_set__ key top left;
__gnuplot_set__ smooth csplines;
hold on;
plot(x,y,"1;;");
hold off;
__gnuplot_set__ terminal postscript;
__gnuplot_set__ output "out.eps";
replot;
__gnuplot_set__ terminal x11;
__gnuplot_set__ output;
pause -1;
endfunction
# Рисуем векторную диаграмму
# @param - стуктура с полями: offset - начало, с которого рисуется вектор
# arg - вектор в комплексной форме
# label - метка для вектора, поля меток разделяются ';'
# @tit - заголовок рисунка
#
# Ex.: draw_data = struct("offset", [0,0,0],
# "arg", [Ila, Ilb, Ilc],
# "label", ["Ila"; "Ilb"; "Ilc"]);
# draw_vector(draw_data, "TEST")
function draw_vector(param, tit)
clearplot;
grid("on");
title(tit);
xlabel("+1");
ylabel("+j");
__gnuplot_set__ key top left;
hold on;
r=columns(param.arg);
col=columns(param.label);
for i = 1:r
offset_c = param.offset(i);
arg_c = param.arg(i);
offset_x = real(offset_c)*10000;
offset_y = imag(offset_c)*10000;
arg_x = real(arg_c)*10000;
arg_y = imag(arg_c)*10000;
x=[offset_x, offset_x + arg_x];
y=[offset_y, offset_y + arg_y];
label="";
for j = 1:col
label=strcat(label, param.label(i,j));
endfor
eval(sprintf("__gnuplot_set__ arrow %d from %d,%d to %d,%d",
i,
offset_x,
offset_y,
offset_x + arg_x,
offset_y + arg_y));
#offset_x + arg_x
#offset_y + arg_y
eval(sprintf("__gnuplot_set__ label %d \"%s\" at %d,%d",
i,
label,
offset_x + arg_x,
offset_y + arg_y));
plot(x,y, "1;;");
endfor
#__gnuplot_show__ arrow;
hold off;
__gnuplot_set__ terminal postscript;
__gnuplot_set__ output "out.eps";
replot;
__gnuplot_set__ terminal x11;
__gnuplot_set__ output;
pause -1;
endfunction
# Рисует сразу несколько графиков
#
# x - матрица
# y - что по оси X ;-)
function mydraw_n(x,y, title)
r = rows(x);
c = columns(x);
tc = columns(title);
graw("reset;");
clearplot;
gset grid;
gset key top left
hold on;
for i = 1:r
for j = 1:c
x1(1,j) = x(i,j);
endfor
tit = "";
for j=1:tc
tit = strcat(tit, title(i,j));
endfor
str1 = strcat (";", tit);
str2 = strcat (str1, ";");
str = strcat (num2str(i), str2);
plot(y,x1,str);
endfor
hold off;
gset terminal postscript;
gset output "out.eps";
replot;
gset terminal x11;
gset output;
input("Press Enter for next...\n");
endfunction
# Перевод строки, чисто для удобства
function newline
printf("\n");
endfunction
# Вывод красивого заголовка :)
function caption(s)
printf("\n\n\n\n%s\n",s);
n = length(s);
for i = 1:n
printf("^");
endfor
printf("\n\n");
endfunction
function caption2(s)
printf("\n%s\n\n",s);
endfunction
# Функция для вывода маленьких поясняющих комментариев
# s - строка для вывода
function p(s)
printf("%s\n",s);
endfunction
# Печатает комплексное число в показательной форме
# на новую строчку переход не осуществляется
function pc(a)
printf("%ge^(%gj)",abs(a),arg(a)*180/pi);
endfunction
# Функция для вывода нескольких параметров, удобно для сравнения значений полученных по нескольким
# способам
function pn(params)
c = size(params);
i = 1;
while(i <= c(2))
pc(params(i));
printf("\t");
i++;
endwhile
printf("\n");
endfunction
# Функция для вывода маленьких поясняющих комментариев с параметром
# s - трока для вывода
# i1 - значение для вывода
function p1(s, i1)
printf("%s: %d\n",s, i1);
endfunction
# Продвинутая версия для вывода заголовка, с автоматической нумерацией, для совместимости с LaTeX
# s - строка для вывода
function section(s)
global SECTION
global SUBSECTION
global SUBSUBSECTION
SECTION = SECTION + 1;
SUBSECTION = 0;
SUBSUBSECTION = 0;
s1 = int2str(SECTION);
n = length(s) + length(s1) + 2;
n2 = n;
if n > getenv("COLUMNS")
n2=getenv("COLUMNS");
endif
printf("\n\n\n\n");
for i = 1:n2
printf("-");
endfor
printf("\n%d. %s\n", SECTION, s);
for i = 1:n2
printf("-");
endfor
printf("\n\n\n\n");
endfunction
# Подзаголовок
function subsection(s)
global SECTION
global SUBSECTION
global SUBSUBSECTION
SUBSECTION = SUBSECTION + 1;
SUBSUBSECTION = 0;
s1 = int2str(SECTION);
s2 = int2str(SUBSECTION);
n = length(s) + length(s1) + length(s2) + 3;
n2 = n;
if n > getenv("COLUMNS")
n2=getenv("COLUMNS");
endif
printf("\n\n%d.%d. %s\n", SECTION, SUBSECTION, s);
for i = 1:n2
printf("^");
endfor
printf("\n\n");
endfunction
# Под-подзаголовок
function subsubsection(s)
global SECTION
global SUBSECTION
global SUBSUBSECTION
SUBSUBSECTION = SUBSUBSECTION + 1;
printf("\n%d.%d.%d. %s\n", SECTION, SUBSECTION, SUBSUBSECTION, s);
endfunction
# Запись 2-м массивов в файл (для передачи gnuplot)
function mwrite(fname, x, y)
f = fopen(fname,"w");
c = size(x);
i = 1;
while(i <= c(2))
fprintf(f,"%f %f\n",x(i),y(i));
i++;
endwhile
fclose(f);
endfunction
# Интерполяция, есть два крайних значения X1,Y1 и X2,Y2, нужно для X3 выдать Y3
# считается что на (X1,Y1)-(X2,Y2) - прямая
function ret = interpol(x1, y1, x2, y2, x3)
k = (y2 - y1)/(x2 - x1);
b = y1 - k*x1;
ret = x3 * k + b;
endfunction
# =========================================================================================