Решение нелинейных уравнений. Разрабтка алгоритмов и проектировка программного обеспечение для решения нелинейных уравнений

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ

ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО

Факультет автоматизированных и информационных систем

Кафедра «Информационные технологии»

ОТЧЕТ   ПО   ЛАБОРАТОРНОЙ   РАБОТЕ   № 1

по дисциплине «Численные методы математической физики»

на тему: «Решение нелинейных уравнений»

Выполнил: студент гр. ИТ-22

Принял: преподаватель

Гомель 2015

Цель работы: Научиться разрабатывать алгоритмы и проектировать программное обеспечение для решения нелинейных уравнений.

Задание на лабораторную работу

Разработать алгоритм и написать программу, реализующую следующие методы решения нелинейных уравнений.

1. Метод половинного деления.

2. Метод простой итерации.

3. Метод парабол.

4. Метод Гаусса

Код программы:

#include <stdio.h>

#include <math.h>

#include <iostream>

double f(double x)

{

return (2*x*x*x*x-8*x*x*x+8*x*x-1);

}

double f1(double x)

{

return (7.2*cos(3.6*x)+1);

}

double f2(double a, double b)

{

return (f(a)/(a-b)+f(b)/(b-a));

}

double f3(double a,double b, double c)

{

return (f(a)/((a-b)*(a-c))+f(b)/((b-a)*(b-c))+f(c)/((c-a)*(c-b)));

}

main()

{

setlocale(LC_ALL, "Russian");

int choose;

while(choose!=5)

{

puts("Меню:");

puts("1. Метод половинного деления");

puts("2. Метод парабол");

puts("3. Метод простой итерации");

puts("4. Решение СЛАУ");

puts("5. Выход");

printf("Выберите действие: ");

scanf("%d",&choose);

switch(choose)

{

case 1:

{

double a,b,c,eps;

printf("a=");

scanf("%lf",&a);

printf("b=");

scanf("%lf",&b);

if(f(a)*f(b)<0)

{

printf("E=");

scanf("%lf",&eps);

do

{

c=(a+b)/2;

if(f(c)*f(a)<0)

{

b=c;

}

else

{

a=c;

}

}

while(fabs(a-b)>eps);

printf("x=%.15lf f(x)=%.15lf\n",c,f(c));

}

else

{

puts("В заданном диапазоне нет корней");

}

}

break;

case 2:

{

double x0,eps,x1,x2,x3;

double w,w1;

printf("x[k-2]=");

scanf("%lf",&x1);

printf("x[k-1]=");

scanf("%lf",&x2);

printf("x[k]=");

scanf("%lf",&x3);

printf("E=");

scanf("%lf",&eps);

while (fabs(x2-x3)>eps)

{

x0=x1;

x1=x2;

x2=x3;

w=f2(x0,x1)+f2(x0,x2)+f2(x1,x2);

w1=w+sqrt(fabs(w*w-4*f(x2)*f3(x2,x1,x0)));

if(w1>0) x3=x2-(2*f(x2))/w1;

else x3=x2-(2*f(x2))/(w-sqrt(fabs(w*w-4*f(x2)*f3(x2,x1,x0))));

}

printf("x=%.15lf f(x)=%.15lf\n",x3,f(x3));

}

break;

case 3:

{

double x1,x0,eps;

printf("x1=");

scanf("%lf",&x1);

printf("E=");

scanf("%lf",&eps);

do

{

x0=x1;

x1=x0-f(x0)/f1(x0);

}

while(fabs(x0-x1)>eps);

printf("x=%.15lf\n",x1);

}

break;

case 4:

{

int i, j, n;

printf("Порядок СЛАУ: ");

scanf("%d", &n);

if(n>0)

{

double matrix[n][n+1];

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

{

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

{

printf("Элемент[%d][%d]=", i, j);

scanf("%lf", &matrix[i][j]);

}

}

puts("Матрица:");

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

{

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

{

printf("%-8.2f ", matrix[i][j]);

}

printf("\n");

}

double  tmp, x[n];

int k;

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

{

tmp = matrix[i][i];

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

{

matrix[i][j] /= tmp;

}

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

{

tmp = matrix[j][i];

for (k = i; k <n+1; k++)

{

matrix[j][k] -= tmp*matrix[i][k];

}

}

}

x[n - 1] = matrix[n - 1][n];

for (i = n-2; i >= 0; i--)

{

x[i] = matrix[i][n];

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

{

x[i] -= matrix[i][j] * x[j];

}

}

puts("Корни уравнения:");

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

{

printf("x[%d]=%.2f\n",i,x[i]);

}

}

else puts("Неверно!");

}

break;

case 5:

{

}

break;

default:

{

puts("Неверно!");

}

break;

}

}

fflush(stdin);

return 0;

}

Результаты работы программы:

Рисунок 1 – Меню программы

Рисунок 2 – Выполнение метода половинного деления

Рисунок 2 – Метод простой итерации

Рисунок 3 – Метод парабол

Рисунок 4 – Метод Гаусса

Вывод: в результате выполнения данной лабораторной работы научился разрабатывать алгоритмы и проектировать программное обеспечение для решения нелинейных уравнений. Был разработан алгоритм и написана программа, реализующая методы решения нелинейных уравнений.

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
222 Kb
Скачали:
0

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.