Студопедия Главная Случайная страница Обратная связь

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

Задание №2 Решение систем обыкновенных дифференциальных уравнений





#include <stdio.h>

#include <math.h>

const int n = 2; // укажите количество уравнений в вашем варианте

 

double f1 (double y[], double time) {

return y[1]; // введите первую правую часть

}

double f2 (double y[], double time) {

return (1.0-y[0]*y[0])*y[1]-y[0]; // введите вторую правую часть

}

//double f3 (double x[], double time) {

// return; // введите третью правую часть

//}

 

double (* p[n]) (double [], double);

 

void main () {

const int m = 4;

FILE * fil;

double y[n] = {2.0,0.0 }; // укажите начальные значения параметров

p[0] = f1; p[1] = f2; //p[2] = f3;

double t = 0.0, tmax = 0.1, tau = 0.01;

double r[m][n], yy[n];

int i;

fopen_s (&fil, "zadanie2.dat", "w");

 

// Метод Эйлера

printf (" Metod Ejler "); fprintf (fil, " Метод Эйлера ");

t = 0.0; y[0] =2.0; y[1] = 0.0; // y[2] = 0.0; // укажите начальные значения параметров

printf ("time = %1.2f\n ", t); fprintf (fil, "time = %1.2f\n ", t);

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

printf ("y[%d] = %2.8f ", i, y[i]); fprintf (fil, "y[%d] = %2.8f ", i, y[i]);

}

printf ("\n"); fprintf (fil, "\n");

do {

for (i=0; i<n; i++) yy[i] = y[i] + tau*(p[i](y,t));

for (i=0; i<n; i++) y[i] = yy[i];

t += tau;

printf ("time = %1.2f\n ", t); fprintf (fil, "time = %1.2f\n ", t);

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

printf ("y[%d] = %2.8f ", i, y[i]); fprintf (fil, "y[%d] = %2.8f ", i, y[i]);

}

printf ("\n"); fprintf (fil, "\n");

} while (t <= tmax);

// Метод Рунге-Кутта 2

printf ("\n Metod Runge-Kutta 2 "); fprintf (fil, "\n Метод Рунге-Кутты 2 ");

t = 0.0; y[0] = 2.0; y[1] =0.0; //y[2] = 0.0; // укажите начальные значения параметров

double ff[n];

printf ("time = %1.2f\n ", t); fprintf (fil, "time = %1.2f\n ", t);

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

printf ("y[%d] = %2.8f ", i, y[i]); fprintf (fil, "y[%d] = %2.8f ", i, y[i]);

}

printf ("\n"); fprintf (fil, "\n");

do {

for (i=0; i<n; i++) yy[i] = y[i]+0.5*tau*(p[i](y,t));

for (i=0; i<n; i++) ff[i] = (p[i](yy,t+tau*0.5));

for (i=0; i<n; i++) y[i] += tau*ff[i];

t += tau;

printf ("time = %1.2f\n ", t); fprintf (fil, "time = %1.2f\n ", t);

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

printf ("y[%d] = %2.8f ", i, y[i]); fprintf (fil, "y[%d] = %2.8f ", i, y[i]);

}

printf ("\n"); fprintf (fil, "\n");

} while (t <= tmax);

// Метод Рунге-Кутта 4

printf ("\n Metod Runge-Kutta 4 "); fprintf (fil, "\n Метод Рунге-Кутты 4 ");

t = 0.0; y[0] =2.0; y[1] =0.0; //y[2] = 0.0; // укажите начальные значения параметров

printf ("time = %1.2f\n ", t); fprintf (fil, "time = %1.2f\n ", t);

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

printf ("y[%d] = %2.8f ", i, y[i]); fprintf (fil, "y[%d] = %2.8f ", i, y[i]);

}

printf ("\n"); fprintf (fil, "\n");

do {

for (i=0; i<n; i++) r[0][i] = tau*(p[i](y,t));

for (i=0; i<n; i++) yy[i] = y[i]+0.5*r[0][i];

for (i=0; i<n; i++) r[1][i] = tau*(p[i](yy,t+0.5*tau));

for (i=0; i<n; i++) yy[i] = y[i]+0.5*r[1][i];

for (i=0; i<n; i++) r[2][i] = tau*(p[i](yy,t+0.5*tau));

for (i=0; i<n; i++) yy[i] = y[i]+r[2][i];

for (i=0; i<n; i++) r[3][i] = tau*(p[i](yy,t+tau));

for (i=0; i<n; i++) y[i] += (r[0][i]+2.0*r[1][i]+2.0*r[2][i]+r[3][i])/6.0;

t += tau;

printf ("time = %1.2f\n", t); fprintf (fil, "time = %1.2f\n ", t);

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

printf ("y[%d] = %2.10f ", i, y[i]); fprintf (fil, "y[%d] = %2.8f ", i, y[i]);

}

