Интегрированные программные среды

Автор работы: Пользователь скрыл имя, 29 Мая 2013 в 13:19, курсовая работа

Описание работы

В современной периодической научной литературе отмечаются попытки описания движений материальных объектов с помощью вихревого уравнения движения.
Под вихревыми уравнениями движения обычно подразумеваются уравнения гидродинамического типа, ― либо собственно уравнение Эйлера для идеальной жидкости, либо его обобщение в форме уравнения Ламба.
Отмеченные попытки представляют интерес в основном потому, что они составляют определенную альтернативу уравнению движения Ньютона применительно к описанию движения точечных объектов, всегда имевшему тут монополию.

Содержание работы

Введение 2
1 Цель работы 3
2 Задание 4
Список литературы 10
Приложение А. Листинг программы 11

Файлы: 1 файл

kursa4.doc

— 429.00 Кб (Скачать файл)



Содержание

 

 

Введение

 

В современной периодической  научной литературе отмечаются попытки описания движений материальных объектов с помощью вихревого уравнения движения.

Под вихревыми уравнениями движения обычно подразумеваются уравнения  гидродинамического типа, ― либо собственно уравнение Эйлера для идеальной жидкости, либо его обобщение в форме уравнения Ламба.

Отмеченные попытки  представляют интерес в основном потому, что они составляют определенную альтернативу уравнению движения Ньютона  применительно к описанию движения точечных объектов, всегда имевшему тут  монополию.

Главная особенность "вихревого  описания" применительно к точечным объектам состоит в том, что в  результате такого описания возникают  не отдельные, как это характерно для ньютоновского подхода, траектории, а сразу бесконечные и всюду  плотные семейства виртуальных (т.е. всех возможных при указанных в условиях задачи определенных ограничениях) траекторий материальной точки.

Это становится возможным, однако, благодаря введению некоторых  вполне определенных и не очень обременительных  ограничений на классы рассматриваемых движений. А именно, рассматриваются только такие плоские движения, геометрическая картина которых при бесконечном времени их экспозиции может быть предложена с помощью конформных преобразований на комплексной плоскости, отображающей плоскость реальных движений точечного объекта на вещественной координатной плоскости.

В связи с этим встает задача математического моделирования  подобных движений с использованием современных компьютерных технологий.

Цель настоящей курсовой работы состоит в демонстрации этих возможностей и применению их к решению задачи "вихревого описания" движений точечного объекта с нулевым гамильтонианом в поле внешних сил с потенциалом

  (1)

где - расстояние от силового центра (начала координат) до материальной точки, показатель степени α (число b) указывается преподавателем в задании. Дополнительным ограничением на движения точечного объекта является то, что полная энергия объекта в любой момент времени и в любой точке на траектории равна нулю (нулевой гамильтониан), что указывает на консервативность рассматриваемой динамической системы.

 

 

  1. Цель работы

 

Целью выполнения данной курсовой работы является ознакомление с возможностями системы MatLab. Задачей данной работы является расчет и отображение траектории движения материальной точки в поле сил с симметризованным потенциалом, прототипом для которого является потенциал вида

,                                                                                  (2)

где rn – расстояние от n-ого полюса с координатой an до материальной точки, траекторию движения которой требуется построить;

bn – заряд в n-ом полюсе системы.

 

Задание 18.3.2.-1.+ -

N=3 – число полюсов на окружности

m=2 – величина «заряда» каждого полюса на окружности

S0= -1 – величина заряда b0 в начале координат

S = {+ -} – сигнатура чередования знаков заряда полюсов на окружности, причем принимается, что у заряда с номером 1 знак берется положительный.

 

 

 

  1. Задание

 

Требуется рассчитать траекторию движения материальной точки в поле сил с симметризованным потенциалом, прототипом для которого является потенциал вида

,

где rn – расстояние от n-ого полюса с координатой an до материальной точки, траекторию движения которой требуется построить;

bn – «заряд» в n-ом полюсе системы.

Нужно использовать следующее  «изображение» для симметризованного потенциала:

.

Выражение для самого симметризованного потенциала получается в результате перемножения функции изображения с комплексно сопряженной функцией изображения.

