All pastes #905347 Raw Edit

biblio.oct

public text v1 · immutable
·published 2008-02-15 18:18 UTC
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

# =========================================================================================