Расчет на ЭВМ характеристик выходных сигналов электрический цепей
В данной работе сигнал на входе электрической цепи Uвх и сигнал на выходе электрической цепи Uвых заданы функцией, графиком и условиями. Так же дан рабочий набор, с помощью которого необходимо для заданной электрической цепи вывести формулы зависимости входного сигнала Uвхот времени и выходного сигнала Uвых от времени. Затем нужно рассчитать значение параметров Uвх и Uвых. Вычислить точность… Читать ещё >
Расчет на ЭВМ характеристик выходных сигналов электрический цепей (реферат, курсовая, диплом, контрольная)
Санкт — Петербургский Государственный Университет Телекоммуникаций им. проф. М. А. Бонч-Бруевича Курсовая работа по дисциплине
«Программирование на языке высшего уровня»
Расчет на ЭВМ характеристик выходных сигналов электрический цепей выполнила Севастьянова Елена, студентка группы Р-01
Санкт-Петербург
Оглавление Постановка задачи Таблица идентификаторов Список основных функций Блок — схема программы Блок — схема U входа Текст программы Расчёт на Maxima
Результат вычисление параметра с заданной точностью Заключение массив файл программа Постановка задачи Данная курсовая работа посвящена решению задач машинного анализа электрических цепей.
В данной работе сигнал на входе электрической цепи Uвх и сигнал на выходе электрической цепи Uвых заданы функцией, графиком и условиями. Так же дан рабочий набор, с помощью которого необходимо для заданной электрической цепи вывести формулы зависимости входного сигнала Uвхот времени и выходного сигнала Uвых от времени. Затем нужно рассчитать значение параметров Uвх и Uвых. Вычислить точность, провести запись в файл и построить графики.
Создание входного сигнала:
Входной сигнал
Uвх (t)=
Рабочий набор
U = 6B
tn = 0 сек
tк = 2? сек
Передаточная характеристика.
Рабочий набор
U1 = 3 В
U2 = 15 В Передаточная характеристика
Uвых (t)
Таблица идентификаторов
Обозначение в задаче | идентификатор | назначение | |
tн | tn | начальный момент времени наблюдения входного напряжения. | |
tк | tk | конечный момент времени наблюдения входного напряжения | |
N | N | количество точек разбиения | |
t | t[n] | массив времени | |
Uвх | Uin[n] | массив входного напряжения | |
Uвых | Uout[n] | массив выходного напряжения | |
; | dt | шаг между точками разбиения | |
t1 | t1 | константа времени | |
U | U | константа входного сигнала | |
U1 | U1 | константа выходногосигнала | |
U2 | U2 | константа выходногосигнала | |
U3 | U3 | константа выходногосигнала | |
d | d | достигнутая погрешность | |
; | p | вычисленный параметр | |
Список основных функций
1. void time (int n, float *t) — функции формирования массива времени
2. void vhod (int n, float *t, float *Uin) — функции формирования массива входного напряжения
3. void vihod (int n, float *t, float *Uin, float *Uout) — функции формирования массива выходного напряжения
4. void tabl (int n, float *t, float *Uin, float *Uout) — функция вывода таблицы
5. float par (int n, float *t, float *Uout) — функция расчета параметра
6. float spend (int n, float *t, float *Uin, float *Uout) — функция расчёта заданной точности
7. char vivod_titylnik (char *str, int n) — функция вывода титульного листа
8. void zapis_time (float n, float *t) — запись в файл массива времени
9. void zapis_mas_Uin (float n, float *t, float *Uin) — запись в файл массива входного напряжения
10. void zapis_mas_Uout (float n, float *t, float *Uin, float *Uout) — запись в файл массива выходного напряжения Блок — схема программы Блок — схема U входа Текст программы
#include
#include
#include
#define N 1000
FILE *fp1;
FILE *fp2;
FILE *fp3;
FILE *fp4;
char vivod_titylnik (char*str, int n);
void time (int n, float *t);
void vhod (int n, float *t, float *Uin);
void vihod (int n, float *Uin, float *Uout);
void tabl (int n, float *t, float *Uin, float *Uout);
float par (int n, float *t, float *Uout);
float spend (int n, float *t, float *Uin, float *Uout);
void zapis_time (float n, float *t);
void zapis_mas_Uin (float n, float *t, float *Uin);
void zapis_mas_Uout (float n, float *t, float *Uin, float *Uout);
int main () {
int n;
char cc;
char str[80];
vivod_titylnik (str, 80);
printf («nn-chislo tochek n»);
printf («Vvedite n n»);
scanf («%d%c», &n, &cc);
float t[N], Uin[N], Uout[N];
int end = 1, command;
while (end) {
printf («nMenu n»);
printf («1-titylniy list n»);
printf («2-tablica n»);
printf («3-parametr n»);
printf («4-zapis_v_fail n»);
printf («5-tochnost n»);
printf («0-vihod iz programmi n»);
printf («Vvedite komandy n»);
scanf («%d», &command);
switch (command) {
case 1:
printf («TITYLNIY LIST n»);
vivod_titylnik (str, 81);
break;
case 2:
printf («nTABLISA n»);
time (n, t);
vhod (n, t, Uin);
vihod (n, Uin, Uout);
tabl (n, t, Uin, Uout);
break;
case 3:
printf («nPARAMETR n»);
time (n, t);
vhod (n, t, Uin);
vihod (n, Uin, Uout);
float p;
p = par (n, t, Uout);
printf («p=%5.2f n», p);
break;
case 4:
time (n, t);
vhod (n, t, Uin);
vihod (n, Uin, Uout);
zapis_time (n, t);
zapis_mas_Uin (n, t, Uin);
zapis_mas_Uout (n, t, Uin, Uout);
printf («zapis'_v_fail_sovershena n»);
break;
case 5:
printf («nTOCHNOST' n»);
spend (n, t, Uin, Uout);
break;
case 0:
end = 0;
}
}
return 0;
}
void time (int n, float *t) {
int i;
float dt, tn = 0, tk = 2*3.14;
dt = (tk — tn) / (n — 1);
for (i = 0; i < n; i++) {
t[i] = tn + i*dt;
}
}
void vhod (int n, float *t, float *Uin) {
int i, U=6;
for (i = 0; i < N; i++) {
if ((t[i] >= 0) && (t[i] < 3.14 / 2))
Uin[i] = U * (1 — cos (t[i]));
else if (t[i] < 3.14)
Uin[i] = U * (1 + cos (t[i]));
else if (t[i] < (3 * 3.14 / 2))
Uin[i] = U * (1 — cos (3.14 — t[i]));
else
Uin[i] = U * (1 + cos (3.14 — t[i]));
}
}
void vihod (int n, float *Uin, float *Uout) {
float U1 = 3, U2 = 15;
int i;
for (i = 0; i < n; i++) {
if (Uin[i] < U1)
Uout[i] = U2 / U1 * Uin[i];
else
Uout[i] = U2;
}
}
void tabl (int n, float *t, float *Uin, float *Uout) {
int i;
printf («%3s %6s %5s n», «t», «Uin», «Uout»);
for (i = 0; i < n; i++) {
printf («%5.2f %5.2f %5.2f n», *(t + i), *(Uin + i), *(Uout + i));
}
}
float par (int n, float *t, float *Uout) {
int Um =10;
float p, t1 = 0, t2;
for (int i = 0; i < (n-1); i++) {
if ((Uout[i] < Um) && (Uout[i + 1] > Um)) t1 = t[i];
if ((Uout[i] > Um) && (Uout[i + 1] < Um)) t2 = t[i];
else p = 2*(t2 — t1);
}
return p;
}
float spend (int n, float *t, float *Uin, float *Uout) {
float p1, p2, d;
time (n, t);
vhod (n, t, Uin);
vihod (n, Uin, Uout);
p1 = par (n, t, Uout);
for (;;) {
n = 2 * n;
if (n > N) {
printf («Neverno n>N n»);
break;
} else {
time (n, t);
vhod (n, t, Uin);
vihod (n, Uin, Uout);
p2 = par (n, t, Uout);
d = fabs ((p2 — p1) / p2);
}
if (d < 0.01) {
printf («nn-kollichestvo tochek, neobhodimih dlya vichisleniy n»);
printf («p2-parametr s tochnostuy n»);
printf («d-dostignytaya pogreshnost' n»);
printf («n=%d p2=%5.2f d=%f n», n, p2, d);
break;
} else p1 = p2;
}
}
void zapis_time (float n, float *t) {
int i;
time (n, t);
fp1 = fopen («t[i]. txt», «w»);
for (i = 0; i < n; i++)
fprintf (fp1, «n %f», t[i]);
fclose (fp1);
}
void zapis_mas_Uin (float n, float *t, float *Uin) {
int i;
time (n, t);
vhod (n, t, Uin);
fp2 = fopen («Uin[i]. txt», «w»);
for (i = 0; i < n; i++)
fprintf (fp2, «n %f», Uin[i]);
fclose (fp2);
}
void zapis_mas_Uout (float n, float *t, float *Uin, float *Uout) {
int i;
time (n, t);
vhod (n, t, Uin);
vihod (n, Uin, Uout);
fp3 = fopen («Uout[i]. txt», «w»);
for (i = 0; i < n; i++)
fprintf (fp3, «n %f», Uout[i]);
fclose (fp3);
}
char vivod_titylnik (char *str, int n) {
fp4 = fopen («titulnik.txt», «r»);
if (fp4 == NULL) {
printf («n file is not open n»);
return 0;
}
while (fgets (str, n, fp4) ≠ NULL) {
puts (str);
}
fclose (fp4);
return 0;
}
Результат вычисления параметра с заданной точностью Параметр, который необходимо найти, задаётся следующими условиями.
Найти период времени когда Uвх>=10 B на временном интервале от 0 с до 2? с.
Заданная точность вычисления параметра d=0,01.
Для получения необходимого значения параметра понадобилось 1000 точек расчёта, при этом значение данного параметра 2,64 с.
Заключение
По заданным начальным данным были получены следующие результаты:
• Расчет для n — равностоящих точек значений времени t, напряжение входного сигнала Uвх (t) и напряжения выходного сигнала Uвых (t).
• Расчет параметров для Uвых (t)
• Расчет точности.
• Сделана запись в файл.
• Построены графики зависимости напряжения входного и выходного сигнала в Maxima и Neoffice Cals
• Сделан контрольный расчёт в Maxima. Результаты вычислений в NetBeans сошлись с результатами в Maxima