Дифференциальное уравнение  для определения координатной функции (КФ) w имеет вид:

,

где –  изображение потенциала, ассоциированного с n-ым «зарядом»,

p – численный параметр (в том числе и могущий принимать комплексные значения), который, тем не менее, как правило, принимается равным единице.

 

Задание 18.3.2.-1. + -

По заданию имеется  три заряда:

 

Осуществив подстановку, приходим к дифференциальному уравнению:

.

 

После интегрирования имеем:

 

Преобразуя данное выражение в  полиномиальный вид, получим:

Определим точки ветвления у w:

Получим эти значения общим численным методом.

Имеем

 

Результант двух полиномов (1) и (3) записывается построчно следующим  образом (по синтаксическим правилам MatLab):

 

>> syms v

>> R=[1 -2-2*exp((2*pi*i)/3)+v 1+4*exp((2*pi*i)/3)+exp((4*pi*i)/3)-2*exp((4*pi*i)/3)*v 2+exp((2*pi*i)/3)*v exp((4*pi*i)/3) 0 0;

0 1 -2-2*exp((2*pi*i)/3)+v 1+4*exp((2*pi*i)/3)+exp((4*pi*i)/3)-2*exp((4*pi*i)/3)*v 2+exp((2*pi*i)/3)*v exp((4*pi*i)/3) 0;0 0 1 2 3 (2*v-1)/v (2+v)/v -1/v 0;

0 0 1 -2-2*exp((2*pi*i)/3)+v 1+4*exp((2*pi*i)/3)+exp((4*pi*i)/3)-2*exp((4*pi*i)/3)*v 2+exp((2*pi*i)/3)*v exp((4*pi*i)/3);

4 -6-6*exp((2*pi*i)/3)+3*v 2+8*exp((2*pi*i)/3)+2*exp((4*pi*i)/3)-4*exp((4*pi*i)/3)*v 2+exp((2*pi*i)/3)*v 0 0 0;

0 4 -6-6*exp((2*pi*i)/3)+3*v 2+8*exp((2*pi*i)/3)+2*exp((4*pi*i)/3)-4*exp((4*pi*i)/3)*v 2+exp((2*pi*i)/3)*v 0 0;

0 0 4 -6-6*exp((2*pi*i)/3)+3*v 2+8*exp((2*pi*i)/3)+2*exp((4*pi*i)/3)-4*exp((4*pi*i)/3)*v 2+exp((2*pi*i)/3)*v 0;

0 0 0 4 -6-6*exp((2*pi*i)/3)+3*v 2+8*exp((2*pi*i)/3)+2*exp((4*pi*i)/3)-4*exp((4*pi*i)/3)*v 2+exp((2*pi*i)/3)*v];

>> D=det(R)

 D =

(18 + 18*3^(1/2)*i)*v^5 + (855/2 - (855*3^(1/2)*i)/2)*v^4 - 4968*v^3 + (- 648 - 648*3^(1/2)*i)*v^2

 

 

 

>> format long

>> P=[18+18*3^(1/2)*i 855/2-(855*3^(1/2)*i)/2 -4968 -648-648*3^(1/2)*I 0 0];

>> a=roots(P)

a =

   0

   0

  6.0000 +10.3923i

   6.0000 +10.3923i

  -0.1250 - 0.2165i

 

Находим точки ветвления:

 

>>P1=[1 -2-2*exp((2*pi*i)/3)+a(1,1) 1+4*exp((2*pi*i)/3)+exp((4*pi*i)/3)-2*exp((4*pi*i)/3)*a(1,1) 2+exp((2*pi*i)/3)*a(1,1) exp((4*pi*i)/3)]

>> w1=roots(P1)

 

w1 =

  -2.3955 - 4.1504i

  -2.3957 - 4.1484i

  -0.1044 - 0.1807i

  -0.1044 - 0.1808i

 

>>P2=[1 -2-2*exp((2*pi*i)/3)+a(2,1) 1+4*exp((2*pi*i)/3)+exp((4*pi*i)/3)-2*exp((4*pi*i)/3)*a(2,1) 2+exp((2*pi*i)/3)*a(2,1) exp((4*pi*i)/3)]

>> w2=roots(P2)

 

