Автор работы: Пользователь скрыл имя, 10 Января 2011 в 01:14, курсовая работа
Целью курсовой работы является обретение и закрепление навыков применения информационных технологий и программирования при решении задач по специальности. В курсовой работе создаётся Windows-приложение на алгоритмическом языке Object Pascal в среде визуального программирования Delphi, которое будет обеспечивать решение специализированных задач по решению систем нелинейных уравнений.
ВВЕДЕНИЕ 7
1 ПОСТАНОВКА ЗАДАЧИ 10
2 РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ В СРЕДЕ DELPHI 11
2.1 Краткое описание сущности метода касательных 11
( метода секущих Ньютона) 11
2.1. Отделение корней и предварительный анализ. 11
2.2. Уточнение корней 14
2.2.1 Уточнение корней методом касательных 14
2.2.2 Уточнение корней методом хорд 17
2.2.3 Уточнение корней методом деления отрезка пополам 19
2.3 Разработка программного продукта в среде Delphi 23
2.4 Результаты тестирования программного продукта 31
4 СРАВНЕНИЕ РЕШЕНИЙ, ПОЛУЧЕННЫХ РАЗЛИЧНЫМИ СПОСОБАМИ 34
ЗАКЛЮЧЕНИЕ 36
СПИСОК ЛИТЕРАТУРЫ 37
function f(xs:Extended):real;
begin
a := ValA;
f:= ln(abs(ln(abs(xs*a))))+a*exp(
end;
{Описываем функцию, реализующую основной алгоритм}
function DOP(a,b:Extended):real;
label 1;
var x:real;
begin
repeat
x:=(a+b)/2;
if f(a)*f(x)<0 then b:=x
else
if f(b)*f(x)<0 then a:=x
else goto 1;
until (b-a)<=2*Eps;
1:
DOP:=x;
end;
{Раздел операторов}
begin
a := beg;
b := ends;
x:=DOP(a,b);
MemoDOP.Lines.Add('Уточненное значение корня x='+FloatToStr(x));
end;
2.3
Разработка программного
продукта в среде Delphi
Для решения нелинейного уравнение необходимо предусмотреть ввод исходных данных:
Ввод исходных данных организуем при помощи компонента «TEdit», вывод – при помощи компонента «TMemo». При нажатии кнопки «Решение» (компонент TButton) вызываются подпрограммы решения нелинейного уравнения:
MetKas – метод касательных;
MetHord – метод хорд;
MetDOP – метод деления отрезка пополам.
Внешний
вид разработанного приложения представлен
на рисунке 2.6.
Рисунок
2.6 – Внешний вид разработанного приложения
unit Proga_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
MemoKas: TMemo;
GroupBox1: TGroupBox;
Label1: TLabel;
Inter1Beg: TEdit;
Label2: TLabel;
Inter2Beg: TEdit;
Label3: TLabel;
Inter3Beg: TEdit;
Label4: TLabel;
ValueE: TEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
MText1: TEdit;
MText2: TEdit;
MText3: TEdit;
Button1: TButton;
Label8: TLabel;
ValueA: TEdit;
Label9: TLabel;
Label10: TLabel;
MemoHord: TMemo;
Label11: TLabel;
MemoDOP: TMemo;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Inter1End: TEdit;
Inter2End: TEdit;
Inter3End: TEdit;
procedure MetDOP(beg,ends : Extended);
procedure MetKas(beg,ms : Extended);
procedure MetHord(c,beg,ms : Extended);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Interval1Beg,Interval2Beg,
Interval1End,Interval2End,
M1,M2,M3 : Extended;
x,Eps,ValA,ValC : Extended;
implementation
{$R *.dfm}
procedure TForm1.MetKas(beg,ms : Extended);
{Описание функции
решения уравнения методом
function getf(xs:Extended):Extended;
var f,a : Extended;
begin
a := ValA;
f:= ln(abs(ln(abs(xs*a))))+a*exp(
getf := f;
end;
{Описание производной функции}
function getp(xs:real):real;
var a,p : Extended;
begin
a := ValA;
p:= 1/(xs*ln(xs*a))+0.75*a/(exp(
getp := p;
end;
{Описание функции, реализующей алгоритм метода уточнения корней}
function MK(x,M:Extended):Extended;
var x0:Extended;
begin
repeat
x0:=x;
x:=x0-getf(x0)/getp(x0);
until abs(getf(x))/M<=Eps;
MK:=x;
end;
{Раздел операторов}
begin
{Находим с помощью функции МК уточненное значение корня и при-сваиваем его переменной х}
x := 0;
x:=MK(beg,ms);
MemoKas.Lines.Add('Уточненное
значение корня x='+FloatToStr(
end;
procedure TForm1.MetHord(c,beg,ms : Extended);
{Описание функции
решения уравнения методом
function getf(xs:Extended):Extended;
var f,a : Extended;
begin
a := ValA;
f:= ln(abs(ln(abs(xs*a))))+a*exp(
getf := f;
end;
{Описание функции, реализующей алгоритм метода уточнения корней}
function MCh(c,x,M:Extended):Extended;
var x0:Extended;
begin
repeat
x0:=x;
x:=(c*getf(x0)-x0*getf(c))/(
until abs(getf(x))/M<=Eps;
MCh:=x;
end;
{Раздел операторов}
begin
{Находим с помощью
функции МК уточненное
x := 0;
x:=MCh(c,beg,ms);
MemoHord.Lines.Add('Уточненное значение корня x='+FloatToStr(x));
end;
procedure TForm1.MetDOP(beg,ends : Extended);
var a,b,x:Extended;
{Описываем функцию}
function f(xs:Extended):real;
begin
a := ValA;
f:= ln(abs(ln(abs(xs*a))))+a*exp(
end;
{Описываем функцию, реализующую основной алгоритм}
function DOP(a,b:Extended):real;
label 1;
var x:real;
begin
repeat
x:=(a+b)/2;
if f(a)*f(x)<0 then b:=x
else
if f(b)*f(x)<0 then a:=x
else goto 1;
until (b-a)<=2*Eps;
1:
DOP:=x;
end;
{Раздел операторов}
begin
a := beg;
b := ends;
x:=DOP(a,b);
MemoDOP.Lines.Add('Уточненное значение корня x='+FloatToStr(x));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
{очищаем компоненты Мемо}
MemoKas.Clear;
MemoHord.Clear;
MemoDOP.Clear;
{получаем начальные значения интервалов}
Interval1Beg := StrToFloat(Inter1Beg.Text);
Interval2Beg := StrToFloat(Inter2Beg.Text);
Interval3Beg := StrToFloat(Inter3Beg.Text);
{получаем конечные значения интервалов}
Interval1End := StrToFloat(Inter1End.Text);
Interval2End := StrToFloat(Inter2End.Text);
Interval3End := StrToFloat(Inter3End.Text);
{получаем значения М}
M1 := StrToFloaT(MText1.Text);
M2 := StrToFloaT(MText2.Text);
M3 := StrToFloaT(MText3.Text);
{точность решения}
Eps := StrToFloat(ValueE.Text);
{параметр А}
ValA := StrToFloat(ValueA.Text);
// МЕТОД КАСАТЕЛЬНЫХ
MetKas(Interval1Beg,M1);
MetKas(Interval2End,M2);
MetKas(Interval3Beg,M3);
// МЕТОД ХОРД
MetHord(Interval1End,
MetHord(Interval2Beg,
MetHord(Interval3End,
// МЕТОД ПОЛОВИННЫЗ ОТРЕЗКОВ
MetDOP(Interval1Beg,
MetDOP(Interval2Beg,
MetDOP(Interval3Beg,
end;
end.
2.4 Результаты тестирования программного продукта
На рисунке 2.7 представлен скриншот программы
после ввода исходных данных
Рисунок 2.7 – Рабочее окно программы
После нажатия на копку «Решение» вызываются подпрограммы решения нелинейных уравнений, результаты которых помещаются в компоненты «TMemo» (рисунок 2.8)
Рисунок
2.8 – Результат работы разработанного
приложения
3
РЕШЕНИЕ НЕЛИНЕЙНЫХ
УРАВНЕНИЙ ПРИ ПОМОЩИ
ПАКЕТА MAPLE
стартуем математический пакет
>
restart;
записываем в символьном
виде уравнение
> y := ln(abs(ln(abs(x*a))))+a*x^(0.
>
> a := 1;
решаем уравнение
на отрезке [0.3;0.45]
> fsolve(y,x,0.3..0.45);
решаем уравнение
на отрезке [0.5;0.7]
> fsolve(y,x,0.5..0.7);
решаем уравнение
на отрезке [1.3;1.6]
> fsolve(y,x,1.3..1.6);
4 СРАВНЕНИЕ РЕШЕНИЙ, ПОЛУЧЕННЫХ РАЗЛИЧНЫМИ СПОСОБАМИ
В
таблице 4.1 сведены решения, полученные
различными методами
Таблица 4.1 – Данные, полученные различными методами
Метод решения | Параметр а | Корни уравнения
|
Касательных | 1 | 0,36 0,65 1,37 |
Хорд | 0,42 0,61 1,39 | |
Деления пополам | 0,30 0,50 1,30 | |
Maple | 0,40 0,65 1,38 |
Информация о работе Решение нелинейных уравнений в среде Delphi