Использование языков программирования высокого уровня для решения задач вычислительной математики

В этой работе мы будем использовать все три составляющие – как разобьем программу на множество подпрограмм, так и будем

Использование языков программирования высокого уровня для решения задач вычислительной математики

Курсовой проект

Компьютеры, программирование

Другие курсовые по предмету

Компьютеры, программирование

Сдать работу со 100% гаранией
1


КУРСОВАЯ РАБОТА

на тему

Использование языков программирования высокого уровня для решения задач вычислительной математики

    Содержание

Введение

    Методы численного интегрирования, использующиеся в этой курсовой работе

    Решение задания на языке высокого уровня C

    Решение задания на языке высокого уровня Паскаль

    Построение графического решения задачи в пакете Matlab

Заключение

Список используемой литературы

    Введение

Постановка задачи: реализовать задачу вычислительной математики на двух языках программирования – Pascal и Си

Несмотря на простоту представленной математической задачи, она может служить прекрасным примером для обучения структурному программированию.

Структурное программирование основывается на 3-х основных составляющих:

1) Использование трех базовых структур – следования, ветвления и циклов

2) Модульное программирование (использования большого количества подпрограмм и модулей для разбития более сложной задачи на ряд простейших)

3) Нисходящее программирование – создание сначала основной функции, а потом последовательное присоединение к ней подпрограмм, стоящих по иерархии ниже по уровню.

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

    Постановка задачи

Найти значение интеграла , пользуясь методом трапеций, методом Симпсона и методом Ньютона для различных n (n=6, 12, 30). Сравнить с точным значением интеграла и оценить погрешности методов при указанных n. Изобразить график подынтегральной функции и заштриховать область, площадь которой равна значению интеграла.

    Описание курсовой работы

Курсовая работа выполнена с учетом требований технологии структурного программирования. Программа предусматривает возможность ввода исходных данных с клавиатуры и чтение из файла, также программа осуществляет вывод результатов на экран и запись в файл. Диалоговое взаимодействие пользователя с программой реализуется через систему меню, что предоставляет пользователю последовательно выполнять различные действия.

    Методы численного интегрирования, использующиеся в этой курсовой работе

Эти методы применяются для приближенного вычисления определенного интеграла вида: . Функция f(x) задана на отрезке [a, b]. Этот отрезок разбивается на n равных частей длины h=(b-a)/n.

Определенный интеграл представляет собой площадь, ограниченную кривой f(x), осью x и прямыми x=a и x=b. Приблизительно эта площадь представляется суммой площадей полос, основания которых одинаковы и равны h, а высоты равны значениям функции в точках разбиения. Обозначим точки разбиения x0=a, x1=a+h, x2= a+2h,...xn=b, а значения функции в этих точках соответственно yo=f(x0); y1=f(x1), y2=f(x2), ... yn=f(xn).

Метод трапеций:

Метод Симпсона:

гдеn=2*m число разбиений отрезка [a, b], кратное двум.

Метод Ньютона:

гдеn=m*3– число разбиений отрезка [a, b], кратное трем

2. Решение задания на языке высокого уровня С

Листинг программы

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#define a -1

#define b 1

#define I 2.350402

int N;

void menu();

float y(float x);

intget_n();

float Simpson();

float Trap();

floatNewton();

intconsole_n();

intfile_n();

void output(float f, inti);

void console_I(float f, inti);

void file_i(float f, inti);

int main()

{

menu();

return 0;

}

void menu()

{

printf("\n %3.d\n", b);

printf(" I = S(e^x)dx\n");

printf(" %1.d\n\n", a);

printf("1. Solve by Simpson\n2. Solve by trapeze\n3. Solve by Newton\n4. Exit\n>> ");

int c;

float f;

scanf("%d", &c);

switch (c)

{

case 1 :

{

system("cls");

f = Simpson();

break;

}

case 2 :

{

system("cls");

f = Trap();

break;

}

case 3 :

{

system("cls");

f = Newton();

break;

}

case 4 :

{

system("cls");

exit(1);

break;

}

default :

{

system("cls");

menu();

}

}

output(f, c);

printf("Push any button to return to menu...");

getch();

system("cls");

menu();

}

void console_I(float f, inti)

