курсачи / kursach
.docГосударственное образовательное учреждение
высшего профессионального образования
Санкт-Петербургский государственный электротехнический университет
«ЛЭТИ» им. В.И. Ульянова ( Ленина)
ФАКУЛЬТЕТ ЭЛЕКТРОНИКИ (ФЭЛ)
КАФЕДРА Радиотехнической электроники
КУРСОВАЯ РАБОТА (ПРОЕКТ)
По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ
На тему: Разработка модуля программы анализа электронного прибора
(указывается обобщенная тема)
Вариант № 1
Выполнил |
|
|
Оценка |
|
студент гр. № |
5201 |
|
Проверил |
Синев А. Е. |
|
Захаров А.И. |
|
|
(ФИО) |
|
(ФИО) |
|
Дата |
|
САНКТ-ПЕТЕРБУРГ
2019 г.
ЗАДАНИЕ на курсовую работу
По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ
.
Название курсовой работы: |
Модуль численного расчёта траекторий методом Рунге-Кутты 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-ого порядка. Была решена тестовая задача, где результатом является траектория в виде круга.