printf ("\n"); fprintf (fil, "\n");

} while (t <= tmax);

fclose (fil);

}

 

решение

 

Метод Эйлера time = 0.00

y[0] = 2.00000000 y[1] = 0.00000000

time = 0.01

y[0] = 2.00000000 y[1] = -0.02000000

time = 0.02

y[0] = 1.99980000 y[1] = -0.03940000

time = 0.03

y[0] = 1.99940600 y[1] = -0.05821632

time = 0.04

y[0] = 1.99882384 y[1] = -0.07646527

time = 0.05

y[0] = 1.99805918 y[1] = -0.09416315

time = 0.06

y[0] = 1.99711755 y[1] = -0.11132615

time = 0.07

y[0] = 1.99600429 y[1] = -0.12797037

time = 0.08

y[0] = 1.99472459 y[1] = -0.14411173

time = 0.09

y[0] = 1.99328347 y[1] = -0.15976600

time = 0.10

y[0] = 1.99168581 y[1] = -0.17494870

time = 0.11

y[0] = 1.98993632 y[1] = -0.18967516

 

Метод Рунге-Кутты 2 time = 0.00

y[0] = 2.00000000 y[1] = 0.00000000

time = 0.01

y[0] = 1.99990000 y[1] = -0.01970000

time = 0.02

y[0] = 1.99960596 y[1] = -0.03881613

time = 0.03

y[0] = 1.99912364 y[1] = -0.05736441

time = 0.04

y[0] = 1.99845863 y[1] = -0.07536086

time = 0.05

y[0] = 1.99761638 y[1] = -0.09282138

time = 0.06

y[0] = 1.99660217 y[1] = -0.10976180

time = 0.07

y[0] = 1.99542111 y[1] = -0.12619779

time = 0.08

y[0] = 1.99407817 y[1] = -0.14214484

time = 0.09

y[0] = 1.99257817 y[1] = -0.15761824

time = 0.10

y[0] = 1.99092577 y[1] = -0.17263309

time = 0.11

y[0] = 1.98912548 y[1] = -0.18720422

 

Метод Рунге-Кутты 4 time = 0.00

y[0] = 2.00000000 y[1] = 0.00000000

time = 0.01

y[0] = 1.99990099 y[1] = -0.01970267

time = 0.02

y[0] = 1.99960789 y[1] = -0.03882136

time = 0.03

y[0] = 1.99912646 y[1] = -0.05737210

time = 0.04

y[0] = 1.99846229 y[1] = -0.07537089

time = 0.05

y[0] = 1.99762083 y[1] = -0.09283365

time = 0.06

y[0] = 1.99660735 y[1] = -0.10977620

time = 0.07

y[0] = 1.99542699 y[1] = -0.12621419

time = 0.08

y[0] = 1.99408470 y[1] = -0.14216314

time = 0.09

y[0] = 1.99258530 y[1] = -0.15763834

time = 0.10

y[0] = 1.99093346 y[1] = -0.17265487

time = 0.11

y[0] = 1.98913368 y[1] = -0.18722757

 

 

Задпние №3 решение уравнений в частных производных

#include <stdio.h>

#include <math.h>

 

const double L = 200.0, h = 1.0, tau = 0.1, u0 = 22.0;

const double tn = 0.0, tmax = 10000.0, a = 1.0;

 

double g0 (double x) {

return sin(x+0.480); // Введите функцию g0(x)

}

double f0 (double time) {

return 0.46180;// Введите функцию f0(t)

}

double f1 (double time) {

return 3.0*time+0.8820; // Введите функцию f1(t)

}

 

int main () {

FILE * fil;

// блок подготовки

int n = (int) (L / h) + 1;

double x = 0.0;

double * u = new double [n];

double time = tn;

fopen_s (&fil, "teplo.dat", "w");

// начальные значения температур

u[0] = f0 (time);; //fi1(time);

for (int i=1; i<n-1; i++) { u[i] = g0 (x); x += h; }

u[n-1] = f1 (time); //fi2(time);

 

// основной расчет

double upr, uu, R = a*a*tau/(h*h);

do {

upr = u[0];

for (int i=1; i<n-1; i++) {

uu = u[i];

u[i] += R*(upr-2.0*u[i]+u[i+1]);

upr = uu;

}

u[0] = f0(time+tau);

u[n-1] = f1(time+tau);

time += tau;

} while (time <= tmax);

// вывод вычесленных значений температур

fprintf (fil, "\n вывод вычесленных значений температур\n");

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

fprintf (fil, "u[%d]=%2.8f\t", i, u[i]);

if (!((i+1)%3)) fprintf (fil, "\n");

}

