Категории:

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

Graphics(n, k, amplituda, path, out);

Пример: переключательная функция

аппроксимируется рядом Фурье вида:

f(x) = 4/(sin(x) + sin(3x)/3 + sin(5x)/5 + sin(7x)/7 + …)

 

Вывести графики первой гармоники y=sin(x) и аппроксимирующего ряда Фурье f(x).

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

#include <stdio.h>

#include <math.h>

#include <conio.h>

void graphics(int n, int k, int amplituda, char path[], float out[][n+1]);

int main(int argc, char **argv)

{

int n;// количество графиков

float h;// шаг вывода

float x0, x1;// начальное и конечное значения аргумента

int k;// количество точек вывода

float x;// аргумент

Float y, f;

int amplituda;// амплитуда графиков функций в позициях

char path[30]="E:/User/graphics.txt";// полный путь

// к текстовому файлу для вывода данных, например,

// d:/user/out.txt

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

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

scanf("%d", &n);

printf("\n Nachalnoe znach. argumenta x0=");

scanf("%f", &x0);

printf("\n Konechnoe vremja integrir.: x1=");

scanf("%f", &x1);

printf("\n Shag vyvoda h=");

scanf("%f", &h);

printf("\n Max amplituda grafikov amplituda=");

scanf("%d", &amplituda);

k=(int)((x1-x0)/h + 1);

float out[k][n+1];// матрица выходных данных:

// количество строк –

// количество точек вывода: (x1-x0)/h +1

// нулевой столбец - аргумент,

// остальные n столбцов - данные для вывода n графиков

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

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

out[i][j]=0.0;

j1=-1;

for (x=x0; x<=x1; x+=h)

{

y=sin(x);

f=4.0/M_PI*(y + sin(3.0*x)/3.0 + sin(5.0*x)/5.0 + sin(7.0*x)/7.0 + sin(9.0*x)/9.0);

j1++;

out[j1][0]=x;

out[j1][1]=y;

out[j1][2]=f;

}

printf("\n-------------------------------");

printf("\n x sin(x) f(x)");

printf("\n-------------------------------\n");

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

{

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

printf ("%10.5f", out[i][j]);

printf("\n");

}

printf("\n");

Graphics(n, k, amplituda, path, out);

Return 0;

}

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

Результаты, сохраненные в выходном файле:

------------------------------------------------------------------------------------------

| x | g r a p h i c s

------------------------------------------------------------------------------------------

| 0.00000 | 21

| 0.10000 | 1 2

| 0.20000 | 1 2

| 0.30000 | 1 2

| 0.40000 | 1 2

| 0.50000 | 1 2

| 0.60000 | 1 2

| 0.70000 | 1 2

| 0.80000 | 1 2

| 0.90000 | 1 2

| 1.00000 | 1 2

| 1.10000 | 2 1

| 1.20000 | 2 1

| 1.30000 | 2 1

| 1.40000 | 2 1

| 1.50000 | 2 1

| 1.60000 | 2 1

| 1.70000 | 2 1

| 1.80000 | 2 1

| 1.90000 | 2 1

| 2.00000 | 2 1

| 2.10000 | 12

| 2.20000 | 1 2

| 2.30000 | 1 2

| 2.40000 | 1 2

| 2.50000 | 1 2

| 2.60000 | 1 2

| 2.70000 | 1 2

| 2.80000 | 1 2

| 2.90000 | 1 2

| 3.00000 | 1 2

| 3.10000 | 1 2

| 3.20000 | 2 1

| 3.30000 | 2 1

| 3.40000 |2 1

| 3.50000 |2 1

| 3.60000 | 2 1

| 3.70000 | 2 1

| 3.80000 | 2 1

| 3.90000 | 2 1

| 4.00000 | 2 1

| 4.10000 | 2 1

| 4.20000 | 21

| 4.30000 | 1 2

| 4.40000 |1 2

| 4.50000 |1 2

| 4.60000 |1 2

| 4.70000 |1 2

| 4.80000 |1 2

| 4.90000 |1 2

| 5.00000 |1 2

| 5.10000 | 1 2

| 5.20000 | 12

| 5.30000 | 2 1

| 5.40000 | 2 1

| 5.50000 | 2 1

| 5.60000 | 2 1

| 5.70000 | 2 1

| 5.80000 | 2 1

| 5.90000 |2 1

| 6.00000 |2 1

| 6.10000 | 2 1

| 6.20000 | 2 1

| 6.30000 | 1 2

Символы, используемые для вывода графиков:

“1” первая гармоника y = sin(x),

“2” сумма ряда Фурье – аппроксимация переключательной функции.

 

Расчет матричной передаточной функции динамической системы
по уравнениям состояния

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

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

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

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

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

4. ввести значение переменной k –количество выходных переменных
( измерений); если уравнения измерений нет, то k=0,

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

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

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

с[k][n] – матрица измерений (при необходимости),

q[3][n+1]-матрица коэффициентов передаточной функции
по убыванию степеней:

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

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

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

6. ввести массивы a[n][n], b[n][m]ис[k][n](при необходимости),

7. ввести значения переменных:

phase_koord - номер фазовой координаты,

control - номер управления,

vyhod - номер выходной координаты (измерения) – при необходимости,

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