Алексей Юрьевич Виноградов к.ф.-м.н.
1. Введение.
На примере системы дифференциальных уравнений цилиндрической оболочки ракеты – системы обыкновенных дифференциальных уравнений 8-го порядка (после разделения частных производных методом Фурье).
Система линейных обыкновенных дифференциальных уравнений имеет вид:
где
Краевые условия имеют вид:
где
В
случае, когда система дифференциальных уравнений имеет матрицу с постоянными
коэффициентами
где
Матричная экспонента ещё может называться матрицей Коши или матрициантом и может обозначаться в виде:
Тогда решение задачи Коши может быть записано в виде:
где
Вместо формулы для вычисления вектора частного решения неоднородной системы дифференциальных уравнений в виде [1]:
предлагается использовать следующую формулу для каждого отдельного участка интервала интегрирования:
Вычисление вектора частного решения неоднородной системы дифференциальных уравнений производиться при помощи представления матрицы Коши под знаком интеграла в виде ряда и интегрирования этого ряда поэлементно:
Эта
формула справедлива для случая системы дифференциальных уравнений с постоянной
матрицей коэффициентов
Вектор
Для
случая дифференциальных уравнений с переменными коэффициентами в приведенной
выше формуле для каждого участка может использоваться осредненная матрица
Рассмотрим
вариант, когда шаги интервала интегрирования выбираются достаточно малыми, что
позволяет рассматривать вектор
Известно,
что при T=(at+b) имеем
В
нашем случае имеем
Тогда
получаем
Тогда
получаем ряд для вычисления вектора частного решения неоднородной системы
дифференциальных уравнений на малом участке
Если
участок
Имеем
Также имеем формулу для отдельного подучастка:
Можем записать:
Подставим
Сравним полученное выражение с формулой:
и получим, очевидно, что:
и для частного вектора получаем формулу:
То
есть вектора подучастков
Аналогично
запишем
Сравнив полученное выражение с формулой:
очевидно, получаем, что:
и вместе с этим получаем формулу для частного вектора:
То
есть именно так и вычисляется частный вектор – вектор частного решения неоднородной
системы дифференциальных уравнений, то есть так вычисляется, например, частный
вектор
2. Метод решения жестких краевых задач без ортонормирования – метод сопряжения участков, выраженных матричными экспонентами.
Разделим интервал интегрирования краевой задачи, например, на 3 участка. Будем иметь точки (узлы), включая края:
Имеем краевые условия в виде:
Можем записать матричные уравнения сопряжения участков:
Это мы можем переписать в виде, более удобном для нас далее:
где
Тогда в объединенном матричном виде получаем систему линейных алгебраических уравнений в следующей форме:
Эта система решается методом Гаусса с выделением главного элемента.
В точках, расположенных между узлами, решение находиться при помощи решения задач Коши с начальными условиями в i-ом узле:
Применять ортонормирование для краевых задач для жестких обыкновенных дифференциальных уравнений оказывается не надо.
3. Вычислительные эксперименты.
Вычислительные эксперименты проводились в сравнении с методом переноса краевых условий Алексея Юрьевича Виноградова. В этом методе используется построчное ортонормирование.
Без ортонормирования в методе переноса краевых условий А.Ю.Виноградова успешно решается задача, например, нагружения цилиндрической оболочки, которая консольно заделана по правому краю и нагружена по левому краю силой, равномерно распределенной по дуге окружности, с отношением длинны к радиусу L/R=2 и с отношением радиуса к толщине R/h=100. Для отношения R/h=200 задача без ортонормирования в методе переноса краевых условий уже не решается, так как выдаются ошибки из-за неустойчивости счета. С применением же ортонормирования в методе переноса краевых условий решаются успешно задачи и для параметров, например, R/h=300, R/h=500, R/h=1000.
Новый предлагаемый здесь метод позволяет решать все вышеуказанные тестовые задачи вовсе без применения операций ортонормирования, что значительно упрощает его программирование.
Для тестовых расчетов задач с вышеуказанными параметрами новым предлагаемым методом интервал интегрирования разделялся на 10 участков, а между узлами, как и сказано выше, решение находилось как решение задачи Коши. Для решения задач удерживалось 50 гармоник рядов Фурье, так как результат при 50 гармониках уже не отличался от случая удержания 100 гармоник.
Скорость же расчета тестовых задач новым предлагаемым методом не меньше, чем методом переноса краевых условий, так как оба метода в тестовых задачах при удержании 50 гармоник рядов Фурье выдавали готовое решение мгновенно после запуска программы на выполнение (на ноутбуке ASUS M51V CPU Duo T5800). В тоже время программирование нового предложенного здесь метода существенно проще, так как нет необходимости программировать процедуры ортонормирования.
ПРОГРАММА НА С++:
// sopryazhenie.cpp: главный файл проекта.
//Решение краевой задачи - цилиндрической оболочки.
//Интервал интегрирования разбит на 10 сопрягаемых участков: левый край - точка 0 и правый край - точка 10
//БЕЗ ОРТОНОРМИРОВАНИЯ
#include "stdafx.h"
#include
#include
using namespace std;
//Умножение матрицы A на вектор b и получаем rezult.
void mat_on_vect(double A[8][8], double b[8], double rezult[8]){
for(int i=0;i<8;i++){
rezult[i]=0.0;
for(int k=0;k<8;k++){
rezult[i]+=A[i][k]*b[k];
}
}
}
//Вычисление матричной экспоненты EXP=exp(A*delta_x)
void exponent(double A[8][8], double delta_x, double EXP[8][8]) {
//n - количество членов ряда в экспоненте, m - счетчик членов ряда (m<=n)
int n=100, m;
double E[8][8]={0}, TMP1[8][8], TMP2[8][8];
int i, j, k;
//E - единичная матрица - первый член ряда экспоненты
E[0][0]=1.0; E[1][1]=1.0; E[2][2]=1.0; E[3][3]=1.0;
E[4][4]=1.0; E[5][5]=1.0; E[6][6]=1.0; E[7][7]=1.0;
//первоначальное заполнение вспомогательного массива TMP1 - предыдущего члена ряда для следующего перемножения
//и первоначальное заполнение экспоненты первым членом ряда
for(i=0;i<8;i++) {
for(j=0;j<8;j++) {
TMP1[i][j]=E[i][j];
EXP[i][j]=E[i][j];
}
}
//ряд вычисления экспоненты EXP, начиная со 2-го члена ряда (m=2;m<=n)
for(m=2;m<=n;m++) {
for(i=0;i<8;i++) {
for(j=0;j<8;j++) {
TMP2[i][j]=0;
for(k=0;k<8;k++) {
//TMP2[i][j]+=TMP1[i][k]*A[k][j]*delta_x/(m-1);
TMP2[i][j]+=TMP1[i][k]*A[k][j];
}
TMP2[i][j]*=delta_x;//вынесено за цикл произведения строки на столбец
TMP2[i][j]/=(m-1);//вынесено за цикл произведения строки на столбец
EXP[i][j]+=TMP2[i][j];
}
}
//заполнение вспомогательного массива TMP1 для вычисления следующего члена ряда - TMP2 в следующем шаге цикла по m
if (m for(i=0;i<8;i++) { for(j=0;j<8;j++) { TMP1[i][j]=TMP2[i][j]; } } } } } //Вычисление
матрицы MAT_ROW в виде матричного ряда для последующего использования //при
вычислении вектора partial_vector - вектора частного решения неоднородной
системы ОДУ на шаге delta_x void
mat_row_for_partial_vector(double A[8][8], double delta_x, double
MAT_ROW[8][8]) { //n
- количество членов ряда в MAT_ROW, m - счетчик членов ряда (m<=n) int n=100, m; double E[8][8]={0}, TMP1[8][8],
TMP2[8][8]; int
i, j, k; //E
- единичная матрица - первый член ряда MAT_ROW E[0][0]=1.0;
E[1][1]=1.0; E[2][2]=1.0; E[3][3]=1.0; E[4][4]=1.0;
E[5][5]=1.0; E[6][6]=1.0; E[7][7]=1.0; //первоначальное
заполнение вспомогательного массива TMP1 - предыдущего члена ряда для
следующего перемножения //и
первоначальное заполнение MAT_ROW первым членом ряда for(i=0;i<8;i++) { for(j=0;j<8;j++) { TMP1[i][j]=E[i][j]; MAT_ROW[i][j]=E[i][j]; } } //ряд
вычисления MAT_ROW, начиная со 2-го члена ряда (m=2;m<=n) for(m=2;m<=n;m++) { for(i=0;i<8;i++) { for(j=0;j<8;j++) { TMP2[i][j]=0; for(k=0;k<8;k++) { TMP2[i][j]+=TMP1[i][k]*A[k][j]; } TMP2[i][j]*=delta_x; TMP2[i][j]/=m; MAT_ROW[i][j]+=TMP2[i][j]; } } //заполнение
вспомогательного массива TMP1 для вычисления следующего члена ряда - TMP2 в
следующем шаге цикла по m if (m for(i=0;i<8;i++) { for(j=0;j<8;j++) { TMP1[i][j]=TMP2[i][j]; } } } } } //Задание
вектора внешних воздействий в системе ОДУ - вектора POWER:
Y'(x)=A*Y(x)+POWER(x): void
power_vector_for_partial_vector(double x, double POWER[8]){ POWER[0]=0.0; POWER[1]=0.0; POWER[2]=0.0; POWER[3]=0.0; POWER[4]=0.0; POWER[5]=0.0; POWER[6]=0.0; POWER[7]=0.0; } //Вычисление
vector - НУЛЕВОГО (частный случай) вектора частного решения //неоднородной
системы дифференциальных уравнений на рассматриваемом участке: void partial_vector(double
vector[8]){ for(int i=0;i<8;i++){ vector[i]=0.0; } } //Вычисление
vector - вектора частного решения неоднородной системы дифференциальных
уравнений на рассматриваемом участке delta_x: void partial_vector_real(double
expo_[8][8], double mat_row[8][8], double x_, double delta_x, double
vector[8]){ double
POWER_[8]={0};//Вектор внешней нагрузки на оболочку double REZ[8]={0}; double REZ_2[8]={0}; power_vector_for_partial_vector(x_,
POWER_);//Расчитываем
POWER_ при координате x_ mat_on_vect(mat_row, POWER_, REZ);//Умножение матрицы mat_row на вектор POWER_ и получаем вектор REZ mat_on_vect(expo_,
REZ, REZ_2);//Умножение матрицы expo_ на вектор REZ и получаем вектор REZ_2 for(int i=0;i<8;i++){ vector[i]=REZ_2[i]*delta_x; } } //Решение
СЛАУ размерности 88 методом Гаусса с выделением главного элемента int GAUSS(double AA[8*11][8*11],
double bb[8*11], double x[8*11]){ double A[8*11][8*11]; double b[8*11]; for(int i=0;i<(8*11);i++){ b[i]=bb[i];//Работать
будем с вектором правых частей b, чтобы исходный вектор bb не изменялся при
выходе из подпрограммы for(int
j=0;j<(8*11);j++){ A[i][j]=AA[i][j];//Работать
будем с матрицей А, чтобы исходная матрица АА не менялась при выходе из
подпрограммы } } int
e;//номер строки, где обнаруживается главный (максимальный) коэффициент в
столбце jj double
s, t, main;//Вспомогательная величина for(int
jj=0;jj<((8*11)-1);jj++){//Цикл по столбцам jj преобразования матрицы А в
верхнетреугольную e=-1; s=0.0; main=A[jj][jj]; for(int
i=jj;i<(8*11);i++){//Находится номер е строки, где лежит главный
(максимальный) элемент в столбце jj и делается взаимозамена строк if
((A[i][jj]*A[i][jj])>s) {//Вместо перемножения (удаляется возможный знак
минуса) можно было бы использовать функцию по модулю abs() e=i; s=A[i][jj]*A[i][jj]; } } if (e<0) { cout<<"Mistake
"< } if
(e>jj) {//Если главный элемент не в строке с номером jj. а в строке с
номером е main=A[e][jj]; for(int
j=0;j<(8*11);j++){//Взаимная замена двух строк - с номерами e и jj t=A[jj][j]; A[jj][j]=A[e][j];
A[e][j]=t; } t=b[jj]; b[jj]=b[e]; b[e]=t; } for(int
i=(jj+1);i<(8*11);i++){//Приведение к верхнетреугольной матрице for(int j=(jj+1);j<(8*11);j++){ A[i][j]=A[i][j]-(1/main)*A[jj][j]*A[i][jj];//Перерасчет коэффициентов строки
i>(jj+1) } b[i]=b[i]-(1/main)*b[jj]*A[i][jj]; A[i][jj]=0.0;//Обнуляемые
элементы столбца под диагональным элементом матрицы А } }//Цикл
по столбцам jj преобразования матрицы А в верхнетреугольную x[(8*11)-1]=b[(8*11)-1]/A[(8*11)-1][(8*11)-1];//Первоначальное
определение последнего элемента искомого решения х (87-го) for(int
i=((8*11)-2);i>=0;i--){//Вычисление елементов решения x[i] от 86-го до 0-го t=0; for(int j=1;j<((8*11)-i);j++){ t=t+A[i][i+j]*x[i+j]; } x[i]=(1/A[i][i])*(b[i]-t); } return
0; } int
main() { int
nn;//Номер гармоники, начиная с 1-й (без нулевой) int
nn_last=50;//Номер последней гармоники double
Moment[100+1]={0};//Массив физического параметра (момента), что рассчитывается
в каждой точке между краями double
step=0.05; //step=(L/R)/100 - величина шага расчета оболочки - шага интервала
интегрирования (должна быть больше нуля, т.е. положительная) double h_div_R;//Величина h/R h_div_R=1.0/100; double c2; c2=h_div_R*h_div_R/12;//Величина h*h/R/R/12 double nju; nju=0.3; double gamma; gamma=3.14159265359/4;//Угол
распределения силы по левому краю //распечатка
в файлы: FILE
*fp; // Open for write if( (fp = fopen(
"C:/test.txt", "w" )) == NULL ) // C4996 printf( "The file 'C:/test.txt'
was not opened\n" ); else printf( "The file 'C:/test.txt'
was opened\n" ); for(nn=1;nn<=nn_last;nn++){
//ЦИКЛ ПО ГАРМОНИКАМ, НАЧИНАЯ С 1-ОЙ ГАРМОНИКИ (БЕЗ НУЛЕВОЙ ГАРМОНИКИ) double
x=0.0;//Координата от левого края - нужна для случая неоднородной системы ОДУ
для вычисления частного вектора FF double
expo_from_minus_step[8][8]={0};//Матрица для расположения в ней экспоненты на
шаге типа (0-x1) double
expo_from_plus_step[8][8]={0};//Матрица для расположения в ней экспоненты на шаге
типа (x1-0) double
mat_row_for_minus_expo[8][8]={0};//вспомогательная матрица для расчета частного
вектора при движении на шаге типа (0-x1) double
mat_row_for_plus_expo[8][8]={0};//вспомогательная матрица для расчета частного
вектора при движении на шаге типа (x1-0) double
U[4][8]={0};//Матрица краевых условий левого края размерности 4х8 double
u_[4]={0};//Вектор размерности 4 внешнего воздействия для краевых условий
левого края double
V[4][8]={0};//Матрица краевых условий правого края размерности 4х8 double
v_[4]={0};//Вектор размерности 4 внешнего воздействия для краевых условий
правого края double
Y[100+1][8]={0};//Массив векторов-решений соответствующих СЛАУ (в каждой точке
интервала между краями): MATRIXS*Y=VECTORS double
A[8][8]={0};//Матрица коэффициентов системы ОДУ double
FF[8]={0};//Вектор частного решения неоднородной ОДУ на участке интервала
интегрирования double
Y_many[8*11]={0};// составной вектор из векторов Y(xi) в 11-ти точках с точки 0
(левый край Y(0)) до точки 10 (правый край Y(x10)) double
MATRIX_many[8*11][8*11]={0};//матрица СЛАУ double
B_many[8*11]={0};// вектор правых частей СЛАУ: MATRIX_many*Y_many=B_many double
Y_vspom[8]={0};//вспомогательный вектор double
Y_rezult[8]={0};//вспомогательный вектор double
nn2, nn3, nn4, nn5, nn6, nn7, nn8;//Возведенный в соответствующие степени номер
гармоники nn nn2=nn*nn;
nn3=nn2*nn; nn4=nn2*nn2; nn5=nn4*nn; nn6=nn4*nn2; nn7=nn6*nn; nn8=nn4*nn4; //Заполнение
ненулевых элементов матрицы А коэффициентов системы ОДУ A[0][1]=1.0; A[1][0]=(1-nju)/2*nn2;
A[1][3]=-(1+nju)/2*nn; A[1][5]=-nju; A[2][3]=1.0; A[3][1]=(1+nju)/(1-nju)*nn;
A[3][2]=2*nn2/(1-nju); A[3][4]=2*nn/(1-nju); A[4][5]=1.0; A[5][6]=1.0; A[6][7]=1.0; A[7][1]=-nju/c2; A[7][2]=-nn/c2;
A[7][4]=-(nn4+1/c2); A[7][6]=2*nn2; //Здесь
надо первоначально заполнить ненулевыми значениями матрицы и вектора краевых
условий U*Y[0]=u_ (слева) и V*Y[100]=v_ (справа) : U[0][1]=1.0;
U[0][2]=nn*nju; U[0][4]=nju; u_[0]=0.0;//Сила T1 на левом крае равна нулю U[1][0]=-(1-nju)/2*nn;
U[1][3]=(1-nju)/2; U[1][5]=(1-nju)*nn*c2; u_[1]=0.0;//Сила S* на левом краю
равна нулю U[2][4]=-nju*nn2;
U[2][6]=1.0; u_[2]=0;//Момент M1 на левом краю равен нулю U[3][5]=(2-nju)*nn2;
U[3][7]=-1.0; u_[3]=-sin(nn*gamma)/(nn*gamma);//Сила
Q1* на левом крае распределена на угол - gamma +gamma V[0][0]=1.0;
v_[0]=0.0;//Перемещение u на правом крае равно нулю V[1][2]=1.0;
v_[1]=0.0;//Перемещение v на правом крае равно нулю V[2][4]=1.0;
v_[2]=0.0;//Перемещение w на правом крае равно нулю V[3][5]=1.0;
v_[3]=0.0;//Угол поворота на правом крае равен нулю //Здесь
заканчивается первоначальное заполнение U*Y[0]=u_ и V*Y[100]=v_ exponent(A,
(-step*10), expo_from_minus_step);//Шаг отрицательный (значение шага меньше
нуля из-за направления вычисления матричной экспоненты) //x=0.0;//начальное
значение координаты - для расчета частного вектора //mat_row_for_partial_vector(A,
step, mat_row_for_minus_expo); //Заполнение
матрицы коэффициентов СЛАУ MATRIX_many for(int i=0;i<4;i++){ for(int j=0;j<8;j++){ MATRIX_many[i][j]=U[i][j]; MATRIX_many[8*11-4+i][8*11-8+j]=V[i][j]; } B_many[i]=u_[i]; B_many[8*11-4+i]=v_[i]; } for(int
kk=0;kk<(11-1);kk++){//(11-1) единичных матриц и матриц EXPO надо записать в
MATRIX_many for(int
i=0;i<8;i++){ MATRIX_many[i+4+kk*8][i+kk*8]=1.0;//заполнение
единичными матрицами for(int
j=0;j<8;j++){ MATRIX_many[i+4+kk*8][j+8+kk*8]=-expo_from_minus_step[i][j];//заполнение
матричными экспонентами } } } //Решение
систем линейных алгебраических уравнений GAUSS(MATRIX_many,
B_many, Y_many); //Вычисление
векторов состояния в 101 точке - левая точка 0 и правая точка 100 exponent(A, step,
expo_from_plus_step); for(int
i=0;i<11;i++){//заполнение промежуточных точек во всех 10-ти интервалах
(всего получим точки от 0 до 100) между 11 узлами for(int
j=0;j<8;j++){ Y[0+i*10][j]=Y_many[j+i*8];//в
11-ти узлах векторы беруться из решения СЛАУ - из Y_many } } for(int
i=0;i<10;i++){//заполнение промежуточных точек в 10-ти интервалах for(int
j=0;j<8;j++){ Y_vspom[j]=Y[0+i*10][j];//начальный
вектор для i-го участка, нулевая точка, точка старта i-го участка } mat_on_vect(expo_from_plus_step,
Y_vspom, Y_rezult); for(int j=0;j<8;j++){ Y[0+i*10+1][j]=Y_rezult[j];//заполнение 1-ой точки интервала Y_vspom[j]=Y_rezult[j];//для
следующего шага } mat_on_vect(expo_from_plus_step,
Y_vspom, Y_rezult); for(int j=0;j<8;j++){ Y[0+i*10+2][j]=Y_rezult[j];//заполнение 2-ой точки интервала Y_vspom[j]=Y_rezult[j];//для
следующего шага } mat_on_vect(expo_from_plus_step,
Y_vspom, Y_rezult); for(int j=0;j<8;j++){ Y[0+i*10+3][j]=Y_rezult[j];//заполнение 3-ой точки интервала Y_vspom[j]=Y_rezult[j];//для
следующего шага } mat_on_vect(expo_from_plus_step,
Y_vspom, Y_rezult); for(int j=0;j<8;j++){ Y[0+i*10+4][j]=Y_rezult[j];//заполнение 4-ой точки интервала Y_vspom[j]=Y_rezult[j];//для
следующего шага } mat_on_vect(expo_from_plus_step,
Y_vspom, Y_rezult); for(int j=0;j<8;j++){ Y[0+i*10+5][j]=Y_rezult[j];//заполнение 5-ой точки интервала Y_vspom[j]=Y_rezult[j];//для
следующего шага } mat_on_vect(expo_from_plus_step,
Y_vspom, Y_rezult); for(int j=0;j<8;j++){ Y[0+i*10+6][j]=Y_rezult[j];//заполнение 6-ой точки интервала Y_vspom[j]=Y_rezult[j];//для
следующего шага } mat_on_vect(expo_from_plus_step,
Y_vspom, Y_rezult); for(int j=0;j<8;j++){ Y[0+i*10+7][j]=Y_rezult[j];//заполнение 7-ой точки интервала Y_vspom[j]=Y_rezult[j];//для
следующего шага } mat_on_vect(expo_from_plus_step,
Y_vspom, Y_rezult); for(int j=0;j<8;j++){ Y[0+i*10+8][j]=Y_rezult[j];//заполнение 8-ой точки интервала Y_vspom[j]=Y_rezult[j];//для
следующего шага } mat_on_vect(expo_from_plus_step,
Y_vspom, Y_rezult); for(int j=0;j<8;j++){ Y[0+i*10+9][j]=Y_rezult[j];//заполнение 9-ой точки интервала Y_vspom[j]=Y_rezult[j];//для
следующего шага } } //Вычисление
момента во всех точках между краями for(int ii=0;ii<=100;ii++){ Moment[ii]+=Y[ii][4]*(-nju*nn2)+Y[ii][6]*1.0;//Момент
M1 в точке [ii] //U[2][4]=-nju*nn2;
U[2][6]=1.0; u_[2]=0;//Момент M1 } }//ЦИКЛ
ПО ГАРМОНИКАМ ЗДЕСЬ ЗАКАНЧИВАЕТСЯ for(int
ii=0;ii<=100;ii++){ fprintf(fp, "%f\n",
Moment[ii]); } fclose(fp); printf( "PRESS any key to
continue...\n" ); _getch(); return
0; } Алексей
Юрьевич Виноградов Кандидат
физико-математических наук (1996 года защиты) Дата
рождения: 12 апреля 1970 (а то в интернете много моих полных тезок) Мои
сайты по методам решения краевых задач в интернете: www.AlexeiVinogradov.narod.ru
www.VinogradovAlexei.narod.ru www.Vinogradov-Alexei.narod.ru
www.Vinogradov-Math.narod.ru Список литературы Для
подготовки данной работы были использованы материалы с сайта http://referat.ru/
Дата добавления: 02.05.2012
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |
Реферат | Лесная таксация |
Реферат | Лесоразведение |
Реферат | Лекарственные растения при заболеваниях мочевыделительной системы |
Реферат | Н. Г. Гарин-Михайловский. Гимназисты |
Реферат | Чарльз Диккенс. Домби и сын |
Реферат | История развития и проблемы гостиничного бизнеса в России |
Реферат | «Зуки [з], [з,], буквы з з» |
Реферат | Местные породы скота |
Реферат | Кино как феномен культуры XX века |
Реферат | Конкурс 1401-го года |
Реферат | Россия в ВТО. Перспективы развития отношений |
Реферат | Определение горизонтальной составляющей магнитного поля земли. |
Реферат | Лесная таксация и лесоустройство |
Реферат | Механизация лесовосстановительных работ |
Реферат | Механизация лесокультурных работ |