Автор работы: Пользователь скрыл имя, 29 Апреля 2013 в 12:28, курсовая работа
На всех этапах технического обеспечения информационных процессов для информатики ключевым вопросом есть эффективность. Для аппаратных средств под эффективностью понимают соотношение производительности оснащения к его стоимости. Для программного обеспечения под эффективностью принято понимать производительность работающих с ним пользователей. В программировании под эффективностью понимают объем программного кода, созданного программистами за единицу времени. В информатике все жестко ориентированно на эффективность. Вопрос как осуществить ту или другую операцию, для информатики важный, но не основной. Основным есть вопрос, как совершить данную операцию эффективно.
Введение……………………………………………………………………………
1. Решение задач на массив. Работа в Delphi…………………………………
1.1. Решение задачи на одномерный массив данных на Delphi……………….
1.2. Решение задачи на двумерный массив данных на Delphi…………………
2.Численные методы решения задач. Создать проект на Delphi, позволяющий решать задачи на численные методы. Выполнить проверку решения данных задач в программе MathCAD.............................
2.1. Вычисление определенного интеграла (метод трапеции)………..............
2.2. Решение трансцендентных уравнений (метод половинного деления)….
2.3. Решение системы линейных уравнений (метод Гаусса)………………….
2.4. Решение дифференциального уравнений (методом Эйлера)……….........
3. Оптимизационные модели. Составить в табличном процессоре Excel таблицу, заполнить таблицу, выполнить вычисления. Описать
теоретически выполненную работу……………................................................
3.1. Решение задачи линейного программирования симплекс-методом……...
3.2. Решение транспортной задачи………………………………………………
4. Создание презентации. Создать в программе PowerPoint презентацию, представляющую курсовую работу…………………….....................................
Заключение...............................................................................................................
Приложение 1. блок-схема алгоритма решения задачи на одномерный массив.........................................................................................................................
Приложение 2. блок-схема алгоритма решения задачи на двумерный массив
Приложение 3. блок-схема алгоритма решения задачи на двумерный массив
Приложение 4. блок-схема алгоритма решения задачи на двумерный массив
Приложение 5. блок-схема алгоритма решения задачи на двумерный массив
Метод трапеций
Метод трапеций обеспечивает более
точное определение подынтегральной
функции и заключается в
Кривая подынтегральной
Площадь этой фигуры, которую ми также обозначим через S, равна сумме площадей
трапеций
Таким образом, приближенное значение интегралов по формуле трапеций будет иметь вид:
Блок-схема метода трапеций на рис.7.
Задание
1.Создать проект на Delphi, позволяющий решать задачи на численные методы.
Пример: . Форма с решением задачи определенного интеграла (метод
трапеции) на рис.8.
Рис.8.Форма с решением определенного интеграла (метод трапеции)
Ниже приведена распечатка программы:
procedure TForm1.Button1Click(Sender: TObject);
var
n,i:integer;
a,b,s,h,x:real;
function f(k:real):real;
begin
f:=sqrt(k)*cos(k*k);
end;
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
n:=strtoint(edit3.text);
h:=(b-a)/n;
s:=(f(a)+f(b))/2;
x:=a+h;
for i:=1 to n do
begin
s:=s+f(x);
x:=x+h;
end;
s:=s*h;
edit4.text:=floattostr(s);
end;
end.
2. Выполнить проверку решения данных задач в программе MathCAD.
Пример: Значение интеграла было найдено в Delphi по алгоритму. Была проведена проверка в MathCAD результат на рис.9.
Рис.9.Решение определенного интеграла в Mathcad
2.2. Решение трансцендентных уравнений (метод половинного деления)
Необходимость отыскания корней нелинейных алгебраических и трансцендентных
уравнений встречается при расчетах линейных систем автоматического регулирования, собственных колебаний машин и конструкций со многими степенями свободы и т.д.
Для решения нелинейных уравнений наиболее пригодными для реализации на ЭВМ являются методы последовательных приближений (итерационные), сводящиеся к последовательному уточнению начального приближения корня.
В практических вычислениях довольно часто приходится решать уравнения вида:
f(x)=0,
где функция f(x) определена и непрерывна на некотором конечном или бесконечном интервале a <. х <. b.
Если функция представляет собой многочлен, то уравнение (1) называют алгебраическим, если же в функцию f(x) входят элементарные (тригонометрические, логарифмические, показательные и т. п.)функции, то такое уравнение называют трансцендентным.
Всякое значение х*, обращающее функцию f (х) в нуль, т. е. такое, что
f (х*)=0,
называется корнем уравнения (1), а способ нахождения этого значения х* и есть решение уравнения (1) .
Найти корни уравнения вида (1) точно удается лишь в частных случаях. Кроме того, часто уравнение содержит коэффициенты, известные лишь приблизительно, и, следовательно, сама задача о точном определении корней уравнения теряет смысл. Поэтому разработаны методы численного решения уравнений вида (1), которые позволяют отыскать приближенные значения корней этого уравнения.
При этом приходится решать две задачи:
1) отделение корней, т. е. отыскание достаточно малых областей, в каждой из которых заключен один и только один корень уравнения;
2) вычисление корней с заданной точностью.
При выделении областей, в которых находятся действительные корни уравнения (1),
можно воспользоваться тем, что если на концах некоторого отрезка непрерывная функция f(x) принимает значения разных знаков, то на этом отрезке уравнение f(x)=0 имеет хотя бы один корень.
Промежутки существования
Рис.10.
Отделение корней
Для отделения корней используется тот факт, что отрезок содержит корень уравнения, если на концах отрезка функция f(x) имеет разные знаки. Достаточно большой отрезок [a,b] просматривается с некоторым шагом h и выделяются знакопеременные отрезки.
Можно, например, взять отрезок [-10,10] с шагом h=1 (рис. 10). Задаются начальные значения x1,x2 и y1 (y1-значение функции в точке x1, x1 и x2 – начальное и конечное значения единичного отрезка). Далее в цикле считается значение функции в точке x2 и проверяется знак произведения y1*y2. Если произведение положительно, значит на отрезке [x1,x2] корня нет, и следует переместиться в следующий отрезок, изменив значения x1 и x2. Если же произведение отрицательно, значит на отрезке [x1,x2]существует корень. Отрезок существования корня выводится на печать, и ищутся другие отрезки, на которых также есть корень. Таким образом, просматривается весь промежуток от a до b.
Уточнение корня
Для решения второй задачи существуют многочисленные методы, из которых мы рассматриваем несколько: метод итерации, метод Ньютона и метод половинного деления.
При изложении этих методов считаем, что нам известен отрезок a < x < b, внутри которого существует и располагается один и только один из корней уравнения (1).
Задача состоит в нахождении этого корня.
Уточнение корня по методу половинного деления
Если вид функции f (x) достаточно сложный, то вычисление функции f¢ (x) , необходимой для оценки сходимости в методе итераций, затруднительно. Для решения таких уравнений можно использовать метод половинного деления, который, хотя и требует значительного объема вычислительной работы, но всегда приводит к искомому результату.
Пусть дано уравнение f(x) = 0, где функция f(x) непрерывная на отрезке [a,b] и f(a)*f(b) <0.
Делим отрезок [a,b] пополам, т.е. выбираем начальное приближение равным (рис. 11). Если f(x) = 0, то x0 является корнем уравнения. Если f(x) ¹ 0, то выбираем тот из отрезков [a,x0] или [x0, b], на концах которого функция f(x) имеет противоположные знаки. Полученный отрезок снова делим пополам и проводим то же рассмотрение и т.д.
Рис.11.
Процесс деления отрезков пополам продолжаем до тех пор, пока длина отрезка, на концах которого функция имеет противоположные знаки, не будет меньше наперед заданного числа e. Блок-схема на рис.12.
Рис.12.Блок-схема решение трансцендентного уравнения методом половинного деления
Задание
1.Создать проект на Delphi, позволяющий решать задачи на численные методы.
Пример: Форма с решением задачи трансцендентного уравнения (методом половинного деления) на рис.13.
Рис.13.Форма с решение трансцендентного уравнения
Ниже приведена распечатка программы:
Var
Form1: TForm1;
x11,x12:real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
h:integer;
a,b,y1,y2,x1,x2:real;
function f(k:real):real;
begin
f:=3*k+cos(k)+1;
end;
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
h:=strtoint(edit3.text);
x1:=a;
x2:=x1+h;
y1:=f(x1);
repeat
y2:=f(x2);
if y1*y2<0 then begin x11:=x1;x12:=x2; edit4.text:=edit4.text+' '+floattostr(x1)+' '+floattostr(x2); end;
x1:=x2;
y1:=y2;
x2:=x1+h;
until x2>b;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
e,y,x,z:real;
function f(k:real):real;
begin
f:= 3*k+cos(k)+1;
end;
begin
y:=f(x11);
e:=0.00001;
repeat
x:=(x11+x12)/2;
z:=f(x);
if z=0 then break
else
if y*z<0 then x12:=x
else
x11:=x;y:=z;
until abs(x12-x11)<e;
edit5.text:=edit5.text+' '+floattostr(x);
end;
end.
2. Выполнить проверку решения данных задач в программе MathCAD.
Пример:
Значение трансцендентного уравнения было найдено в Delphi по алгоритму. Была проведена проверка в MathCAD результат на рис.14.
Рис.14. Решение трансцендентного уравнения в Mathcad
2.3. Решение системы линейных уравнений (метод Гаусса)
Алгоритм отыскания решения системы n линейных алгебраических уравнений методом Гаусса состоит из следующих основных этапов:
1. Коэффициент aki свободные члены bк системы размещаются в памяти ЭВМ в форме массива - прямоугольной матрицы вида:
где
В том случае, когда диагональный элемент равен нулю, нужно поменять местами уравнения в системе.
2. Первая строка матрицы делится на a11. Затем умножается на aк1 (к=2,3, …n) и вычитается из к-й строки (последовательно из 2, 3, n-й строк); элементы первого столбца матрицы, начиная с а2 и до an, становятся нулями:
где обозначение А' принято для преобразованной матрицы.
3. Вторая строка матрицы А делится на а2`, а затем умножается на aк2` и вычитается из всех строк с К = 3,4, . . ., n
4. Действия, аналогичные перечисленным в п 2, 3, повторяются до тех пор, пока подобная процедура не будет проделана с (n-1)-й строкой матрицы; при этом матрица будет приведена к виду:
5. Элементы последней строки полученной матрицы позволяют вычислить значение
6. Значение корня xn используется для отыскания матрицы Аn-1 , а затем последовательно вычисляются корни xn-2 . . . x, по формулам:
Алгоритм решения задачи в виде блок-схемы приведен на рис.15.
Рис.15.Блок-схема на решение систем линейного уравнения методом Гаусса
Задание
1.Создать проект на Delphi, позволяющий решать задачи на численные методы.
Пример:
Форма с решением задачи систем линейного уравнения (методом Гаусса) на рис.16.
Рис.16.Форма с решение системы линейного уравнения (метод Гаусса)
Ниже приведена распечатка программы:
procedure TForm1.Button1Click(Sender: TObject);
var
c,r:Double;
k,n,i,j:integer;
x,b:array[1..10] of Double;
a:array[1..10,1..10] of Double;
begin
n:=4;
a[ 1,1]:=strtofloat(edit1.Text);
a[ 1,2]:=strtofloat(edit2.Text);
a[ 1,3]:=strtofloat(edit3.Text);
a[ 1,4]:=strtofloat(edit4.Text);
a[ 1,5]:=strtofloat(edit5.Text);
a[ 2,1]:=strtofloat(edit6.Text);
a[ 2,2]:=strtofloat(edit7.Text);
a[ 2,3]:=strtofloat(edit8.Text);
a[ 2,4]:=strtofloat(edit9.Text);
a[ 2,5]:=strtofloat(edit10.Text);
a[ 3,1]:=strtofloat(edit11.Text);
a[ 3,2]:=strtofloat(edit12.Text);
a[ 3,3]:=strtofloat(edit13.Text);
a[ 3,4]:=strtofloat(edit14.Text);
a[ 3,5]:=strtofloat(edit15.Text);
a[ 4,1]:=strtofloat(edit16.Text);
a[4,2]:=strtofloat(edit17.
a[ 4,3]:=strtofloat(edit18.Text);
a[ 4,4]:=strtofloat(edit19.Text);
a[4,5]:=strtofloat(edit20.
edit21.Text:='';
for i:=1 to n do
begin
c:=a[i,i];
for k:=i to n+1 do
b[k]:=a[i,k]/c;
for k:=i to n+1 do a[i,k]:=b[k];
for j:=i+1 to n do
begin
r:=a[j,i];
for k:=i to n+1 do
begin
c:=a[j,k]-r*b[k];
a[j,k]:=c;
end;
end;
end;
for i:=n downto 1 do
for k:=n+1 downto i+1 do
if k=n+1 then x[i]:=a[i,k] else x[i]:=x[i]-a[i,k]*x[k];
edit21.Text:=edit21.Text+
end;
end.
2. Выполнить проверку решения данных задач в программе MathCAD.
Пример:
Значение систем линейного уравнения было найдено в Delphi по алгоритму. Была проведена проверка в MathCAD результат на рис.17.
Рис.17. Решение системы линейного уравнения в Mathcad
2.4. Решение дифференциальных уравнений (методом Эйлера)
Метод численного решения дифференциального уравнения первого порядка
Y’ = f(x,y)
с начальными условиями x0, y(x0)=yo основан на разложении решения в ряд Тейлора в h-окрестности точки x0
y1 = y(x0+h) = y(x0) + hy’(x0) + h2/21 yn (xo)+…..
При отбрасывании всех членов ряда, содержащих проводные второго и высших порядков, получим :
y1 = y(x0+h) = y0 + hf(x0,yo),
где f(x,y) –правая часть дифференциального уравнения (1)
Пользуясь значением y1, из разложения y(x) в h-окрестности точки x1 =x0+h получим