Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
куляев текст с рамкой.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
955.39 Кб
Скачать

СОДЕРЖАНИЕ

ВВЕДЕНИЕ 2

1. ПОСТАНОВКА ЗАДАЧИ 4

2. МАТЕМАТИЧЕСКОЕ ОПИСАНИЕ МЕТОДОВ 5

2.1. Вычисление нелинейного уравнения методом

половинного деления 5

2.2 Решение дифференциального уравнения. Модифицированный

метод Эйлера 8

2.3. Умножение матрицы на вектор 12

3. БЛОК-СХЕМА ПРОГРАММЫ 15

3.1. Блок-схема нелинейного уравнения методом

половинного деления 16

3.2. Блок-схема дифференциального уравнения. Модифицированный

метод Эйлера 17

3.3. Блок-схема умножения матрицы на вектор 18

ЗАКЛЮЧЕНИЕ 19

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ 20

ПРИЛОЖЕНИЕ 21

ВВЕДЕНИЕ

C++ — чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения. На данном сайте выложено несколько книг и статей по языкам С и С++, как для начинающих, так и для профессионалов.

Язык C++ представляет собой набор команд, которые говорят компьютеру, что необходимо сделать. Этот набор команд, обычно называется исходный код или просто код. Командами являются или «функции» или «ключевые слова». Ключевые слова(зарезервированные слова С/С++) являются основными строительными блоками языка. Функции являются сложными строительными блоками, так как записаны они в терминах более простых функций. Такая структура функций напоминает содержание книги. Содержание может показывать главы книги, каждая глава в книге может иметь своё собственное содержание, состоящее из пунктов, каждый пункт может иметь свои подпункты. Хотя C++ предоставляет много общих функций и зарезервированных слов, которые вы можете использовать, все-таки возникает потребность в написании своих собственных функций. Человеку достаточно описать алгоритм необходимых преобразований и вычислений, а сами действия (как правило, настолько обширные и громоздкие, что их невозможно выполнить вручную) выполнит вычислительная машина.

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