fprintf (fil, "\n");

printf ("End calculus\n");

delete [] u;

fclose (fil);

return 0;

}

 

Результаты вычислений

вывод вычесленных значений температур

u[0]=0.46180000 u[1]=60.77452300 u[2]=121.09970379

u[3]=181.44980078 u[4]=241.83727365 u[5]=302.27458393

u[6]=362.77419567 u[7]=423.34857605 u[8]=484.01019599

u[9]=544.77153080 u[10]=605.64506077 u[11]=666.64327182

u[12]=727.77865608 u[13]=789.06371257 u[14]=850.51094776

u[15]=912.13287620 u[16]=973.94202114 u[17]=1035.95091514

u[18]=1098.17210068 u[19]=1160.61813073 u[20]=1223.30156941

u[21]=1286.23499256 u[22]=1349.43098833 u[23]=1412.90215778

u[24]=1476.66111549 u[25]=1540.72049011 u[26]=1605.09292499

u[27]=1669.79107872 u[28]=1734.82762573 u[29]=1800.21525685

u[30]=1865.96667989 u[31]=1932.09462022 u[32]=1998.61182128

u[33]=2065.53104518 u[34]=2132.86507324 u[35]=2200.62670654

u[36]=2268.82876644 u[37]=2337.48409517 u[38]=2406.60555629

u[39]=2476.20603526 u[40]=2546.29843998 u[41]=2616.89570124

u[42]=2688.01077331 u[43]=2759.65663439 u[44]=2831.84628710

u[45]=2904.59275903 u[46]=2977.90910319 u[47]=3051.80839846

u[48]=3126.30375012 u[49]=3201.40829031 u[50]=3277.13517845

u[51]=3353.49760171 u[52]=3430.50877550 u[53]=3508.18194384

u[54]=3586.53037987 u[55]=3665.56738619 u[56]=3745.30629535

u[57]=3825.76047025 u[58]=3906.94330450 u[59]=3988.86822287

u[60]=4071.54868164 u[61]=4154.99816900 u[62]=4239.23020544

u[63]=4324.25834406 u[64]=4410.09617100 u[65]=4496.75730574

u[66]=4584.25540143 u[67]=4672.60414528 u[68]=4761.81725883

u[69]=4851.90849831 u[70]=4942.89165489 u[71]=5034.78055504

u[72]=5127.58906079 u[73]=5221.33107000 u[74]=5316.02051667

u[75]=5411.67137116 u[76]=5508.29764048 u[77]=5605.91336852

u[78]=5704.53263629 u[79]=5804.16956213 u[80]=5904.83830197

u[81]=6006.55304949 u[82]=6109.32803637 u[83]=6213.17753244

u[84]=6318.11584586 u[85]=6424.15732334 u[86]=6531.31635024

u[87]=6639.60735076 u[88]=6749.04478809 u[89]=6859.64316452

u[90]=6971.41702156 u[91]=7084.38094008 u[92]=7198.54954040

u[93]=7313.93748238 u[94]=7430.55946552 u[95]=7548.43022902

u[96]=7667.56455184 u[97]=7787.97725280 u[98]=7909.68319056

u[99]=8032.69726370 u[100]=8157.03441074 u[101]=8282.70961016

u[102]=8409.73788038 u[103]=8538.13427978 u[104]=8667.91390668

u[105]=8799.09189933 u[106]=8931.68343586 u[107]=9065.70373423

u[108]=9201.16805221 u[109]=9338.09168728 u[110]=9476.48997658

u[111]=9616.37829684 u[112]=9757.77206424 u[113]=9900.68673437

u[114]=10045.13780207 u[115]=10191.14080134 u[116]=10338.71130517

u[117]=10487.86492547 u[118]=10638.61731283 u[119]=10790.98415644

u[120]=10944.98118387 u[121]=11100.62416092 u[122]=11257.92889141

u[123]=11416.91121701 u[124]=11577.58701700 u[125]=11739.97220808

u[126]=11904.08274413 u[127]=12069.93461599 u[128]=12237.54385119

u[129]=12406.92651374 u[130]=12578.09870382 u[131]=12751.07655755

