Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


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




Пример: найти численное решение дифференциального уравнения

d3x/dt3 = 2,5 d2x/dt2 + 5 dx/dt + 2x

на интервале от t0=0 c до t1=10 c с шагом h=0,02 при начальных условиях

x0 = 1, dx0 /dt = 0, d2x0/dt2 = 0.

Решение выводить на каждом пятом шаге интегрирования (101 точка вывода).

Вывести графики переменной x(t), ее первой и второй производной.

Представим исходной уравнение в форме Коши:

dx0/dt(t) = x1(t);

dx1/dt(t) = x2(t);

dx2/dt(t) = -2x0(t) – 5x1(t) - 2,5x2(t).

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

#include <stdio.h>

#include <math.h>

#include <conio.h>

void Runge_Kutt_4(int n, float h, float t0, float t1, int s1, float x[n], float out[][n+1], int *k);

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

int main(int argc, char **argv)

{

int n; // порядок системы уравнений

float h; // шаг интегрирования

float t0, t1; // начальное и конечное время

// интегрирования

int s1; // количество шагов на один вывод решения

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

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

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

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

// d:/user/out.txt

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

printf("\n Porjadok sistemy uravn. n=");

scanf("%d", &n);

float x[n]; // вектор начальных условий

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

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

// точек вывода: (t1-t0)/(h*s1) +1

// нулевой столбец - текущее время,

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

printf("\n Nachalnoe vremja integrir.: t0=");

scanf("%f", &t0);

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

scanf("%f", &t1);

printf("\n Shag integrir.: h=");

scanf("%f", &h);

printf("\n Kol-vo shagov na odin vyvod reshenija s1=");

scanf("%d", &s1);

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

scanf("%d", &amplituda);

printf("\n Vvedite nachaln. uslovija (%d znachenij):\n", n);

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

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

printf("\n");

Runge_Kutt_4(n, h, t0, t1, s1, x, out, &k);

printf("\nTochek vyvoda - %d\n", k);

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

printf("\n t x dx/dt d(dx/dt)/dt");

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

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

{

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

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

printf("\n");

}

printf("\n");

// обращение к функции вывода графиков

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

Return 0;

}

Описание правых частей системы уравнений:

void pr_chasti(float x[], float p[])

{

p[0]=x[1];

p[1]=x[2];

p[2]=-2.0*x[0]-5.0*x[1]-2.5*x[2];

}

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

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

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

| t | g r a p h i c s

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

| 0.00000 | 2 1*

| 0.10000 | 2 1*

| 0.20000 | 2 1 *

| 0.30000 | 2 1 *

| 0.40000 |2 1 *

| 0.50000 |2 1 *

| 0.60000 |2 1 *

| 0.70000 | 2 1 *

| 0.80000 | 2 1 *

| 0.90000 | 1 2 *

| 1.00000 | 1 2 *

| 1.10000 | 1 2 *

| 1.20000 |1 2 *

| 1.30000 |1 2 *

| 1.40000 |1 *2

| 1.50000 |1 * 2

| 1.60000 |1 * 2

| 1.70000 | 1 * 2

| 1.80000 | 1 * 2

| 1.90000 | 1 * 2

| 2.00000 | 1 * 2

| 2.10000 | 1 * 2

| 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 | * 1 2

| 3.30000 | * 1 2

| 3.40000 | * 12

| 3.50000 | * 21

| 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 | * 2 1

| 4.30000 | * 2 1

| 4.40001 | * 2 1

| 4.50001 | * 2 1

| 4.60001 | * 2 1

| 4.70001 | * 2 1

| 4.80001 | * 2 1

| 4.90002 | * 2 1

| 5.00002 | * 2 1

| 5.10002 | * 2 1

| 5.20002 | * 2 1

| 5.30003 | * 2 1

| 5.40003 | * 2 1

| 5.50003 | * 2 1

| 5.60003 | * 2 1

| 5.70004 | * 2 1

| 5.80004 | * 2 1

| 5.90004 | * 2 1

| 6.00004 | * 2 1

| 6.10004 | * 2 1

| 6.20005 | * 2 1

| 6.30005 | * 2 1

| 6.40005 | * 2 1

| 6.50005 | * 2 1

| 6.60006 | * 2 1

| 6.70006 | * 2 1

| 6.80006 | * 2 1

| 6.90006 |* 2 1

| 7.00007 |* 2 1

| 7.10007 |* 2 1

| 7.20007 |* 2 1

| 7.30007 |* 2 1

| 7.40007 |* 2 1

| 7.50008 |* 2 1

| 7.60008 |* 2 1

| 7.70008 |* 2 1

| 7.80008 |* 2 1

| 7.90009 |* 2 1

| 8.00009 |* 2 1

| 8.10009 |* 2 1

| 8.20009 |* 2 1

| 8.30009 |* 2 1

| 8.40010 |* 2 1

| 8.50010 |* 2 1

| 8.60010 |* 2 1

| 8.70010 |* 2 1

| 8.80011 |* 2 1

| 8.90011 |* 2 1

| 9.00011 |* 2 1

| 9.10011 |* 2 1

| 9.20012 |* 2 1

| 9.30012 |* 2 1

| 9.40012 |* 2 1

| 9.50012 |* 2 1

| 9.60012 |* 2 1

| 9.70013 |* 2 1

| 9.80013 |* 2 1

| 9.90013 |* 2 1

| 10.00013 |* 2

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

* ” выходная переменная x(t),

1 ” ее первая производная,

2 ” ее вторая производная.

 

Вывод графиков функций

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

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

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

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

3. ввести значение переменных x0, x1 – начальное и конечное значение аргумента,

4. ввести значение переменной h – шаг вывода графиков,

5. описать массив out[k][n+1] – выходной массив:

количество строк – количество точек вывода k=(x1- x0)/h + 1,

нулевой столбец – значение аргумента,

остальные столбцы – исходные данные для построения графиков,

6. ввести значение переменой amplituda - амплитуда графиков функций в позициях (в текстовом файле),

7. ввести строку path[30] - полный путь к текстовому файлу для вывода данных, например, d:/user/out.txt,

8. обратиться к программе вывода графиков:





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


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


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

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

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

2514 - | 2363 -


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

Ген: 0.011 с.