Скачиваний:
6
Добавлен:
28.04.2022
Размер:
181.25 Кб
Скачать

Государственное образовательное учреждение

высшего профессионального образования

Санкт-Петербургский государственный электротехнический университет

«ЛЭТИ» им. В.И. Ульянова ( Ленина)

ФАКУЛЬТЕТ ЭЛЕКТРОНИКИ (ФЭЛ)

КАФЕДРА Радиотехнической электроники

КУРСОВАЯ РАБОТА (ПРОЕКТ)

По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ

На тему: Разработка модуля программы анализа электронного прибора

(указывается обобщенная тема)

Вариант № 1

Выполнил

Оценка

студент гр. №

5201

Проверил

Синев А. Е.

Захаров А.И.

(ФИО)

(ФИО)

Дата

САНКТ-ПЕТЕРБУРГ

2019 г.

ЗАДАНИЕ на курсовую работу

По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ

  1. .

Название курсовой работы:

Модуль численного расчёта траекторий методом Рунге-Кутты 4-го порядка с определением времени пролёта через ячейку конечно-разностной сетки.

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

Разработка алгоритма и программы на С++ для численного расчёта траекторий методом Рунге-Кутты 4-го порядка с определением времени пролёта через параллелепипед.

Исходные данные:

1) Размеры ячейки-параллелепипеда.

2) Электрическое и магнитное поле, зависящие от координат.

3) Начальные параметры траектории (координаты точки старта и вектор начальной скорости)

Результаты работы:

1. Программа расчёта траекторий и времени пролёта через ячейку. 2. Методика тестирования и отладки программы.

Литература:

1. Internet.

2. В. М. Вержбицкий Основы численных методов. Учебник для вузов. – М.: Высш. Шк., 2002.

Цель работы

Получение и освоение навыков работы в С++, написание программы для решения задачи Рунге-Кутта 4-ого порядка.

Теория:

. –функция Рунге-Кутта, где элементы, а имеют следующий вид

,- функция а описывается следующим выражением .

Для простаты расчета предположим, что магнитное поле постоянное и равно нулю.

Рисунок 1 – блок-схема решения Рунге-Кутта 4 порядка

Код программы

// Runge.cpp: определяет точку входа для консольного приложения.

//

//

//

#include <stdio.h>

#include <iostream>

#include <math.h>

#include "stdafx.h"

using namespace std;

double fx(double x, double Vx,double y, double Vy,double z, double Vz,double Ex,double By,double Bz )

{

return(Ex+(Vy*Bz-Vz*By));

}

double fy(double x, double Vx,double y, double Vy,double z, double Vz,double Bx,double Ey,double Bz )

{

return(Ey+(Vz*Bx-Vx*Bz));

}

double fz(double x, double Vx,double y, double Vy,double z, double Vz,double Bx,double By,double Ez )

{

return(Ez+(Vx*By-Vy*Bx));

}

int main(void){

double i,x,y,z,Vx,Vy,Vz,h,endx,endy,endz,k11,k21,k31,k41,k12,k22,k32,k42,k13,k23,k33,k43,h1,h2,step,u,time,Bx,By,Bz,Ex,Ey,Ez,m,e,timex,timey,timez;

cout <<"Electric field Ex Ey Ez"<<endl;

cin >>Ex>>Ey>>Ez;

cout <<"Magnetic field Bx By Bz"<<endl;

cin >>Bx>>By>>Bz;

cout <<"enter grid size x y z"<<endl;

cin >>endx>>endy>>endz;

m=9.1e-31;

e=1.6e-19;

x=0;

y=0;

z=0;

timex=0;

timey=0;

timez=0;

time=0;

cout <<"Enter speed(Vx,Vy,Vz)"<<endl;

cin>>Vx>>Vy>>Vz;

cout <<"Enrer step"<<endl;

cin>>step;

h=endx/step;

h1=endy/step;

h2=endz/step;

for(i=1;i<=step;i++)

{k11=h*fx(x,Vx,y, Vy,z, Vz,Ex,By,Bz);

k21=h*fx(x+0.5*h, Vx+0.5*k11,y+0.5*h, Vy+0.5*k11,z+0.5*h, Vz+0.5*k11,Ex,By,Bz);

k31=h*fx(x+0.5*h, Vx+0.5*k21,y+0.5*h, Vy+0.5*k21,z+0.5*h, Vz+0.5*k21,Ex,By,Bz);

k41=h*fx(x+h, Vx+k31,y+0.5*h, Vy+0.5*k31,z+0.5*h, Vz+0.5*k31,Ex,By,Bz);

Vx+=(k11+2*k21+2*k31+k41)/6;

timex+=6.28*m*Vx/(e*(abs(Bx+By+Bz)));

x+=h;

k12=h1*fy(x,Vx,y, Vy,z,Vz,Bx,Ey,Bz);

k22=h1*fy(x+0.5*h1,Vx+0.5*k12,y+0.5*h1, Vy+0.5*k12,z+0.5*h1,Vz+0.5*k12,Bx,Ey,Bz);

k32=h1*fy(x+0.5*h1,Vx+0.5*k22,y+0.5*h1, Vy+0.5*k22,z+0.5*h1,Vz+0.5*k22,Bx,Ey,Bz);

k42=h1*fy(x+0.5*h1,Vx+0.5*k32,y+h1, Vy+k32,z+0.5*h1,Vz+0.5*k32,Bx,Ey,Bz);

Vy+=(k12+2*k22+2*k32+k42)/6;

timey+=6.28*m*Vy/(e*(abs(Bx+By+Bz)));

y+=h1;

k13=h2*fz(x,Vx,y, Vy,z, Vz,Bx,By,Ez);

k23=h2*fz(x+0.5*h2,Vx+0.5*k13,y+0.5*h2, Vy+0.5*k13,z+0.5*h2, Vz+0.5*k13,Bx,By,Ez);

k33=h2*fz(x+0.5*h2,Vx+0.5*k23,y+0.5*h2, Vy+0.5*k23,z+0.5*h2, Vz+0.5*k23,Bx,By,Ez);

k43=h2*fz(x+0.5*h2,Vx+k33,y+0.5*h2, Vy+k33,z+h2, Vz+k33,Bx,By,Ez);

Vz+=(k13+2*k23+2*k33+k43)/6;

timez+=6.28*m*Vz/(e*(abs(Bx+By+Bz)));

z=h2;

time+=abs(timex+timey+timez);

cout<<"Vx,Vy,Vz:("<<Vx<<", "<<Vy<<", "<<Vz<<"); "

<<"time:("<<time<<"); "<<endl;} ;

cin>>u;

}

Для проверки данной программы решим тестовую задачу, где электрическое поле отсутствует Ex=Ey=Ez=0, магнитное поле задано только по одной координате Вz, и скорость есть только по координатам х и у.

Рисунок 2 – пример работы итоговый вариант

Вывод: в ходе отладки и работы программы были решена задача коши методом Рунге-Кутта 4-ого порядка. Была решена тестовая задача, где результатом является траектория в виде круга.

Соседние файлы в папке курсачи