w2 =

  -2.3966 - 4.1495i

  -2.3947 - 4.1493i

  -0.1043 - 0.1807i

  -0.1044 - 0.1808i

 

>>P3=[1 -2-2*exp((2*pi*i)/3)+a(3,1) 1+4*exp((2*pi*i)/3)+exp((4*pi*i)/3)-2*exp((4*pi*i)/3)*a(3,1) 2+exp((2*pi*i)/3)*a(3,1) exp((4*pi*i)/3)]

>> w3=roots(P3)

 

w3 =

  -0.7967 + 0.6043i

   0.9217 - 0.3878i

   0.5000 + 0.8660i

   0.5000 + 0.8660i

 

>>P4=[1 -2-2*exp((2*pi*i)/3)+a(4,1) 1+4*exp((2*pi*i)/3)+exp((4*pi*i)/3)-2*exp((4*pi*i)/3)*a(4,1) 2+exp((2*pi*i)/3)*a(4,1) exp((4*pi*i)/3)]

>> w1=roots(P1)

 

w4 =

  -0.5000 + 0.8660i

  -0.5000 + 0.8660i

   1.0000 + 0.0000i

   1.0000 - 0.0000i

 

 

>>P5=[1 -2-2*exp((2*pi*i)/3)+a(5,1) 1+4*exp((2*pi*i)/3)+exp((4*pi*i)/3)-2*exp((4*pi*i)/3)*a(5,1) 2+exp((2*pi*i)/3)*a(5,1) exp((4*pi*i)/3)]

>> w2=roots(P2)

 

w5 =

  -0.5000 + 0.8660i

  -0.5000 + 0.8660i

   1.0000 + 0.0000i

   1.0000 - 0.0000i

 

Точки ветвления:

w1= 0.5000+0.8660i

w2=-0.1043-0.1807i

w3=-2.3955-4.1503i

w4=-0.5000+0.8660i

w5= 1.000

 

Находим из значений v точек  ветвления значения особых координатных линий u1 и u2.

Находим критическое  значение для параметра u1:

u1=log(12.01263912727612)= 2.4849

u1=log(0.24961854095486)= -1.3863

u1= log(0) = -Inf

Соответственно, находим u2:

u2=π/6+-2πk, k=0,1,2…

u2=-π/6+-2πk, k=0,1,2…

u2=0+-2πk, k=0,1,2…

 

Для визуализации рассмотренных  теоретических положений был написан скрипт в MatLab для построения координатных линий.

Графики семейств координатных линий:

 

Семейство координатных линий u1=const

 

 

 

Для u2=const

 

 

 

 

 

Для u1=const, u2=const

 

 

 

 

 

 

Список литературы

  1. А.И.Маркушевич. Теория аналитических функций. Т. 1, М.: Наука, 1967.
  2. А. В. Кукушкин. Математические основы теории поперечных плоских волн //
  3. Методическое пособие для выполнения курсового проекта по дисциплине «Интегрированные программные среды».

 

Приложение А. Листинг программы

script

a=1;

e = pi/16;

dis=1;

axis equal

axis ([-4 4 -4 4]);

hold on

grid on

xlabel('Re(w)')

ylabel('Im(w)')

oo=1;

%% Построение координатных  линий u1=const на заданном отрезке  u2

for u_1=[-3 -2 -1.3863 -1 0 1 2 2.4849 3 4]

    u_2=-2*pi:pi/200:0;

    z=u_2+i*u_1;

 

PP=[1 2 2*exp((4*pi*i)/3) 3*exp((2*pi*i)/3) exp((4*pi*i)/3) 0];

 

