Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.81
Swex
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 15
#1

Метод хорд для решения нелинейного уравнения - Delphi

31.03.2012, 23:36. Просмотров 3725. Ответов 25
Метки нет (Все метки)

Проблема вылазит при нажатии на кнопку вычислить в строке, где опичывается функция f (64-ая строчка)... дело с ln... промежуток брал от 1 и дальше...не знаю как исправить...

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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Math, Series;
 
type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Chart1: TChart;
    Series1: TLineSeries;
    Edit5: TEdit;
    TabSheet2: TTabSheet;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Label1: TLabel;
    Button3: TButton;
    Chart2: TChart;
    ListBox1: TListBox;
    Series2: TLineSeries;
    Edit10: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
function f(x,a:extended):extended;
begin
f := a*power(cos(abs(x)),3)+a*sin(a*x)+a*power((sin(x)/cos(x)),4)+a*power(ln(abs(x)),2)+a;
end;
 
function pp(x,a:extended):extended;
begin
pp := power((-a),3)*sin(a*x);
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
var j:extended;
var x,x0,e,c,x1,x2,a:extended;
begin
e:= strtofloat(Edit3.Text);
X1 := strtofloat(Edit1.Text);
x1:=max(x1,0);
X2 := strtofloat(Edit2.Text);
a := strtofloat(Edit5.Text);
x := x1;
c := x2;
if f(c,a)*pp(a,c)<0 then begin c := x1; x := x2 end;
repeat
  x0 := x;
  x := (c*f(a,x0)-x0*f(a,c))/(f(a,x0)-f(a,c));
until abs(f(x,a))/0.00001<=e;
j := x;
Memo1.Lines.Add('Корень для метода хорд: '+floattostrf(j,ffgeneral,5,3));
end;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2012, 23:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод хорд для решения нелинейного уравнения (Delphi):

Решение нелинейного уравнения методом хорд - Delphi
Помогите написать программу для решения нелинейного уравнения sqrt(x)-cos(0,387*x) по данной схеме.

Найти корень нелинейного уравнения четыремя методами: половинного деления, касательных, хорд, итераций - Delphi
Задание. Отделить корни уравнений F(x) = 0 и уточнить значения корней (или одного из них) с точностью е = 10-3. Напечатать приближенные...

Найти корень нелинейного уравнения F(x)=0 методом хорд. Крайние значения предела ([a,b]) содержащий корень и погрешность (\epsilon ) вводятся с клавиа - Delphi
Найти корень нелинейного уравнения F(x)=0 методом хорд. Крайние значения предела () содержащий корень и погрешность (\epsilon ) вводятся с...

Решение нелинейного уравнения. Метод Ньютона - Delphi
здравствуй, помогите пожалуйста найти ошибку в программе! необходимо найти корень уравнения методом Ньютона, входные данные - отрезок,...

Найти корень уравнения Метод Хорд - Delphi
Задача, Найти корень уравнения sin(x)=0,5 методом хорд. Не могу понять как делать. Может кто подскажет как

Найти корень нелинейного уравнения F(x)=0 методом касательных (метод Ньютона). Крайние значения предела ([a,b]) содержащий корень и погрешность (\epsi - Delphi
Найти корень нелинейного уравнения F(x)=0 методом касательных (метод Ньютона). Крайние значения предела () содержащий корень и погрешность...

25
Swex
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 15
01.04.2012, 15:46  [ТС] #16
при перемещении графика по оси Y длина меняется...
0
Миниатюры
Метод хорд для решения нелинейного уравнения   Метод хорд для решения нелинейного уравнения  
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
01.04.2012, 15:48 #17
Swex, через tchart в delphi строите? А Вы уверены насчет правильности построения? Я строил через онлайн построитель.
0
Swex
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 15
01.04.2012, 15:53  [ТС] #18
да, через Tchart...в правильности не уверен. нас только так учили. вот кусок программы по которому строится

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button2Click(Sender: TObject);
var X1,X2,x,h,f,tg,a:extended;
begin
X1 := strtofloat(Edit1.Text);
X2 := strtofloat(Edit2.Text);
h := strtofloat(Edit4.Text);
a := strtofloat(Edit5.Text);
x := x1;
while x<=X2 do
 begin
 tg:=sin(x)/cos(x);
  f := a*cos(abs(x))*cos(abs(x))*cos(abs(x))+a*sin(a*x)+a*tg*tg*tg*tg+a*ln(x)*ln(x)+a;
  series1.addXY(x,f);
   x := x+h;
end;
end;
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
01.04.2012, 15:59 #19
Вижу тангенс как переменную, не зависящую от x. И чему же он равен?
0
Swex
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 15
01.04.2012, 16:03  [ТС] #20
ну sin c cos зависят же. Если писать tg(x) там ошибка... а как нужно?
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
01.04.2012, 16:45 #21
Swex, хм, я вроде на первой странице описал. Тангенс - это синус/косинус. Т.е. можно написать функцию tg со входным параметром x, что я и сделал. Перепишу сюда:
Delphi
1
2
3
4
function tg(x: real): real;
begin
 tg:=sin(x)/cos(x);
end;
А далее в коде уже писать как tg(x).

Добавлено через 38 минут
Ну, что? Все еще пересекает?
1
Swex
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 15
01.04.2012, 21:17  [ТС] #22
да, такая же ерунда...к преподу подойду спрошу...
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
01.04.2012, 21:48 #23
Swex, нашел я, откуда эта ошибка. Там постоянно ln(0) был, что означает "бесконечность". Нужно, чтобы изначально x был равен какому-нибудь очень малому значению. Но! График все равно никак не пересекает ось. А посему и корней нет.
0
Swex
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 15
01.04.2012, 21:51  [ТС] #24
А если записать так: ln(х+0,00001)?
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
01.04.2012, 21:57 #25
Не, так не прокатит. Надо заранее.
Пример:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
Function f(x: real): real;
var a:real;
Begin
 a:=0.5;
 f:=a*cos(abs(x))*cos(abs(x))*cos(abs(x))+
  a*sin(a*x)+a*tg(x)*tg(x)*tg(x)*tg(x)+
  a*sqr(ln(x))+a;
End;
............
begin
 x:=0.001;
 f1:=f(x);
end;
0
Миниатюры
Метод хорд для решения нелинейного уравнения  
Swex
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 15
01.04.2012, 22:04  [ТС] #26
Спасибо за помощь!
0
01.04.2012, 22:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2012, 22:04
Привет! Вот еще темы с ответами:

Метод хорд для дух функций (проверка) - Delphi
Написал программу, вроде считает что-то, проверте правильная она . Заранее благодарю. implementation {$R *.dfm} type TFunc =...

Метод хорд, метод касательных, метод половинного деления - Delphi
Ребят помогите пожалуйста. Задали тему курсовой &quot;Решение нелинейных уравнений (метод хорд, метод касательных, метод половинного деления)&quot;....

Написал код для уточнения корней уравнения методом хорд. Но не знаю правильно ли. Посмотрите кто может - Delphi
Программа работает, но правильно ли? unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes,...

Создать Windows-приложение для решения уравнения ax+b=0 - Delphi
Создать Windows-приложение для решения уравнения ax+b=0;


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.