u[132]=12925.87624667 u[133]=13102.51397829 u[134]=13281.00599459

u[135]=13461.36857246 u[136]=13643.61802327 u[137]=13827.77069249

u[138]=14013.84295934 u[139]=14201.85123653 u[140]=14391.81196984

u[141]=14583.74163779 u[142]=14777.65675126 u[143]=14973.57385316

u[144]=15171.50951800 u[145]=15371.48035152 u[146]=15573.50299032

u[147]=15777.59410139 u[148]=15983.77038179 u[149]=16192.04855815

u[150]=16402.44538628 u[151]=16614.97765075 u[152]=16829.66216442

u[153]=17046.51576801 u[154]=17265.55532964 u[155]=17486.79774438

u[156]=17710.25993375 u[157]=17935.95884530 u[158]=18163.91145208

u[159]=18394.13475217 u[160]=18626.64576819 u[161]=18861.46154680

u[162]=19098.59915820 u[163]=19338.07569561 u[164]=19579.90827473

u[165]=19824.11403328 u[166]=20070.71013041 u[167]=20319.71374621

u[168]=20571.14208113 u[169]=20825.01235548 u[170]=21081.34180885

u[171]=21340.14769957 u[172]=21601.44730415 u[173]=21865.25791673

u[174]=22131.59684848 u[175]=22400.48142706 u[176]=22671.92899604

u[177]=22945.95691431 u[178]=23222.58255549 u[179]=23501.82330739

u[180]=23783.69657135 u[181]=24068.21976171 u[182]=24355.41030517

u[183]=24645.28564021 u[184]=24937.86321649 u[185]=25233.16049424

u[186]=25531.19494364 u[187]=25831.98404422 u[188]=26135.54528427

u[189]=26441.89616017 u[190]=26751.05417583 u[191]=27063.03684204

u[192]=27377.86167584 u[193]=27695.54619994 u[194]=28016.10794205

u[195]=28339.56443429 u[196]=28665.93321254 u[197]=28995.23181581

u[198]=29327.47778567 u[199]=29662.68866552 u[200]=30000.88200006

 

задание№4

#include <stdio.h>

#include <math.h>

 

void main () {

const double h = 0.2, xmax = 1.0, ymax = 1.0;

const double eps = 0.01, Pi = 3.1415;

const int kmax = 200;

FILE * f;

int n = (int) (xmax / h) + 1;

 

double ** u;

u = new double * [n];

for (int i=0; i<n; i++) u[i] = new double [n];

fopen_s (&f, "station.dat", "w");

// Стороны AB и CD

double y = 0.0;

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

u[0][j] =0.0; // Введите функцию на стороне AB

u[n-1][j] = 50.0*y*(1-pow(y,2.0)); // Введите функцию на стороне CD

y += h;

}

// Стороны AD и BC

double x = 0.0;

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

u[i][0] = 50.0*x*(1-x); // Введите функцию на стороне AD

u[i][n-1] =50.0*x*(1-x); // Введите функцию на стороне BC

x += h;

}

// Начальные значения искомой функции внутри области

for (int i=1; i<n-1; i++)

for (int j=1; j<n-1; j++) u[i][j] = 0.0;

 

int k = 0;

do {

for (int i=1; i<n-1; i++)

for (int j=1; j<n-1; j++) {

u[i][j] = 0.25*(u[i-1][j]+u[i+1][j]+u[i][j+1]+u[i][j-1]);

}

k++;

} while (k<kmax);

fprintf (f, "Вычисленные значения\n");

for (int j=n-1; j>=0; j--) {

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

printf ("%2.4f\t", u[i][j]);

fprintf (f, "%2.4f\t", u[i][j]);

}

printf ("\n"); fprintf (f, "\n");

}

 

 

for (int i=0; i<n; i++) delete [] u[i];

delete [] u;

fclose (f);

}

Вычисленные значения

0.0000 8.0000 12.0000 12.0000 8.0000 0.0000

0.0000 5.3947 9.0948 10.8992 11.7296 14.4000

0.0000 4.4839 8.0853 10.7722 13.6192 19.2000

0.0000 4.4555 7.9904 10.4853 12.7748 16.8000

0.0000 5.3478 8.9355 10.4039 10.1947 9.6000

0.0000 8.0000 12.0000 12.0000 8.0000 0.0000

 

Задание№5

 

 

#include <stdio.h>

 

const int n = 3;

const int n1 = 2;

 