xx=[(PP(1,1)*(exp(u_1)*(cos(u_2)-i*sin(u_2)))).' (PP(1,3)*(exp(u_1)*(cos(u_2)-i*sin(u_2)))).' (PP(1,4)*(exp(u_1)*(cos(u_2)-i*sin(u_2)))).' ((PP(1,2)*(exp(u_1)*(cos(u_2)-i*sin(u_2))))).' (ones(1,length(u_2))*PP(1,5))'];

 

for u=1:length(u_2)

w(u,:)=roots(xx(u,:));

end

w;

if ((u_1>=-1.3863 & u_1<=2.4849)) | (u_1==1.3863)

ww=[w(:,1); w(:,2); w(:,3); w(:,4)];

b=length(ww);

l=1;

d=1;

q(l,1)=ww(1);

oo1=ww(1:l-1,1);

oo2=ww(l+1:b,1);

oo=[oo1; oo2];

for k=1:b-2

qq=q(k,1);

    Q=qq-oo;

    r=1;

    [MIN,l]=min(abs(Q));

    p=l-r;

if p~=0

kk(d)=k;

        d=d+1;

end

    q(k+1,1)=oo(l);

    oo1=oo(1:(l-1),1);

oo2=oo((1+l):(b-k),1);

oo=[oo1; oo2];

end

q=[q; oo];

 

qq=[q(2:length(q)); 0];

dif=abs(qq-q);

[MAX, pp]=max(dif);

yy1=q(1:pp);

yy2=q(pp+1:length(q));

 

plotArrow(real(yy1),imag(yy1),'K','lineWidth',1)

plotArrow(real(yy2),imag(yy2),'K','lineWidth',1)

 

end

 

if (u_1<1.3863)  | (u_1<-1.3863  |u_1>2.4849)

ww=[w(:,1); w(:,2); w(:,3); w(:,4)];

b=length(ww);

l=1;

d=1;

q(l,1)=ww(1);

oo1=ww(1:l-1,1);

oo2=ww(l+1:b,1);

oo=[oo1; oo2];

for k=1:b-1

qq=q(k,1);

    Q=qq-oo;

    r=1;

    [MIN,l]=min(abs(Q));

 

     p=l-r;

if p~=0

kk(d)=k;

        d=d+1;

end

q(k+1,1)=oo(l);

    oo1=oo(1:(l-1),1);

oo2=oo((1+l):(b-k),1);

oo=[oo1; oo2];

end

q=[q];

 

qq=[q(2:length(q)); 0];

dif=abs(qq-q);

[MAX, pp]=max(dif);

yy1=q(1:pp);

yy2=q(pp+1:length(q));

 

qqq=[yy2(2:length(yy2)); 0];

dif2=abs(qqq-yy2);

[MAX, pp]=max(dif2);

yyy2=yy2(1:pp);

yyy3=yy2(pp+1:length(yy2));

 

plotArrow(real(yy1),imag(yy1),'K','lineWidth',1)

plotArrow(real(yyy2),imag(yyy2),'K','lineWidth',1)

plotArrow(real(yyy3),imag(yyy3),'K','lineWidth',1)

 

end

clear all

end

 

for u_2=-pi:pi/36:pi;

     u_1=-3:0.02:3;

     z=u_2+i*u_1;

    

PP=[1 2 2*exp((4*pi*i)/3) 3*exp((2*pi*i)/3) exp((4*pi*i)/3) 0];

 

xx=[(PP(1,1)*(ones(1,length(u_1)))).' ...

    (PP(1,3)*(exp(u_1)*(cos(u_2)-i*sin(u_2)))).' ...

    (PP(1,4)*(exp(u_1)*(cos(u_2)-i*sin(u_2)))).' ...

    (PP(1,2)*(exp(u_1)*(cos(u_2)-i*sin(u_2)))).' ...

    (ones(1,length(u_1))*PP(1,5))'];

 

 

 

 for u=1:length(u_1)

     w(u,:)=roots(xx(u,:));

 end

w;

 

ww=[w(:,1); w(:,2); w(:,3); w(:,4)];

b=length(ww);

l=1;

d=1;

q(l,1)=ww(1);

oo1=ww(1:l-1,1);

oo2=ww(l+1:b,1);

oo=[oo1; oo2];

 for k=1:b-1

     qq=q(k,1);

     Q=qq-oo;

     r=1;

     [MIN,l]=min(abs(Q));

    

      p=l-r;

     if p~=0

         kk(d)=k;

         d=d+1;

     end

     q(k+1,1)=oo(l);

     oo1=oo(1:(l-1),1);

oo2=oo((1+l):(b-k),1);

oo=[oo1; oo2];

 end

q=[q];

  

qq=[q(2:length(q))];

dif=abs(qq-q(1:length(q)-1));

[MAX, pp]=max(dif);

yy1=q(1:pp);

yy2=q(pp+1:length(q));

 %  plot(real(yy1),imag(yy1),'K','lineWidth',1)

 %  plot(real(yy2),imag(yy2),'K','lineWidth',1)

yy2;

 

  qqq=[yy2(2:length(yy2))];

dif2=abs(qqq-yy2(1:length(yy2)-1))

[MAX, pp]=max(dif2)

yyy2=yy2(1:pp);

yyy3=yy2(pp+1:length(yy2));

 

  plotArrow(real(yy1),imag(yy1),'K','lineWidth',1)

  plotArrow(real(yyy2),imag(yyy2),'K','lineWidth',1)

  plotArrow(real(yyy3),imag(yyy3),'K','lineWidth',1)

 

end

 

 

function plotArrow(varargin)

%значения  параметров по умолчанию

arrowLength = 0.1;    %длина стрелки

arrowAngle = 0.5;     %угол наклона

arrowPosition = 0.5;  %позиция стрелки

arrowLineWidth = 2;   %толщина линий, которыми рисуется стрелка

 

%первые  три ячейки параметров - X,Y,color

X = varargin{1};        %массив X координат

Y = varargin{2};        %массив Y координат

color = varargin{3};    %цвет

%остальные  ячейки представляют собой пару

%i-ая  название параметра

%(i+1)-ая  значение параметра

idj = 4;    %заполнение ячеек для функции plot начинается с 4-ой

for id = 4: 2: length(varargin) %по всем ячейкам от 4-ой до последней

    if strcmp(varargin{id},'ArrowLength')

        %если имя параметра 'ArrowLength' значит в следующей

        %ячейке хранится длина стрелки

        arrowLength = varargin{id + 1};

    elseif strcmp(varargin{id},'ArrowAngle')

        %если имя параметра 'ArrowAngle', значит в следующей

        %ячейке хранится угол наклона стрелки

        arrowAngle = varargin{id + 1};

    elseif strcmp(varargin{id},'ArrowPosition')

        %если имя параметра 'ArrowPosition', значит в следующей

        %ячейке хранится позиция стрелки на координатной линии

        arrowPosition = varargin{id + 1};

    elseif strcmp(varargin{id},'ArrowLineWidth')

        %если имя параметра 'ArrowLineWidth', значит в следующей

        %ячейке хранится толщина линий, которыми рисуется стрелка

        arrowLineWidth = varargin{id + 1};

    else

        %если этот параметр не относится к свойствам стрелки, то передаем его         %в список параметров функции plot

        attr{idj} = varargin{id};           %имя параметра

        attr{idj + 1} = varargin{id + 1};   %значение параметра

        idj = idj + 2;

    end

end

%первые  три ячейки соответствуют исходным  ячейкам функции

attr{1} = varargin{1};  %массив X координат

attr{2} = varargin{2};  %массив Y уоординат

attr{3} = varargin{3};  %цвет

 

%рисуем  график

plot(attr{1: idj - 1});

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Далее  идет код для отрисовки стрелки  в нужной позиции

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

sizeX = length(X);      %количество точек графика

graphLengthMax = 0;     %длина графика

graphLengthList = [];   %список длин отрезков графика

%Подсчет  общей длины

for (id = 1: 1: sizeX - 1)

    vectorX = X(id + 1) - X(id);

    vectorY = (Y(id + 1) - Y(id));

    lengthLine = sqrt(vectorX * vectorX + vectorY * vectorY);

    %добавляем к общей длине

    graphLengthMax = graphLengthMax + lengthLine;

    %добавляем длину отрезка в список длин

    graphLengthList = cat(2, graphLengthList, lengthLine);

end

%Поиск позиции для стрелки

s = 0;          %пройденный путь

saveId = -1;    %

for (id = 1: 1: sizeX - 1)

    s = s + graphLengthList(id);

    %Когда требуемая часть пути минус половина длины стрелки пройдена,

    %сохраняем индекс точки. Используется для определения направления

    %стрелки. Так как, если определять направление стрелки по 2 близстоящим

    %точкам, то при малых длинах отрезков можем получить графически

Информация о работе Интегрированные программные среды