Язык С (читается "Си" создан в начале 70х годов, когда Кен Томпсон и Дэннис Ритчи из Bell Labs разрабатывали операционную систему UNDC Сначала они создали часть компилятора С, затем использовали се для компиляции остальной части компилятора С и, наконец, применили полученный в результате компилятор для компиляции UNIX. Операционная система UNIX первоначально распространялась в исходных кодах на С среди университетов и лабораторий, а получатель мог откомпилировать исходный код на С в машинный код с помощью подходящего компилятора С. Распространение исходного кода сделало операционную систему UNIX уникальной; программист мог изменить операционную систему, а исходный код мог быть перенесен с одной аппаратной платформы на другую.

В языке С++ полностью поддерживаются принципы объектно-ориентированного программирования, включая три кита, на которых оно стоит: инкапсуляцию, наследование и полиморфизм. Инкапсуляция в С++ поддерживается посредством создания нестандартных (пользовательских) типов данных, называемых классами. Язык С++ поддерживает наследование. Это значит, что можно объявить новый тип данных (класс), который является расширением существующего.

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

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

Цель данного курсового проекта - научиться использовать методы структурного программирования на примере численных методов, в частности написание нескольких модулей и связь их в одну общую программу с помощью информационных технологий.

Задачи курсового проекта:

1.Вычислить наименьший по абсолютной величине действительный корень уравнения f(x)=0 с заданной точкой ε=10-4.Вычисления проводить в два этапа:

1. Отделить исходный корень графическим методом

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

x3+3x2-6x-1=0

Описать выше указанный метод, составить блок-схему, привести пример

2. Составить программу для вычисления дифференциального уравнения методом Эйлера у=x3-y3 ; y(0,1)=0,5; [a;b]= [0,1;0,6] ; h=0,05. Описать выше указанный метод, составить блок-схему, привести пример.

3. Составить программу для умножения матрицы на вектор

4

0,86

0,3

3

A=

0,05

2

0,14

B=

4

0,07

0,5

-3

-2

Описать выше указанный метод, составить блок-схему, привести пример.

2 Математическое описание методов

2.1 Вычисление алгебраического уравнения методом половинного деления

Метод деления отрезка пополам является одним из простейших методов нахождения корней нелинейных уравнений вида . Он состоит в следующем. Допустим, что нам удалось найти отрезок , на котором расположено искомое значение корня , т. е. . В качестве начального приближения корня принимаем середину этого отрезка: . Далее исследуем значения функции на концах отрезков и т. е. в точках . Тот из отрезков, на концах которого принимает значения разных знаков, содержит искомый корень; поэтому его принимаем в качестве нового отрезка . Вторую половину отрезка , на которой знак не меняется, отбрасываем. В качестве первого приближения корня принимаем середину нового отрезка и т. д. Таким образом, k-е приближение вычисляется как

после каждой итерации отрезок, на котором расположен корень, уменьшается вдвое, а после k итераций он сокращается в раз:

Пусть приближенное решение требуется найти с точностью до некоторого заданного малого числа :

Взяв в качестве приближенного решения k-e приближение корня: , запишем с учетом обозначения с в виде

Итерационный процесс нужно продолжать до тех пор, пока не будет выполнено условие:

В приложении представлена программа для решения нелинейного уравнения x3+3x2-6x-1=0 методом деления отрезка пополам, выполненная на языке программирования C++.

Рисунок 1 Решение уравнения

методом половинного деления

Рисунок 2 Интерфейс решения программы

методом половинного деления

2.2 Решение дифференциальных уравнений. Модифицированный метод Эйлера.

Решить дифференциальное уравнение у/=f(x,y) численным методом - это значит для заданной последовательности аргументов х0, х1…, хn и числа у0, не определяя функцию у=F(x), найти такие значения у1, у2,…, уn, что

уi=F(xi)(i=1,2,…, n) и F(x0)=y0. (1)

Таким образом, численные методы позволяют вместо нахождения функции У=F(x) получить таблицу значений этой функции для заданной последовательности аргументов. Величина h=xk-xk-1 называется шагом интегрирования.

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

Рассмотрим дифференциальное уравнение первого порядка (1) с начальным условием

x=x0, y(x0)=y0 (2)

Требуется найти решение уравнения (1) на отрезке [а,b].

Разобьем отрезок [a, b] на n равных частей и получим последовательность х0, х1, х2,…, хn, где xi=x0+ih (i=0,1,…, n), а h=(b-a)/n-шаг интегрирования.

В методе Эйлера приближенные значения у(хi)yi вычисляются последовательно по формулам уi+hf(xi, yi) (i=0,1,2…).

При этом искомая интегральная кривая у=у(х), проходящая через точку М00, у0), заменяется ломаной М0М1М2… с вершинами Мi(xi, yi) (i=0,1,2,…); каждое звено МiMi+1 этой ломаной, называемой ломаной Эйлера, имеет направление, совпадающее с направлением той интегральной кривой уравнения (1), которая

проходит через точку Мi. Если правая часть уравнения (1) в некотором прямоугольнике R{|x-x0|a, |y-y0|b}удовлетворяет условиям:

|f(x, y1)- f(x, y2)|  N|y1-y2| (N=const), (3)

|df/dx|=|df/dx+f(df/dy)|  M (M=const),

то имеет место следующая оценка погрешности:

|y(xn)-yn|  hM/2N[(1+hN)n-1], (4)

где у(хn)-значение точного решения уравнения (1) при х=хn, а уn- приближенное значение, полученное на n-ом шаге.

На практике иногда оказывается более удобным двойной просчет: сначала расчет ведется с шагом h, затем шаг дробят и повторный расчет ведется с шагом h/2. Погрешность более точного значения уn* оценивается формулой

|yn-y(xn)||yn*-yn|. (5)

Метод Эйлера легко распространяется на системы дифференциальных уравнений и на дифференциальные уравнения высших порядков. Последние должны быть предварительно приведены к системе дифференциальных уравнений первого порядка.

В приложении представлена программа для вычисления дифференциального уравнения методом Эйлера у=х33, у(0,1)=0,5, [0,1;0,6] ,h=0,05 , выполненные на языке программирования C++.

Рисунок 3 Решение уравнения

методом Эйлера

Рисунок 4 Интерфейс решения программы

методом Эйлера