Предмет: “ проектирование алгоритмов


Download 0.9 Mb.
Sana02.05.2023
Hajmi0.9 Mb.
#1420416
TuriПрограмма
Bog'liq
ПРОЕКТ 111


МИНЕСТЕРСТВО РАЗВИТИЯ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И КОММУНИКАЦИИ РЕСПУБЛИКИ УЗБЕКИСТАН



ТАШКЕНСТКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
ИМЕНИ МУХАММАДА АЛ-ХОРЕЗМИ

ПРЕДМЕТ: “ ПРОЕКТИРОВАНИЕ АЛГОРИТМОВ

ПРАКТИЧЕСКАЯ РАБОТА 1

ВЫПОЛНИЛ СТУДЕНТ ФАКУЛЬТЕТА


<<ТЕЛЕКОММУНИКАЦИОННЫЕ ТЕХНОЛОГИИ:ТЕЛЕКОММУНИКАЦИИ>>
ГРУППЫ 421-21 Поток CAL205-2
ХАЙДАРОВ ДОСТОН
ПРОВЕРИЛ: Кулдошев Хаким

2023









#include


#include
using namespace std;

int main()


{
float a, b, x, z, y;
cout << "Enter the value of x: ";
cin >> x;

if (x <= a)


{
a = -1, b = 3.4, z = tan*b*x;
y = ;
cout << "1-funktsiya y=" << y << endl;
}
else if (a <= x && x <= pow(b, 2))
{
a = -3.2, b = 5.5, z = tan*b*x*x;
y = ;
cout << "2-funktsiya y=" << y << endl;
}
else if (x > pow(b, 2))
{
a = -5.2, b = 7.2, z = tan*b*x*x*x;
y = ;
cout << "3-funktsiya y=" << y << endl;
}

return 0;


}





matrix = [
[3, 5, 2, 4],
[6, 4, 8, 1],
[-1, 7, 5, 6],
[8, 5, 7, 3],
[4, 2, 3, 8]
]


min_values = [min(row) for row in matrix]


max_value = max(min_values)


max_index = min_values.index(max_value)


min_index = matrix[max_index].index(min(matrix[max_index]))


print("Индексы элемента с найденным значением:", max_index, min_in

Программа для умножения матриц. Оценка числа операций.

Выполнить действия над матрицой


Вариант 11
где
#include
using namespace std;
//(2*A-B)*(3*A+B)-2*A*B
int main ()
{
int n = 3, m = 3;
int a[n][m] = { {5, 2, 0}, {10, 4, 1}, {7, 3, 2}};
int b[n][m] = { {3, 6, -1}, {-1, -2, 0}, {2, 1, 3}};
int c[n][m];
// Вывод матрицы А на экран
cout<<"a[i][j]= \n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << "\t" << a[i][j] << "\t";
cout << endl;
}
cout<// Вывод матрицы B на экран


cout<<"b[i][j]= \n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << "\t" << b[i][j] << "\t";
cout << endl;
}
// 1-action (2*A-B) as C
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
c[i][j] = 2*a[i][j] - b[i][j];
}
// Вывод матрицы C на экран
cout<<"c[i][j]= \n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << "\t" << c[i][j] << "\t";
cout << endl;}
//2-action (3*A+B) as D
int d[n][m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
d[i][j] =3*a[i][j] + b[i][j];
}
// Вывод матрицы D на экран
cout<<"d[i][j]= \n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << "\t" << d[i][j] << "\t";
cout << endl;}
//3-action 2*A as E
int e[n][m];
int k=2;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
e[i][j] = a[i][j] * k;
}
// Вывод матрицы E на экран
cout<<"e[i][j]= \n";
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
cout<<"\t"<< e[i][j]<<" \t";
cout << endl;
}
//4-action C*D as F
int f[n][m];
for(int i=0; ifor (int j=0;jf[i][j]=0;
for(int l=0;lf[i][j]+=c[i][l]*d[l][j];
}
}
// Вывод матрицы F на экран
cout<<"f[i][j]= \n";
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
cout<<"\t"<< f[i][j]<<" \t";
cout << endl;
}
//5-action E*B as G
int g[n][m];
for(int i=0; ifor (int j=0;jg[i][j]=0;
for(int v=0;vg[i][j]+=e[i][v]*b[v][j];
}
}
// Вывод матрицы G на экран
cout<<"g[i][j]= \n";
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
cout<<"\t"<< g[i][j]<<" \t";
cout << endl;
}
//6-action F-G as H
int h[n][m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
h[i][j] = f[i][j] - g[i][j];
}
// Вывод матрицы H на экран
cout<<"h[i][j]= \n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << "\t" << h[i][j] << "\t";
cout << endl;}
{cout<<"EXYsilver silno ustal i xochet spat";}
return 0;
}




