- •1.1. Програма роботи
- •1.2. Вказівки до виконання роботи
- •1.3. Зразок виконання роботи
- •2.1. Програма роботи
- •2.2. Вказівки до виконання роботи
- •2.3. Зразок виконання роботи
- •3.1. Програма роботи
- •3.2. Вказівки до виконання роботи
- •3.3. Зразок виконання роботи
- •4.1. Програма роботи
- •4.2. Вказівки до виконання роботи
- •4.3. Зразок виконання роботи
- •5.1. Програма роботи
- •5.2. Вказівки до виконання роботи
- •5.3. Зразок виконання роботи
- •6.1. Програма роботи
- •6.2. Вказівки до виконання роботи
- •6.3. Зразок виконання роботи
- •7.1. Програма роботи
- •7.2. Вказівки до виконання роботи
- •7.3. Зразок виконання роботи
4.3. Зразок виконання роботи
Задача 4.1. а) Задано такі дійсні числа: s = 1.8ln(№ + 3.21) і t = 2.6ln(№ + 5.45) (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):
,
де значення вкладеної функції f[x, y, z] обчислюється за допомогою такого математичного виразу:
.
б) Для аргумента s задано межі та крок його зміни: sп = -2.3ln(№ + 5), sк = 3.2ln(№ + 4.32), s = (sк – sп)/10, а також задано дійсне число t = 2.6ln(№ + 3). Потрібно розробити код програми для одновимірного табулювання функцій c1[x, y, z], c2[x, y, z], c3[x, y, z] і складеної функції (функціонала) c[s, t] за аргументом s згідно з математичними виразами, наведеними вище.
в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -2.3ln(№ + 5.4), sк = 3.2ln(№ + 5.21), s = (sк – sп)/10 і tп = -0.74ln(№ + 1.7), tк = 0.86ln(№ + 1.3), t = (tк – tп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) c[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.
Код програми 4.1. Обчислення значення складеної функції (функціонала)
#include <vcl>
#include <conio> // Для консольного режиму роботи
#include <math> // Для математичних функцій
#include <iomanip> // Використання маніпуляторів введення - виведення
#include <iostream> // Для потокового введення - виведення
using namespace std; // Використання стандартного простору імен
// Обчислення значення функції f[x, y, z]
double Fn_f(double x, double y, double z);
// Обчислення значення функції c[s, t]
double Fn_c(double ( *Fn_f)( double, double, double), double s, double t);
// Одновимірне табулювання функції
void Fn_Ovt(double sp, double sk, double ds, double t);
// Двовимірне табулювання функції
void Fn_Dvt(double sp, double sk, double ds, double tp, double tk, double dt);
int main()
{
cout.precision(3); // Формат #.###
cout.setf(ios_base::fixed); // Формат #.###
SetConsoleOutputCP(1251); // Виведення кирилиці
int Nv; cout << "Введіть значення Nv = "; cin >> Nv;
cout << "Завдання 4.1, а. Значення складеної функції (функціонала)" << endl;
double s = 1.8 * log(Nv + 3); cout << "Значення s = " << s << "; ";
double t = 2.6 * log(Nv + 5); cout << setw(17) << "Значення t = " << t << "." << endl << endl;
cout << "Значення складеної функції C[s, t] = " << setw(6) << Fn_c(Fn_f , s, t) << endl << endl;
cout << "Завдання 4.1, б. Одновимірне табулювання функціонала" << endl;
double sp = -2.3 * log(Nv + 5); cout << "Значення sp = " << sp << "; ";
double sk = 3.2 * log(Nv + 5); cout << setw(17) << "Значення sk = " << sk << "; ";
double ds = (sk - sp)/10; cout << setw(17) << "Значення ds = " << ds << "." << endl;
Fn_Ovt(sp, sk, ds, t); cout << endl;
cout << "Завдання 4.1, в. Двовимірне табулювання функціонала" << endl;
cout << "Значення sp = " << sp << "; " << setw(17) << "Значення sk = " << sk << "; " << setw(17) << "Значення ds = " << ds << "." << endl;
double tp = -3.6 * log(Nv + 5); cout << "Значення tp = " << tp << "; ";
double tk = 4.3 * log(Nv + 6); cout << setw(17) << "Значення tk = " << tk << "; ";
double dt = (tk - tp)/6; cout << setw(17) << "Значення dt = " << dt << "." << endl;
Fn_Dvt(sp, sk, ds, tp, tk, dt);
getch(); return 0;
}
// Обчислення значення функції f[x, y, z]
double Fn_f(double x, double y, double z)
{
double f1 = pow(fabs(x + y), 1./3);
double f2 = (x * x + y) * pow(fabs(x * x + z), 0.3);
double f3 = exp(z + 2.4) + y * y - 1.26;
return f1 * f2/f3;
}
// Обчислення значення функції c[s, t]
double Fn_c(double ( *Fn_f)( double, double, double), double s, double t)
{
double c1 = Fn_f(t, - 2 * pow(fabs(s), 0.2), 1.17);
double c2 = Fn_f(2.2 * t, pow(fabs(t - s), 1.5), s - 1.7);
double c3 = Fn_f(2.5 * s, pow(t, 3), s - t * t);
return (c1 * c1 + t * s)/(pow(fabs(c2), 0.6) - t) + c3;
}
// Одновимірне табулювання функції
void Fn_Ovt(double sp, double sk, double ds, double t)
{
cout << setw(12) << " s -- > " << setw(9) << "c1[s, t]" << setw(9) << "c2[s, t]"
<< setw(9) << "c3[s, t]" << setw(9) << "c[s, t]" << endl;
double s = sp, c1, c2, c3, c;
while(s <= sk + ds/2)
{
c1 = Fn_f(t, - 2 * pow(fabs(s), 0.2), 1.17);
c2 = Fn_f(2.2 * t, pow(fabs(t - s), 1.5), s - 1.7);
c3 = Fn_f(2.5 * s, pow(t, 3), s - t * t);
c = (c1 * c1 + t * s)/(pow(fabs(c2), 0.6) - t) + c3;
cout << setw(6) << s << " -- > " << setw(9) << c1 << setw(9) << c2 << setw(9) << c3 << setw(9) << c << endl;
s += ds;
}
}
// Двовимірне табулювання функції
void Fn_Dvt(double sp, double sk, double ds, double tp, double tk, double dt)
{
double t = tp; cout << setw(12) << "s/t -- > ";
while(t <= tk + dt/2)
{
cout << setw(10) << t; t += dt;
}
cout << endl;
double s = sp;
while(s <= sk + ds/2)
{
cout << setw(6) << s << " -- > "; t = tp;
while(t <= tk + dt/2)
{
cout << setw(10) << Fn_c(Fn_f , s, t);
t += dt;
}
s += ds; cout << endl;
}
}
Результати розрахунку значення складеної функції (функціонала) та її одновимірне табулювання
Результати двовимірного табулювання складеної функції (функціонала)
Задача 4.2. а) Задано дійсне число y = 1.65ln(№ + 3.5) та додатне ціле число m = int[2ln(№ + 9)] (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):
,
де значення вкладеної функції t[i, j] визначається з такого співвідношення:
б) Для аргумента s задано межі та крок його зміни: yп = -3.6ln(№ + 5.23), yк = 4.3ln(№ + 6.13), y = (yк – yп)/10, а також ціле число m = int[2ln(№ + 9)]. Потрібно розробити код програми для одновимірного табулювання функцій t1[i, j], t2[i, j], t3[i, j] і складеної функції (функціонала) z[y, m] за аргументом s згідно з математичними виразами, наведеними вище.
в) Для аргументів s та t задано відповідні межі та крок їх зміни: yп = -3.6ln(№ + 5.41), yк = 4.3ln(№ + 6.31), y = (yк – yп)/10, а також mп = int[–0.8ln(№ + 2.5)], mк = int[0.9ln(№ + 2)], m = (yк – yп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) z[y, m] за аргументами s і t згідно з математичними виразами, наведеними вище.
Код програми 4.2. Обчислення значення складеної функції (функціонала)
#include <vcl>
#include <iostream> // Для потокового введення - виведення
#include <iomanip> // Використання маніпуляторів введення - виведення
#include <math> // Для математичних функцій
#include <conio> // Для консольного режиму роботи
using namespace std; // Використання стандартного простору імен
// Обчислення значення функції t[i, j]
double Fn_t(double i, int j);
// Обчислення значення функції z[y, m] для двовимірного табулювання функції
double Fn_z(double ( *Fn_t)(double, int), double y, int m);
// Одновимірне табулювання функції
void Fn_Ovt(double yp, double yk, double dy, int m);
// Двовимірне табулювання функції
void Fn_Dvt(double yp, double yk, double dy, int mp, int mk, double dm);
int main()
{
cout.precision(3); // Формат #.##
cout.setf(ios_base::fixed); // Формат #.##
SetConsoleOutputCP(1251); // Виведення кирилиці
int Nv; cout << "Введіть значення Nv = "; cin >> Nv;
cout << "Завдання 4.2, а. Значення складеної функції (функціонала)" << endl;
int m = 2 * log(Nv + 9); cout << "Значення m = " << m << "; ";
double y = 1.65 * log(Nv + 3.5); cout << setw(17) << "Значення y = " << y << "." << endl;
cout << "Значення складеної функції Z[y, m] = " << Fn_z(Fn_t, y, m) << endl << endl; ;
cout << "Завдання 4.2, б. Одновимірне табулювання функціонала " << endl;
m = 2 * log(Nv + 9); cout << "Значення m = " << m << "." << endl;
double yp = -3.6 * log(Nv + 5); cout << "Значення yp = " << yp << "; ";
double yk = 4.3 * log(Nv + 6); cout << setw(17) << "Значення yk = " << yk << "; ";
double dy = (yk - yp)/10; cout << setw(17) << "Значення dy = " << dy << "." << endl;
Fn_Ovt(yp, yk, dy, m); cout << endl;
cout << "Завдання 4.2, в. Двовимірне табулювання функціонала" << endl;
cout << "Значення yp = " << setw(6) << yp << "; " << setw(17) << "Значення yk = " << setw(6) << yk << "; " <<
setw(17) << "Значення dy = " << setw(6) << dy << "." << endl;
int mp = 0.8 * log(Nv + 2.5); cout << "Значення mp = " << setw(2) << mp << "; ";
int mk = 2.9 * log(Nv + 2); cout << setw(21) << "Значення mk = " << setw(2) << mk << "; ";
double dm = (mk - mp)/8.; cout << setw(21) << "Значення dm = " << setw(6) << dm << "." << endl;
Fn_Dvt(yp, yk, dy, mp, mk, dm);
getch(); return 0;
}
// Обчислення значення функції t[i, j]
double Fn_t(double i, int j)
{
if(i >= j && i < 2 * j)
{
double t1 = 3 * cos(pow(i * i - j/6, 2));
double t2 = pow(log(pow(fabs(i + j - 0.11), 1.3)), 2);
return t1/t2;
}
else if(i < j)
return 1 + i * j * j + pow(sin(pow(i, 3)), 2);
else
{
double t1 = pow(fabs(i), 0.13);
double t2 = j * pow(log(pow(fabs(i + j), 0.56)), 2);
double t3 = i * 3.6 + 0.25;
return t1 - t2/t3;
}
}
// Обчислення значення функції z[y, m] для двовимірного табулювання функції
double Fn_z(double ( *Fn_t)(double, int), double y, int m)
{
double t1 = Fn_t(y + 0.1, pow(m, 0.2) - 1); t1 = 1.23 + pow(t1, 2);
double t2 = Fn_t(m + y * y, y + 3); t2 = pow(fabs(y * t2), 1.2/m);
double t3 = Fn_t(y * y + 1.1, y * pow(m, 0.3)); t3 = 2.6 + pow(fabs(t3), 2./3) + pow(fabs(y/m), 1./3);
return (t1 - t2)/t3;
}
// Одновимірне табулювання функції
void Fn_Ovt(double yp, double yk, double dy, int m)
{
cout << setw(12) << "y -- > " << setw(9) << "t1[y, m]" << setw(9) << "t2[y, m]"
<< setw(9) << "t3[y, m]" << setw(9) << "z[y, m]" << endl;
double y = yp, t1, t2, t3, t;
while(y <= yk + dy/2)
{
t1 = Fn_t(y + 0.1, pow(m, 0.2) - 1);
t2 = Fn_t(m + y * y, y + 3);
t3 = Fn_t(y * y + 1.1, y * pow(m, 0.3));
t = (1.23 + t1 * t1 - pow(fabs(y * t2), 1.2/m))/( 2.6 + pow(fabs(t3), 2./3) + pow(fabs(y/m), 1./3));
cout << setw(6) << y << " -- > " << setw(9) << t1 << setw(9) << t2 << setw(9) << t3 << setw(9) << t << endl;
y += dy;
}
}
// Двовимірне табулювання функції
void Fn_Dvt(double yp, double yk, double dy, int mp, int mk, double dm)
{
double m = mp; cout << setw(12) << "y/m -- > ";
while(m <= mk + dm/2)
{
cout << setw(7) << m; m += dm;
}
cout << endl;
double y = yp;
while(y <= yk + dy/2)
{
cout << setw(6) << y << " -- > "; m = mp;
while(m <= mk + dm/2)
{
cout << setw(7) << Fn_z(Fn_t, y, m); m += dm;
}
y += dy; cout << endl;
}
}
Результати розрахунку значення складеної функції (функціонала) та її одновимірне табулювання
Результати двовимірного табулювання складеної функції (функціонала)
Задача 4.3. а) Задано дійсне число s = -2.6ln(№ + 4.16) та додатне ціле число t = int[3ln(№ + 6.51)] (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):
,
де значення вкладених функцій g[x, n] і q[x, n] обчислюються за допомогою таких скінчених сум/добутків:
і .
б) Для аргумента s задано межі та крок його зміни: sп = -2.5ln(№ + 4.15), sк = 3.2ln(№ + 4.31), s = (sк – sп)/10, а також ціле число t = int[3ln(№ + 6)] (де № = 4 – номер варіанта). Потрібно розробити код програми для одновимірного табулювання функцій g1[x, n], g2[x, n], q1[x, n], q2[x, n] і складеної функції (функціонала) p[s, t] за аргументом s згідно з математичними виразами, наведеними вище.
в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -2.5ln(№ + 4.31), sк = 3.2ln(№ + 4.55), s = (sк – sп)/10, а також tп = int[0.8ln(№ + 2.5)], tк = int[2.9ln(№ + 2)], t = (tк – tп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) p[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.
Код програми 4.3. Обчислення значення складеної функції (функціонала)
#include <vcl>
#include <iostream> // Для потокового введення - виведення
#include <iomanip> // Використання маніпуляторів введення - виведення
#include <math> // Для математичних функцій
#include <conio> // Для консольного режиму роботи
using namespace std; // Використання стандартного простору імен
// Обчислення значення факторіала
double Fact(int n);
// Обчислення значення функції g[x, n]
double Fn_g(double x, int n);
// Обчислення значення функції q[x, n]
double Fn_q(double x, int n);
// Обчислення значення функції p[s, t]
double Fn_p(double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double s, int t);
// Одновимірне табулювання функції
void Fn_Ovt(double sp, double sk, double ds, int t);
// Двовимірне табулювання функції
void Fn_Dvt(double ( *Fn_p)(double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double s, int t),
double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double sp, double sk, double ds, int tp, int tk, double dt);
int main()
{
cout.precision(3); // Формат #.##
cout.setf(ios_base::fixed); // Формат #.##
SetConsoleOutputCP(1251); // Виведення кирилиці
int Nv; cout << "Введіть значення Nv = "; cin >> Nv;
cout << "Завдання 4.3, а. Значення складеної функції (функціонала)" << endl;
int t = 3 * log(Nv + 6); cout << "Значення t = " << t << "; ";
double s = -2.6 * log(Nv + 4); cout << setw(17) << "Значення s = " << s << "." << endl;
cout << "Значення складеної функції P[s, t] = " << setw(8) << Fn_p(Fn_g, Fn_q, s, t) << endl << endl;
cout << "Завдання 4.3, б. Одновимірне табулювання функціонала " << endl;
cout << "Значення t = " << t << "." << endl;
double sp = -2.5 * log(Nv + 4); cout << "Значення sp = " << sp << "; ";
double sk = 3.2 * log(Nv + 4); cout << setw(17) << "Значення sk = " << sk << "; ";
double ds = (sk - sp)/10; cout << setw(17) << "Значення ds = " << ds << "." << endl;
Fn_Ovt( sp, sk, ds, t); cout << endl;
cout << "Завдання 4.3, в. Двовимірне табулювання функціонала " << endl;
cout << "Значення sp = " << sp << "; " << setw(17) << "Значення sk = " << sk << "; " << setw(17) <<
"Значення ds = " << ds << "." << endl;
int tp = 0.8 * log(Nv + 2.5); cout << "Значення tp = " << setw(2) << tp << "; ";
int tk = 2.9 * log(Nv + 2); cout << setw(21) << "Значення tk = " << tk << "; ";
double dt = (tk - tp)/6.; cout << setw(21) << "Значення dt = " << setw(2) << dt << "." << endl;
Fn_Dvt(Fn_p, Fn_g, Fn_q, sp, sk, ds, tp, tk, dt);
getch(); return 0;
}
// Обчислення значення факторіала
double Fact(int n)
{
double f = 1;
if(n > 1) for(int i = 2; i <= n; i++) f *= i;
return f;
}
// Обчислення значення функції g[x, n]
double Fn_g(double x, int n)
{
double f = 0;
for(int i = 1; i <= n; i++) f += (x + Fact(i))/(i * i - x + 1.3);
return f + x * n/pow(n, x);
}
// Обчислення значення функції q[x, n]
double Fn_q(double x, int n)
{
double f = 1;
for(int i = 1; i <= n; i++) f *= (x + i)/(i * i + 2 * Fact(i) + 3) - pow(x, 1./i);
return f;
}
// Обчислення значення функції p[s, t]
double Fn_p(double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double s, int t)
{
double g1 = Fn_g(1.2 * s * s, t); g1 = pow(fabs(g1), 1./3);
double g2 = Fn_g(t * t - s, t + 2); g2 = pow(fabs(g2), 0.8);
double q1 = Fn_q(s * s + 3.1, 2 * t);
double q2 = Fn_q(2 * s * s + t, t - 2); q2 = pow(fabs(q2 - t/(s + 0.1)), 1./2);
return g1 * g2/q1 - q2;
}
// Одновимірне табулювання функції
void Fn_Ovt(double sp, double sk, double ds, int t)
{
cout << setw(6) << "s" << setw(3) << " -- > " << setw(10) << "g1[s, t]" << setw(10) << "g2[s, t]" <<
setw(10) << "q1[s, t]" << setw(10) << "q2[s, t]" << setw(10) << "p[s, t]" << endl;
double s = sp, g1, g2, q1, q2, p;
while(s <= sk + ds/2)
{
g1 = Fn_g(1.2 * s * s, t);
g2 = Fn_g(t * t - s, t + 2);
q1 = Fn_q(s * s + 3.1, 2 * t);
q2 = Fn_q(2 * s * s + t, t - 2);
p = pow(fabs(g1), 1./3) * pow(fabs(g2), 0.8)/q1 - pow(fabs(q2 - t/(s + 0.1)), 1./2);
cout << setw(6) << s << " -- > " << setw(10) << g1 << setw(10) << g2 << setw(10) <<
q1 << setw(10) << q2 << setw(10) << p << endl;
s += ds;
}
}
// Двовимірне табулювання функції
void Fn_Dvt(double ( *Fn_p)(double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double s, int t),
double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double sp, double sk, double ds, int tp, int tk, double dt)
{
double t = tp; cout << setw(6) << "s/t" << setw(3) << " -- > ";
while(t <= tk + dt/2)
{
cout << setw(8) << t; t += dt;
}
cout << endl;
double s = sp;
while(s <= sk + ds/2)
{
cout << setw(6) << s << setw(3) << " -- > "; t = tp;
while(t <= tk + dt/2)
{
cout << setw(8) << Fn_p(Fn_g, Fn_q, s, t); t += dt;
}
s += ds; cout << endl;
}
}
Результати розрахунку значення складеної функції (функціонала) та її одновимірне табулювання
Результати двовимірного табулювання складеної функції (функціонала)
Задача 4.4. а) Задано дійсне число s = 3.8ln(№ + 3.31) та додатне ціле число t = int[2ln(№ + 4)] (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):
,
де значення вкладеної функції h[x, y] обчислюється за допомогою такої безмежної суми:
.
б) Для аргумента s задано межі та крок його зміни: sп = -2.5ln(№ + 3.51), sк = 3.2ln(№ + 2.38), s = (sк – sп)/10, а також ціле число t = int[2ln(№ + 4)] (де № = 4 – номер варіанта). Потрібно розробити код програми для одновимірного табулювання функцій h1[x, y], h2[x, y], h3[x, y], h4[x, y], h5[x, y] і складеної функції (функціонала) w[s, t] за аргументом s згідно з математичними виразами, наведеними вище.
в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -2.5ln(№ + 4.16), sк = 3.2ln(№ + 4.52), s = (sк – sп)/10, а також tп = int[0.8ln(№ + 2.5)], tк = int[2.9ln(№ + 2)], t = (tк – tп)/8. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) w[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.
Код програми 4.4. Обчислення значення складеної функції (функціонала)
#include <vcl>
#include <iostream> // Для потокового введення - виведення
#include <iomanip> // Використання маніпуляторів введення - виведення
#include <math> // Для математичних функцій
#include <conio> // Для консольного режиму роботи
using namespace std; // Використання стандартного простору імен
// Обчислення значення факторіала
double Fact(int);
// Обчислення мінімального значення з двох елементів
double Fn_min(double, double);
// Обчислення максимального значення з двох елементів
double Fn_max(double, double);
// Обчислення значення функція h[x, y]
double Fn_h(double, double);
// Обчислення значення функції w[s, t]
double Fn_w(double ( *Fn_h)(double, double), double ( *Fn_max)(double, double),
double ( *Fn_min)(double, double), double s, int t);
// Одновимірне табулювання функції
void Fn_Ovt(double, double, double, int);
// Двовимірне табулювання функції
void Fn_Dvt(double, double, double, int, int, double);
int main()
{
cout.precision(3); // Формат #.##
cout.setf(ios_base::fixed); // Формат #.##
SetConsoleOutputCP(1251); // Виведення кирилиці
int Nv; cout << "Введіть значення Nv = "; cin >> Nv;
cout << "Завдання 4.4, а. Значення складеної функції (функціонала)" << endl;
int t = 2 * log(Nv + 4); cout << "Значення t = " << t << "; ";
double s = 3.8 * log(Nv + 3); cout << setw(17) << "Значення s = " << s << "." << endl;
cout << "Значення складеної функції w[s, t] = " << Fn_w(Fn_h, Fn_max, Fn_min, s, t) << endl << endl;
cout << "Завдання 4.4, б. Одновимірне табулювання функціонала" << endl;
double sp = -2.5 * log(Nv + 3); cout << "Значення sp = " << sp << "; ";
double sk = 3.2 * log(Nv + 2); cout << setw(17) << "Значення sk = " << sk << "; ";
double ds = (sk - sp)/10; cout << setw(17) << "Значення ds = " << ds << "." << endl;
Fn_Ovt(sp, sk, ds, t); cout << endl;
cout << "Завдання 4.4, в. Двовимірне табулювання функціонала " << endl;
cout << "Значення sp = " << sp << "; " << setw(17) << "Значення sk = " << sk << "; " << setw(17) << "Значення ds = " << ds << "." << endl;
int tp = 0.8 * log(Nv + 2.5); cout << "Значення tp = " << setw(2) << tp << "; ";
int tk = 2.9 * log(Nv + 2); cout << setw(21) << "Значення tk = " << tk << "; ";
double dt = (tk - tp)/8.; cout << setw(21) << "Значення dt = " << setw(2) << dt << "." << endl;
Fn_Dvt(sp, sk, ds, tp, tk, dt);
getch(); return 0;
}
// Обчислення значення факторіала
double Fact(int n)
{
double f = 1;
if(n > 1) for(int i = 2; i <= n; i++) f *= i;
return f;
}
// Обчислення значення функція h[x, y]
double Fn_h(double x, double y)
{
double h = 0, c = 0;
int i = 1, z = 1;
do
{
h += z * c; i++; z = -z;
c = (i * x + cos(y + i))/(1.23 + x * x + Fact(i));
} while(fabs(c) > 0.001);
return h;
}
// Обчислення мінімального значення з двох елементів
double Fn_min(double x, double y)
{
if(x < y) return x;
else return y;
}
// Обчислення максимального значення з двох елементів
double Fn_max(double x, double y)
{
if(x > y) return x;
else return y;
}
// Обчислення значення функції w[s, t]
double Fn_w(double ( *Fn_h)(double, double), double ( *Fn_max)(double, double),
double ( *Fn_min)(double, double), double s, int t)
{
double w1 = Fn_h(s, t); w1 = pow(fabs(w1 + (s + 2.1)/(t + 1.3)), 1./3);
double w2 = Fn_h(s - t, (s + 2.3)/(t + 1.2)); w2 = w2 * w2;
double w3 = Fn_h(s/t, s + t); w3 = w3 * w3;
double w4 = Fn_h((t + s)/(2.3 * t), t * t); w4 = pow(fabs(w4), 1./2);
double w5 = Fn_h(1.3 - s/t, s + t/2.); w5 = pow(w5 * w5, 1./3);
return w1 + Fn_max(w2, w3)/Fn_min(w4, w5);
}
// Одновимірне табулювання функції
void Fn_Ovt(double sp, double sk, double ds, int t)
{
cout << setw(6) << "s" << setw(4) << " -- > " << setw(9) << "w1[s, t]" << setw(9) << "w2[s, t]"
<< setw(9) << "w3[s, t]" << setw(9) << "w4[s, t]" << setw(9) << "w5[s, t]"
<< setw(9) << "w[s, t]" << endl;
double s = sp, w1, w2, w3, w4, w5, w11, w21, w31, w41, w51, w;
while(s <= sk + ds/2)
{
w1 = Fn_h(s, t); w11 = pow(fabs(w1 + (s + 2.1)/(t + 1.3)), 1./3);
w2 = Fn_h(s - t, (s + 2.3)/(t + 1.2)); w21 = w2 * w2;
w3 = Fn_h(s/t, s + t); w31 = w3 * w3;
w4 = Fn_h((t + s)/(2.3 * t), t * t); w41 = pow(fabs(w4), 1./2);
w5 = Fn_h(1.3 - s/t, s + t/2.); w51 = pow(w5 * w5, 1./3);
w = w11 + Fn_max(w21, w31)/Fn_min(w41, w51);
cout << setw(6) << s << setw(4) << " -- > " << setw(9) << w1 << setw(9) << w2
<< setw(9) << w3 << setw(9) << w4 << setw(9) << w5 << setw(9) << w << endl;
s += ds;
}
}
// Двовимірне табулювання функції
void Fn_Dvt(double sp, double sk, double ds, int tp, int tk, double dt)
{
double t = tp; cout << setw(6) << "s/t" << setw(4) << " -- > ";
while(t <= tk + dt/2)
{
cout << setw(7) << t;
t += dt;
}
cout << endl;
double s = sp;
while(s <= sk + ds/2)
{
cout << setw(6) << s << setw(4) << " -- > "; t = tp;
while(t <= tk + dt/2)
{
cout << setw(7) << Fn_w(Fn_h, Fn_max, Fn_min, s, t);
t += dt;
}
s += ds; cout << endl;
}
}
Результати розрахунку значення складеної функції (функціонала) та її одновимірне табулювання
Результати двовимірного табулювання складеної функції (функціонала)
4.4. Індивідуальні завдання
Задача 4.1. а) Задано дійсні числа s = 1.72(№ + 1.26) (де № – номер варіанта) і додатне ціле число t = int[2ln(№ + 5)]. Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):
,
де значення вкладеної функції f[x, y, z] обчислюється за допомогою таких математичних виразів:
1. ; 2. ;
3. ; 4. ;
5. ; 6. ;
7. ; 8. ;
9. ; 10. ;
11. ; 12. ;
13. ; 14. ;
15. ; 16. ;
17. ; 18. ;
19. ; 20. ;
21. ; 22. ;
23. ; 24. ;
25. ; 26. ;
27. ; 28. ;
29. ; 30. .
б) Для аргумента s задано межі та крок його зміни: sп = -1.3ln(№ + 5), sк = 1.4ln(№ + 6), s = (sк – sп)/10, а також задано дійсне число t = 2.6ln(№ + 2.5). Потрібно розробити код програми для одновимірного табулювання функцій c1[x, y, z], c2[x, y, z], c3[x, y, z] і складеної функції (функціонала) c[s, t] за аргументом s згідно з математичними виразами, наведеними вище.
в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -1.3ln(№ + 4), sк = 2.4ln(№ + 5), s = (sк – sп)/10 і tп = -0.79ln(№ + 1.7), tк = 2ln(№ + 1.3), t = (tк – tп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) c[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.
Задача 4.2. а) Задано дійсне число y = 0.8ln(№ + 5.5) (де № – номер варіанта) та додатне ціле число m = int[5ln(№ + 10)]. Потрібно розробити код програми для обчислення значення однієї з таких складених функцій (функціоналів):
1. ;
2. ;
3. ;
4. ;
5. ;
6. ;
7. ;
8. ;
9. ;
10. ;
11. ;
12. ;
13. ;
14. ;
15. ,
де значення вкладеної функції t[i, j] обчислюється за допомогою таких логічних виразів:
1. 2.
3. 4.
5. 6.
7. 8.
9. 10.
11. 12.
13. 14.
15. 16.
17. 18.
19. 20.
21. 22.
23. 24.
25. 26.
27. 28.
29. 30.
б) Для аргумента s задано межі та крок його зміни: sп = -2.3ln(№ + 2), sк = 3.8ln(№ + 4), s = (sк – sп)/10, а також ціле число t = int[4ln(№ + 10)]. Потрібно розробити код програми для одновимірного табулювання функцій g1[x, n], g2[x, n], q1[x, n], q2[x, n] і складеної функції (функціонала) p[s, t] за аргументом s згідно з математичними виразами, наведеними вище.
в) Для аргументів s та t задано відповідні межі та крок їх зміни: yп = -3.6ln(№ + 5), yк = 4.3ln(№ + 6), y = (yк – yп)/10, а також mп = int[–0.8ln(№ + 2.5)], mк = int[0.9ln(№ + 2)], m = (yк – yп)/10. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) z[y, m] за аргументами s і t згідно з математичними виразами, наведеними вище.
Задача 4.3. а) Задано дійсне число y = 1.88ln(№ + 5.6) (де № – номер варіанта) та додатне ціле число t = int[3ln(№ + 10)]. Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):
,
де значення вкладеної функції g[x, n] обчислюється за допомогою таких скінчених сум/добутків:
1. ; 2. ;
3. ; 4. ;
5. ; 6. ;
7. ; 8. ;
9. ; 10. ;
11. ; 12. ;
13. ; 14. ;
15. ; 16. ;
17. ; 18. ;
19. ; 20. ;
21. ; 22. ;
23. ; 24. ;
25. ; 26. ;
27. ; 28. ;
29. ; 30. .
Значення вкладеної функції q[x, n] обчислюється за допомогою таких знакозмінних скінчених сум/добутків:
1. ; 2. ;
3. ; 4. ;
5. ; 6. ;
7. ; 8. ;
9. ; 10. ;
11. ; 12. ;
13. ; 14. ;
15. ; 16. ;
17. ; 18. ;
19. ; 20. ;
21. ; 22. ;
23. ; 24. ;
25. ; 26. ;
27. ; 28. ;
29. ; 30. .
б) Для аргумента s задано межі та крок його зміни: sп = -2.3ln(№ + 4), sк = 3.2ln(№ + 6), s = (sк – sп)/10, а також ціле число t = int[3ln(№ + 10)]. Потрібно розробити код програми для одновимірного табулювання функцій g1[x, n], g2[x, n]/q1[x, n], q2[x, n], pe[s, t] і складеної функції (функціонала) p[s, t] за аргументом s згідно з математичними виразами, наведеними вище.
в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -2.5ln(№ + 4), sк = 3.2ln(№ + 4), s = (sк – sп)/10, а також tп = int[0.8ln(№ + 2.5)], tк = int[2.9ln(№ + 2)], t = (tк – tп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) w[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.
Задача 4.4. а) Задано дійсне число s = 1.3ln(№ + 2.5) (де № – номер варіанта) та додатне ціле число t = int[3ln(№ + 10)]. Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):
,
де значення вкладеної функції h[x, y] обчислюється за допомогою таких безмежних сум/добутків:
1. ; 2. ;
3. ; 4. ;
5. ; 6. ;
7. ; 8. ;
9. ; 10. ;
11. ; 12. ;
13. ; 14. ;
15. ; 16. ;
17. ; 18. ;
19. ; 20. ;
21. ; 22. ;
23. ; 24. ;
25. ; 26. ;
27. ; 28. ;
29. ; 30. .
б) Для аргумента s задано межі та крок його зміни: sп = -2.3ln(№ + 3), sк = 3.2ln(№ + 5), s = (sк – sп)/10, а також ціле число t = int[4ln(№ + 10)]. Потрібно розробити код програми для одновимірного табулювання функцій h1[x, y], max{h2; h3}, min{h4; h5}, w[s, t] і складеної функції (функціонала) w[s, t] за аргументом s згідно з математичними виразами, наведеними вище.
в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -2.5ln(№ + 4), sк = 3.2ln(№ + 4), s = (sк – sп)/10, а також tп = int[0.8ln(№ + 2.5)], tк = int[2.9ln(№ + 2)], t = (tк – tп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) w[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.
Лабораторна робота № 5. ОБЧИСЛЕННЯ ЕЛЕМЕНТІВ МАСИВІВ