{

system("cls");

if (i == 1)

printf("Solved by Simpson method: n = %d\n", N);

else if (i == 2)

printf("Solved by trapeze method: n = %d\n", N);

else

printf("Solved by Newton method: n = %d\n", N);

printf("\n %3.d\n", b);

printf(" I = S(e^x)dx = %f\n", f);

printf(" %1.d\n\n", a);

printf("Exact value: %f\n", I);

printf("Difference: %f\n", I - f);

}

void file_I(float f, inti)

{

FILE *t;

t = fopen("C:/Documents and Settings/User/Рабочийстол/Прога/Курсач/output_f.txt", "w");

if (i == 1)

fprintf(t, "Solved by Simpson method: n = %d\n", N);

else if (i == 2)

fprintf(t, "Solved by trapeze method: n = %d\n", N);

else

fprintf(t, "Solved by Newton method: n = %d\n", N);

fprintf(t, "\n %3.d\n", b);

fprintf(t, " I = S(e^x)dx = %f\n", f);

fprintf(t, " %1.d\n\n", a);

fprintf(t, "Exact value: %f\n", I);

fprintf(t, "Difference: %f\n", I - f);

fclose(t);

}

void output(float f, inti)

{

int c;

printf("Output I:\n1. File\n2. Console\n3. File&Console\n>> ");

scanf("%d", &c);

if (c == 1)

file_I(f, i);

else if (c == 2)

console_I(f, i);

else

{

console_I(f, i);

file_I(f, i);

}

}

float y(float x)

{

return expf(x);

}

intget_n()

{

int n, c;

printf("Input n:\n1. From file\n2. From console\n>> ");

scanf("%d", &c);

if (c == 1)

n = file_n();

else

n = console_n();

N = n;

return n;

}

intconsole_n()

{

system("cls");

int n;

printf("Enter n: ");

scanf("%d", &n);

return n;

}

intfile_n()

{

FILE *f;

int n;

f = fopen("C:/Documents and Settings/User/Рабочийстол/Прога/Курсач/input_n.txt", "r");

fscanf(f, "%d", &n);

fclose(f);

return n;

}

float Simpson()

{

float n;

n = get_n();

float h = (b - a) / n, sum = 0;

inti, p;

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

{

if ((int)i % 2 == 0)

p = 2;

else

p = 4;

sum += p*y(a + h * i);

}

sum += y(a) + y(b);

sum *= (h/3);

return sum;

}

float Trap()

{

float n;

n = get_n();

float h = (b - a) / n, sum = 0;

inti;

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

sum += y(a + i * h) + y(a + (i + 1) * h);

sum *= h / 2;

return sum;

}

float Newton()

{

float n;

n = get_n();

float h = (b - a) / n, sum1 = 0, sum2 = 0, sum;

inti;

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

if ((int)i % 3 == 0)

sum1 += y(a + i * h);

else

sum2 += y(a + i * h);

sum = 3.0 / 8 * h * (y(a) + y(b) + 2 * sum1 + 3 * sum2);

returnsum;

}

Тестирование

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

Решим интеграл тремя разными способами, но при одном n, допустим n = 12.

Точное значение = 2.350402.

Решим методом Симпсона:

программирование matlab паскаль язык

Решим методом трапеций:

Решим методом Ньютона:

Судя по результатам, можно сделать вывод о том, что программа работает правильно.

3. Решение задания на языке высокого уровня Паскаль

Листинг программы

Модульmain:

programKursVar4;

uses menu;

begin

menu_1;

end.

Модульmenu:

unit menu;

Interface

procedure menu_1;

Implementation

uses crt, math, output;

procedure menu_1;

var c, n : integer;

f : real;

begin

clrscr;

writeln(' 1');

writeln(' I = S(e^x)dx');

writeln(' -1');

writeln('1. Solve by Simpson');

writeln('2. Solve by trapeze');

writeln('3. Solve by Newton');

write('>> ');

read(c);

case c of

1: begin

clrscr;

f := Simpson(n);

end;

2: begin

clrscr;

f := Trap(n);

end;

3: begin

clrscr;

f := Newton(n);

end;

4: begin

clrscr;

halt;

end;

else<

Лучшие

Похожие работы

1 2 >