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

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

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

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

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

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

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

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

ОТЧЕТ   ПО   ЛАБОРАТОРНОЙ   РАБОТЕ   № 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