Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Diskret_analog(n, m, h0, a, b, p, f, c);




8. вывести на экран терминала (в текстовый файл) матрицы f[n][n] и c[n][m].

Пример: определить дискретный аналог динамической системы:

dx1/dt = x2(t) – 0,5u1(t) + 0,2u2(t);

dx2/dt = x3(t) + u1(t) - u2(t);

dx3/dt = -2x1(t) – 3x2(t) – 3x3(t) - 0,1u1(t) + 5u2(t);

для интервала дискретности h0=0,1 c.

В этом случае n=3, m=2,

0 1 0 -0.5 0.2

a = 0 0 1 b = 1 -1

-2 -3 -3 -0.1 5

Собственные значения исходной системы:

p = -2 -0.5 0.5

0 -0.866 0.866

Головная программа:

#include <stdio.h>

#include <math.h>

#include <conio.h>

void diskret_analog(int n, int m, float h0, float a[n][n], float b[n][m], float p[2][n], float f[n][n], float c[n][m]);

int main(int argc, char **argv)

{

int n; // количество фазовых координат

int m; // количество управлений

float h0; // интервал дискретности

int i, j; // рабочие переменные

Char c0;

printf("\n Kol-vo fazov. koordinat n= ");

scanf("%d", &n);

printf("\n Kol-vo upravlen. m= ");

scanf("%d", &m);

printf("\n Interval diskretn. h0 =");

scanf("%f", &h0);

printf("\n");

float a[n][n]; // матрица динамики исходной системы

float b[n][m]; // матрица управления исходной системы

float p[2][n]; // матрица собственных значений

// исходнойсистемы:

// первая строка - действительные части,

// вторая строка - мнимые части,

// комплексные собств. значения

// вводить парами, первым –

// с отрицательной мнимой частью,

float f[n][n]; // фундаментальная матрица дискретного

// аналога для интервала дискретности h0

float c[n][m]; // матрица управления дискретного

// аналога для интервала дискретности h0

printf("\nVvedite matricu dinamiki postrochno (%d znashenij v stroke):\n", n);

for (i=0; i<n; i++)

{

printf("\n%d stroka:\n", i+1);

for (j=0; j<n; j++)

scanf("%f", &a[i][j]);

}

printf("\n");

printf("\nVvedite matricu upravlenija postrochno (%d znashenij v stroke):\n", m);

for (i=0; i<n; i++)

{

printf("\n%d stroka:\n", i+1);

for (j=0; j<m; j++)

scanf("%f", &b[i][j]);

}

printf("\n");

printf("\nVvedite dejstvit. chasti sobstv. znachenij (%d znashenij):\n", n);

for (i=0; i<n; i++)

scanf("%f", &p[0][i]);

printf("\n");

printf("\nVvedite mnimye chasti sobstv. znachenij (%d znashenij):\n", n);

for (i=0; i<n; i++)

scanf("%f", &p[1][i]);

printf("\n");

Diskret_analog(n, m, h0, a, b, p, f, c);

printf("\nFundament. matrica discretnogo analoga:\n");

for (i=0; i<n; i++)

{

for (j=0; j<n; j++)

printf("%15.6e ", f[i][j]);

printf("\n");

}

printf("\n");

printf("\nMatrica upravl. discretnogo analoga:\n");

for (i=0; i<n; i++)

{

for (j=0; j<m; j++)

printf("%15.6e ", c[i][j]);

printf("\n");

}

printf("\n");

c0=getch();

Return 0;

}

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

 

Определение дискретного аналога передаточной функции
методом Тастина

В головной программе необходимо:

1. описать прототип функции:

void tastin(int n, float h0, float w[2][n+1]);

2. ввести значение переменной n – степень полинома знаменателя,

3. ввести значение переменной h0 – интервал дискретности,

4. описать массивы:

w[2][n+1] – матрица коэффициентов исходной передаточной функции по возрастающим степеням:

первая строка – числитель,

вторая строка – знаменатель,

после вычислений – массив коэффициентов дискретной передаточной функции по возрастающим степеням,

5. ввести массив w [2][n+1]

6. обратиться к программе вычислений:

Tastin(n, h0, w)

7. вывести на экран терминала (в текстовый файл) матрицу w[2][n+1].

Пример: определить дискретный аналог передаточной функции:

W(p) = (0,5p + 1) / (6p3 + 11p2 + 6p + 1)

для интервала дискретности h0 = 0,5 c.

Головная программа:

#include <stdio.h>

#include <math.h>

#include <conio.h>

void tastin(int n, float h0, float w[2][n+1]);

int main(int argc, char **argv)

{

int n; // степень полинома знаменателя

float h0; // период дискретности

Int i;

Char c;

printf("\n stepen polinoma znamenat. n= ");

scanf("%d", &n);

printf("\nVvedite period diskretn. h0 =");

scanf("%f", &h0);

printf("\n");

float w[2][n+1]; //матрица коэффициентов исходной

// передаточной функции по возраст.

// степеням:

// первая строка - числителя,

// вторая строка - знаменателя,

// после вычислений - массив коэфф.

// дискретной передаточной функции

// по возраст. степеням

printf("\nVvedite koeff. chislitelja (%d znacheniy):\n", n+1);

for (i=0; i<n+1; i++)

scanf("%f", &w[0][i]);

printf("\nVvedite koeff. znamenatelja (%d znacheniy):\n", n+1);

for (i=0; i<n+1; i++)

scanf("%f", &w[1][i]);

printf("\n");

Tastin(n, h0, w);

printf("\nKoefficienty chislit. diskretn. peredat. funkcii:\n");

for (i=0; i<n+1; i++)

printf("%e ", w[0][i]);

printf("\n\n");

printf("\nKoefficienty znamenat. diskretn. peredat. funkcii:\n");

for (i=0; i<n+1; i++)

printf("%e ", w[1][i]);

printf("\n\n");

c=getch();

Return 0;

}

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

Таким образом, дискретный аналог исходной передаточной функции для интервала дискретности h0 = 0,5 имеет вид:

W(z)=(-1,7094×10-3 z-3 +1,7094×10-3 z-2 +8,547×10-3z-1 +5,1282×10-3z) / (-0,39487 z-3 + 1,6325 z-2 – 2,2239 z-1 + z)

 

Расчет выходного сигнала динамической системы,
заданной передаточной функцией

В головной программе необходимо:

1. описать прототип функции:





Поделиться с друзьями:


Дата добавления: 2017-03-11; Мы поможем в написании ваших работ!; просмотров: 305 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наука — это организованные знания, мудрость — это организованная жизнь. © Иммануил Кант
==> читать все изречения...

2281 - | 2079 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.