Результат:



Выводы.
В этом задании мы сделали код на двух языках с помощью компилятора запустили их и ввели матрицу и тем самым умножили, сложили, прибавили и решили наш пример по варианту.
2Методы приближенного интегрирования. Выбор шага для обеспечения необходимой точности.
ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ
Задание№2 Вычислить интеграл по формулам левых и правых прямоугольников при n =10. оценивая точность с помощью сравнения полученных результатов.
Вариант 11




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



H=(b-a)/10=(2.8-1.2)/10=0.16.




H=(b-a)/10=(2.8-1.2)/10=0.16.

#include


#include
using namespace std;
double func(double x){
return(sqrt(1.2*x*x+0.7)/(1.4*x+sqrt(1.3*x*x+0.5)));
}
int main()
{
double a,b,S,h,x,I;
int n;
cout<<"Insert a: ";cin>>a;
cout<<"Insert b: ";cin>>b;
cout<<"Insert n: ";cin>>n;
h=(b-a)/n;
S=0;
for (int i=0;i<=n;i++)
{
x=a+i*h;
S+=func(x);
}
I=h*S;
cout<<"\nI= "<cout<{cout<<"EXYsilver is very tired and wants to sleep";}
return 0;
}

Результат:



1. Вычислить интеграл по формуле трапеций с тремя десятичными знаками.
Вариант 11





  1. Формула трапеций

Заменяя в частичном интеграле функцию линейным полиномом
,
получаем формулу трапеций на частичном отрезке (рис. 7)
(6)
Общая формула трапеций получается суммированием частичных интегралов


Используя оценку погрешности аппроксимации функции полиномом Лагранжа

окончательно получаем


Погрешность общей формулы трапеций (7) оценим как сумму погрешностей на отдельных отрезках:



Формула Симпсона основана на замене подынтегральной функции f(x) на отрезке [a, b] дугой параболы, т.е. функция f(x) аппроксимируется параболой вида: P(x)=αx2 + βx + γ.
Разобъем отрезок [a, b] на четное число равных отрезков n = 2m, при этом точки x0, x2, x4, ... , xn-2, xn - точки деления (x0 = a, xn = b). Обозначим через x1, x3, x5, ... середины отрезков [x0, x2], [x2, x4], [x4, x6] и т.д. Применив для каждого отрезка разбиения элементарную формулу Симпсона, получим формулу парабол.
Формула Симпсона:

H=(b-a)/10=(2.8-1.2)/10=0.16.

#include


#include
using namespace std
double f(double x){
return(1/(sqrt(x*x-1)));
}
int main()
{
double a,b,S,h,x;
int n;
cout<<"Insert a: ";cin>>a;
cout<<"Insert b: ";cin>>b;
cout<<"Insert n: ";cin>>n;
h=(b-a)/n;
x=a;
S=0;
cout<<"S= ";
for (int i=0;i<=n;i++)
{
x=x+h;
S=S+0.5*(f(x)+f(x+h))*h;
}
cout<cout<{cout<<"EXYsilver poyel i dovolen";}

return 0;


}

Результат:


Выводы.
В этом задании мы решили задачу и написали код на вычисление формул трапеции и формулы Симпсона и их процесс выполнения



5-Zadanie
Найдем корни уравнения:



ε = 0.001
Используем для этого Метод хорд.
Рассмотрим более быстрый способ нахождения корня на интервале [a,b], в предположении, что f(a)f(b)<0.
Уравнение хорды:

В точке x=x1, y=0, в результате получим первое приближение корня

Проверяем условия:
1. f(x1)f(b)<0,
2. f(x1)f(a)<0.
Если выполняется условие (1), то в формуле точку a заменяем на x1, получим:

Продолжая этот процесс, получим для n-го приближения:

Пусть f(xi)f(a)<0. Записав уравнение хорды, мы на первом шаге итерационного процесса получим x1. Здесь выполняется f(x1)f(a)<0. Затем вводим b1=x1 (в формуле точку b заменяем на x1), получим:

Продолжая процесс, придем к формуле:

Останов процесса:
|xn – xn-1|< ε, ξ = xn.
Находим первую производную:

Находим вторую производную:
d2F/dx2 = 6•x
Решение.
F(-10)=-1095; F(10)=1085
Поскольку F(-10)*F(10)<0 (т.е. значения функции на его концах имеют противоположные знаки), то корень лежит в пределах [-10;10].
Вычисляем значения функций в точке a = -10
f(-10) = -1011
f''(-10) = -23
Поскольку f(a)*f''(a) > 0, то x0 = a = -8
Ответ: x = 0.528-(0.529) = 0.98741627682624; F(x) = -0.0218
Параметр сходимости.
Сходимость метода хорд линейная с коэффициентом:
α = 1 - m1/M1, где m1 = min|f'(x)|; M1 = max|f'(x)|v
Найдем корни уравнения:




ε = 0.001
Используем для этого Модифицированный метод Ньютона.
Модификация метода Ньютона заключается в замене производной f’(xn) в точке xn в формуле:

на производную f’(x0) в точке x0, т.е. полагаем f’(xn)=f’(x0). В результате получим:

Геометрически этот способ означает, что мы заменяем касательные в точках Bn прямыми, параллельными касательной к кривой y=f(x) в точке B0.
Здесь не надо вычислять каждый раз производную f’(xn).
Находим первую производную:

Находим вторую производную:
d2F/dx2 = 6•x
Решение.
F(-10)=-1095; F(10)=1085
Поскольку F(-10)*F(10)<0 (т.е. значения функции на его концах имеют противоположные знаки), то корень лежит в пределах [-10;10].
Вычисляем значения функций в точке a = -10.
f(-10) = -1055
f''(-10) = -32
Поскольку f(a)*f''(a) > 0, то x0 = a = -8

#include


#include

using namespace std;


double f(double x){


return x*x*x+9*x-5; // функция f(x) =
}

double chord_method(double a, double b, double eps){


double c;
do {
c = (a * f(b) - b * f(a)) / (f(b) - f(a)); // формула метода хорд
if (f(c) * f(a) < 0){
b = c;
} else {
a = c;
}
} while (fabs(f(c)) > eps);
return c;
}

int main() {


double a = 0.0; // левая граница отрезка
double b = 1.0; // правая граница отрезка
double eps = 1e-5; // точность решения
double root = chord_method(a, b, eps); // вызов функции решения методом хорд
cout << "Root: " << root << endl;
return 0;
}
Метод Ньютона:
#include
#include

using namespace std;


double f(double x) {


return x*x*x+9*x-5; // функция f(x) =
}

double f_derivative(double x) {


return 2*x*x+9*x-5; // функция f(x) =
}

double newton_method(double x0, double eps) {


double x1;
do {
x1 = x0 - f(x0) / f_derivative(x0); // формула метода Ньютона
x0 = x1;
} while (fabs(f(x1)) > eps);
return x1;
}

int main() {


double x0 = 1.5; // начальное приближение
double eps = 1e-5; // точность решения
double root = newton_method(x0, eps); // вызов функции решения методом Ньютона
cout << "Root: " << root << endl;
return 0;
}


Выводы.
В этом задании мы сделали код и посчитали 2 метода – метод хорд и метод Ньютона и тем самым узнали как считать эти методы

Download 0.9 Mb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling