0 / 0 / 0
Регистрация: 24.10.2015
Сообщений: 18
1

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

31.05.2017, 09:50. Показов 829. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Утро доброе. Возникла проблема с написанием программного модуля. Задание звучит так: Разработать программный модуль вычисления действительных корней уравнения методом половинного деления, методом касательных, методом хорд. Возможные корни уравнения должны быть выделены в интервалах длиной = 0.1 (отдельный алгоритм).
cos(k*x+x²)+x²+(1.4/x+a) , а=0.42, k=2, х∈[-10;10].
Часть программы у меня есть, но она не доработана и выдает ошибки. Прошу помочь в доработке и проверки на работоспособность данной программы.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label2: TLabel;
    Button3: TButton;
    function f1(x:double):double;
    function f2(x:double):double;
    Function Chord(a, b: Double): Double;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  z,a,b,e,x,c,f11,f22,fx:double;
  n:integer;
  hasroot:boolean;
const k=2;
      t=0.42;
implementation
 
{$R *.dfm} 
function TForm1.f1(x: double): double;
begin
f1:= cos(k*x+sqr(x))+sqr(x)+(1.4/(x+t))- 1.6;
end;
function TForm1.f2(x:double): double;
begin
f2:=2*x-sin(x*x+k*x)*(k+2*x)-(1.4/(sqr(t+x)))
end;
Function TForm1.Chord(a, b: Double): Double;
Begin
   Chord := (f1(b)*a - f1(a)*b) / (f1(b) - f1(a));
End;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
e:=strtofloat(edit3.text);
if f1(a)*f2(a)>0 then x:=a
else x:=b;
while abs(f1(x))>e do
begin
x:=x-f1(x)/f2(x);
end;
label2.visible:=false;
label1.caption:=floattostr(x);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
e:=strtofloat(edit3.text);
n := 0;
Repeat
   C := Chord(a, b);
   If f1(a)*f1(C) >= 0 Then a := c
   Else b := c;
   Inc(n)
Until Abs(Chord(a, b) - C) < e;
 
z := c;
label2.Visible:=true;
label1.caption:=floattostr(z);
label2.Caption:=floattostr(n);
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
e:=strtofloat(edit3.text);
begin
    f11 := f1(a);
    f22 := f1(b);
    if f11*f22>0 then
    begin
        HasRoot := False;
    end
    else
    begin
        HasRoot := True;
        n:=0;
        repeat
            x := (a+b)/2;
            fx := f1(x);
            if f11*fx>0 then
            begin
                a := x;
                f11 := fx;
            end
            else
            begin
                b := x;
                f22 := fx;
            end;
            inc(n);
        until  not (Abs(a-b)>e);
        x := (a+b)/2;
    end;
end;
label2.Visible:=true;
if hasroot=false then label1.Caption:='Нету корней на выбранном участке'
else label1.caption:=floattostr(x);
label2.Caption:=floattostr(n);
end;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2017, 09:50
Ответы с готовыми решениями:

Написать программу для вычисления действительных корней биквадратного уравнения
сложить алгоритм и программу для вычисления действительных корней биквадратного уравнения ax ^ 4 +...

Разработать программу вычисления корней квадратного уравнения
еще нужно когда D&lt;0 2.Разработать программу вычисления корней квадратного уравнения ax2+bx+c=0....

Решить уравнения различными методами
Помогите пожалуста решить :cry: 1.Хорд 2.Итераций 3.Дихотомии 4.Касательных само уравнения...

Найти корни уравнения различными методами
Форумчане кто поможет с заданием или хотя бы примерами. Задание: Найти наименьший корень...

2
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
31.05.2017, 14:31 2
Можно так.
Модуль
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
unit Func;
interface
type fn1=function(k,a,x:double):double;//тип исследуемой функции
     fn2=function (f,f1:fn1;k,a,xn,xk,eps:double):double;//тип функции поиска корня
//функция уточнения корня методом бисекции
function Bisec(f,f1:fn1;k,a,xn,xk,eps:double):double;
//функция уточнения корня методом касательных
function Kasat(f,f1:fn1;k,a,xn,xk,eps:double):double;
//функция уточнения корня методом хорд
function Hord(f,f1:fn1;k,a,xn,xk,eps:double):double;
implementation
function Bisec(f,f1:fn1;k,a,xn,xk,eps:double):double;
var c:real;
begin
repeat
c:=(xn+xk)/2;
if f(k,a,xn)*f(k,a,c)<0 then xk:=c
else xn:=c;
until xk-xn<eps;
result:=(xn+xk)/2;
end;
function Kasat(f,f1:fn1;k,a,xn,xk,eps:double):double;
var x1,x2,b:double;
begin
x1:=(xk+xn)/2;
x2:=x1;
repeat
b:=x2;
x2:=b-f(k,a,b)/f1(k,a,b);
until abs(x2-b)<eps;
result:=x2;
end;
function Hord(f,f1:fn1;k,a,xn,xk,eps:double):double;
var c:double;
begin
repeat
c:=(f(k,a,xk)*xn-f(k,a,xn)*xk)/(f(k,a,xk)-f(k,a,xn));
if f(k,a,xn)*f(k,a,c)>0 then xn:=c else xk:= c;
until abs((f(k,a,xk)*xn-f(k,a,xn)*xk)/(f(k,a,xk)-f(k,a,xn))-c)<eps;
result:=c;
end;
end.
Программа
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
implementation
 
{$R *.dfm}
const k=2;   //константы по условию
      a=0.42;
      dx=0.1;
      e=0.0001;
      xn=-10;
      xk=10;
function f(k,a,x:double):double; //функция
begin
f:=cos(k*x+x*x)+x*x+1.4/(x+a)-1.6;
end;
function f1(k,a,x:double):double; //первая производная
begin
f1:=2*x-(k+2*x)*sin(k*x+x*x)-7/(5*sqr(x + a))
end;
procedure Korni(fun:fn2;m:TMemo;s:string);//процедура поиска корней
var x,x11,x12:double;
    i:byte;
begin
x:=xn;
m.Clear;
m.Lines.Add(s);//'Метод половинного деления'+#13#10);
//поскольку при х=-а разрыв функции, делим интервал на 2 [-10;-0.5] и [-0.4;10]
while x<-a-dx do
 begin
  x11:=x;
  x12:=x+dx;
  if f(k,a,x11)*f(k,a,x12)<0 then //если знаки функции разные на концах отрезка}
   begin
    i:=i+1;
    m.Lines.Add('Интервал  ['+formatfloat('0.0',x11)+';'+formatfloat('0.0',x12)+']'+
   inttostr(i)+'='+formatfloat('0.0000',fun(f,f1,k,a,x11,x12,e)));//уточняем корень
   end;
  x:=x+dx;
 end;
x:=-0.4;
while x<xk do
 begin
  x11:=x;
  x12:=x+dx;
  if f(k,a,x11)*f(k,a,x12)<0 then //если знаки функции разные на концах отрезка}
   begin
    i:=i+1;
    m.Lines.Add('Интервал ['+formatfloat('0.0',x11)+';'+formatfloat('0.0',x12)+']'+
    '  x'+inttostr(i)+'='+formatfloat('0.0000',fun(f,f1,k,a,x11,x12,e)));//уточняем корень
   end;
  x:=x+dx;
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Korni(Bisec,Memo1,'Метод половинного деления');
Korni(Kasat,Memo2,'Метод касательных');
Korni(Hord,Memo3,'Метод хорд');
end;
Вложения
Тип файла: rar Корни 3 метода.rar (165.1 Кб, 6 просмотров)
1
0 / 0 / 0
Регистрация: 24.10.2015
Сообщений: 18
31.05.2017, 15:17  [ТС] 3
Спасибо большое вам за быструю помощь!
0
31.05.2017, 15:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2017, 15:17
Помогаю со студенческими работами здесь

Разработать программу «Численное интегрирование» различными методами в С++
Помогите Разработать программу «Численное интегрирование» различными методами: 1) по формуле...

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

Нахождение корней нелинейного уравнения 4 методами
Если кому не сложно, пожалуйста, откликнитесь. Через поиск просматривала темы, но не очень-то...

Найдите сумму действительных корней уравнения
Скорее всего это элементарная задача, но додуматься до решения не смог. Нужно найти сумму...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru