Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Matr_peredat_funkc(n, m, k, phase_koord, control, vyhod, a, b, c, q);




9. вывести на экран терминала (в текстовый файл):

коэффициенты знаменателя передаточной функции системы – нулевая строка массива q[3][n+1],

коэффициенты числителя передаточной функции “фазовая координата/управление” – первая строка массива q[3][n+1],

коэффициенты числителя передаточной функции “выходная координата/управление” – вторая строка массива q[3][n+1],

Пример: линейный стационарный объект задан матричной системой уравнений:

dx/dt = ax(t) + bu(t);

y(t) = cx(t);

где

x(t) - вектор фазовых координат,

u(t) - вектор управлений,

y(t) - вектор измерений,

a = -2 -1 b = 1 0 c = 2 0

2 -5 0 -2 0 2,5

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

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

#include <stdio.h>

#include <math.h>

#include <conio.h>

void matr_peredat_funkc(int n, int m, int k, int phase_koord, int control, int vyhod, float a[n][n], float b[n][m], float c[k][n], float q[3][n+1]);

int main(int argc, char **argv)

{

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

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

int k; // количество выходных переменных (измерений);

// если уравнения измерений нет, то к=0

int phase_koord; //номер фазовой координаты

int control; //номер управления

int vyhod; //номер выходной переменной (измерения);

// если уравнения измерений нет, то vyhod=0

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 Kol-vo izmeren. k =");

scanf("%d", &k);

printf("\n");

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

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

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

// (при необходимости)

float q[3][n+1]; // матрица коэффициентов передаточной

// функции по убыванию степеней:

// первая строка - знаменателя передаточной функции,

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

// "фазовая координата/управление",

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

// "выходная переменная/управление",

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

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

{

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

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);

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

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

}

printf("\n");

if (k!=0) // есть матрица измерений

{

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

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

{

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

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

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

}

printf("\n");

}

printf("\n Nomer fasovoj koordinaty (ne bolee %d) phase_koord= ", n);

scanf("%d", &phase_koord);

printf("\n Nomer upravlenija (ne bolee %d) control= ", m);

scanf("%d", &control);

if (k!=0) // есть матрица измерений

{

printf("\n Nomer vyhodnoj koordinaty (ne bolee %d) vyhod= ", k);

scanf("%d", &vyhod);

}

Matr_peredat_funkc(n, m, k, phase_koord, control, vyhod, a, b, c, q);

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

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

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

printf("\n");

printf("\nKoeff. chislit. peredat. funkcii 'phase_koord / control':\n");

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

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

printf("\n");

printf("\nKoeff. chislit. peredat. funkcii 'vyhod / control':\n");

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

printf("%15.6e ", q[2][i]);

printf("\n");

c0=getch();

Return 0;

}

Результат решения задачи:

Таким образом, передаточная функция “2- я фазовая координата/1-е управление” имеет вид:

W(p) = 2/(p2 + 7p + 12)

передаточная функция “2- е измерение/1-е управление” имеет вид:

W(p) = (-5p – 10)/(p2 + 7p + 12)

 

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

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

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

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]);

2. ввести значение переменной n – количество фазовых координат,

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

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

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

a[n][n] – матрица динамики системы,

b[n][m] – матрица управления,

p[2][n] - матрица собственных значений исходной системы:

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

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

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

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

6. ввести массивы a[n][n], b[n][m] и p[2][n], притом комплексные собственные значения вводить парами, первым – с отрицательной мнимой частью.

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





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


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


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

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

Студент всегда отчаянный романтик! Хоть может сдать на двойку романтизм. © Эдуард А. Асадов
==> читать все изречения...

2431 - | 2176 -


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

Ген: 0.008 с.