int main () {

double x[n] = { 0.0 };

double a[n][n] = { {15.5,-13.1,37.0}, {40.1,7.2,-11.9 },{11.5,54.8,23.7}}; //Введите коэффициенты при x, y, z

double b[n] = {16.79,-53.23,141.57 }; // Введите столбец свободных членов

 

FILE * f;

fopen_s (&f, "gauss.dat", "w");

 

// Печать исходной системы

fprintf (f, "Исходная линейная система\n");

for (int l=0; l<n; l++) {

for (int m=0; m<n; m++) {

fprintf (f, "%2.3f * x[%d] ", a[l][m], m);

if ((m<n-1) && (a[l][m+1]>=0.0)) fprintf (f, "+");

if (m==(n-1)) fprintf (f, " = ");

}

fprintf (f, "%2.3f\n", b[l]);

}

 

// Прямой ход метода Гаусса

double w[n1];

for (int i=1; i<n; i++) {

int l = i - 1;

for (int j=0; j<n-i; j++) w[j] = -a[j+i][l] / a[l][l];

for (int k=i; k<n; k++) {

for (int j=0; j<n; j++) a[k][j] += a[l][j]*w[k-i];

b[k] += b[l]*w[k-i];

}

}

 

// Печать системы, приведенной к треугольному виду

fprintf (f, "\nСистема, приведенная к треугольному виду\n");

for (int l=0; l<n; l++) {

for (int m=0; m<n; m++) {

fprintf (f, "%2.3f * x[%d] ", a[l][m], m);

if ((m<n-1) && (a[l][m+1]>=0.0)) fprintf (f, "+");

if (m==(n-1)) fprintf (f, " = ");

}

fprintf (f, "%2.3f\n", b[l]);

}

 

// Обратный ход метода Гаусса

double sum;

for (int j=n-1; j>=0; j--) {

sum = 0.0;

for (int i=j; i<n-1; i++)

sum += a[j][i+1]*x[i+1];

x[j] = (b[j] - sum) /a[j][j];

}

 

// Печать результатов

printf ("Solution - \n");

fprintf (f, "\nВычисленные решения системы\n");

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

printf ("x[%d] = %2.4f ", i, x[i]);

fprintf (f, "x[%d] = %2.4f ", i, x[i]);

}

printf ("\n"); fprintf (f, "\n");

 

fclose (f);

return 0;

}

 

Исходная линейная система

15.500 * x[0] -13.100 * x[1] +37.000 * x[2] = 16.790

40.100 * x[0] +7.200 * x[1] -11.900 * x[2] = -53.230

11.500 * x[0] +54.800 * x[1] +23.700 * x[2] = 141.570

 

Система, приведенная к треугольному виду

15.500 * x[0] -13.100 * x[1] +37.000 * x[2] = 16.790

0.000 * x[0] +41.091 * x[1] -107.623 * x[2] = -96.667

0.000 * x[0] +0.000 * x[1] +165.233 * x[2] = 280.896

 

Вычисленные решения системы

x[0] = -1.2000 x[1] = 2.1000 x[2] = 1.7000

 







Дата добавления: 2015-08-27; просмотров: 315. Нарушение авторских прав; Мы поможем в написании вашей работы!




Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Этапы трансляции и их характеристика Трансляция (от лат. translatio — перевод) — процесс синтеза белка из аминокислот на матрице информационной (матричной) РНК (иРНК...

Условия, необходимые для появления жизни История жизни и история Земли неотделимы друг от друга, так как именно в процессах развития нашей планеты как космического тела закладывались определенные физические и химические условия, необходимые для появления и развития жизни...

Метод архитекторов Этот метод является наиболее часто используемым и может применяться в трех модификациях: способ с двумя точками схода, способ с одной точкой схода, способ вертикальной плоскости и опущенного плана...

МЕТОДИКА ИЗУЧЕНИЯ МОРФЕМНОГО СОСТАВА СЛОВА В НАЧАЛЬНЫХ КЛАССАХ В практике речевого общения широко известен следующий факт: как взрослые...

СИНТАКСИЧЕСКАЯ РАБОТА В СИСТЕМЕ РАЗВИТИЯ РЕЧИ УЧАЩИХСЯ В языке различаются уровни — уровень слова (лексический), уровень словосочетания и предложения (синтаксический) и уровень Словосочетание в этом смысле может рассматриваться как переходное звено от лексического уровня к синтаксическому...

Плейотропное действие генов. Примеры. Плейотропное действие генов - это зависимость нескольких признаков от одного гена, то есть множественное действие одного гена...

Studopedia.info - Студопедия - 2014-2025 год . (0.01 сек.) русская версия | украинская версия