С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 40

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

26.01.2013, 08:17. Показов 1284. Ответов 5
Метки нет (Все метки)

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

Pascal
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
Program laba_5;
Uses crt;
Type ss=set of Char;
Const cifra: ss=['1'];
Type sss=set of Char;
Const cifra2: sss=['2'];
Label S;
Var
 Lx,Rx,x,E,a0,a1,a2,a3,a4,a5,a6:real;
 h,n,i,p:integer;
 promezhytki:Array[0..50] Of real;
 ch: char;
Function f(x:real):real;
 Begin
  f:=a6*x*x*x*x*x*x+a5*x*x*x*x*x+a4*x*x*x*x+a3*x*x*x+a2*x*x+a1*x+a0;
 End;
Function ff(x:real):real;
 Begin
  ff:=6*a6*x*x*x*x*x+5*a5*x*x*x*x+4*a4*x*x*x+3*a3*x*x+2*a2*x+a1;
 End;
Procedure otdelenie(Lx,Rx:real);
 Var
  k,i:integer;
  a1,b1:real;
 Begin
  i:=0;
  n:=1;
   For k:=0 To h Do
    Begin
     a1:=f(Lx+(Rx-Lx)*k/h);
     b1:=f(Lx+(Rx-Lx)*(k+1)/h);
    If a1*b1<0 Then
     Begin
      promezhytki[i]:=Lx+(Rx-Lx)*k/h;
      promezhytki[i+1]:=Lx+(Rx-Lx)*(k+1)/h;
      i:=i+2;
      n:=n+1;
    End;
  End;
End;
 
Procedure DIHOTOMIA;
Var
 iter_d: integer;
 qq: real;
 Begin
  iter_d:=1;
  Repeat
   qq:=x;
   If f((Lx+Rx)/2)*f(Rx)<0 Then Lx:=(Lx+Rx)/2 Else Rx:=(Lx+Rx)/2;
   x:=(Lx+Rx)/2;
   inc(iter_d);
  Until (Abs(qq-x)<E) or (iter_d>20);
  WriteLn('Chislo iteracii po metodu dihotomii: ',iter_d);
End;
 
Procedure SEKUSHIH;
 Var
  q,qq: real;
  iter_s: integer;
 Begin
   x:=(Lx+Rx)/2;
   iter_s:=1;
   Repeat
    qq:=x;
    q:=(f(Rx)-f(Lx))/(Rx-Lx);
    if q=0 then q:=1e-9;
    x:=x-f(x)/q;
    inc(iter_s);
   Until  (Abs(x-qq)<E) or (iter_s>20);
   writeln('Chislo iteracii po metodu sekushih: ', iter_s);
 End;
 
Procedure NIUTONA;
 Var
  iter_n: integer;
  q,qq: real;
 Begin
   x:=(Lx+Rx)/2;
   iter_n:=1;
   Repeat
    qq:=x;
    if (ff(x) < 1e-3) then q:=1e-3 else q:=ff(x);
    x:=x-f(x)/q;
    inc(iter_n);
   Until  (Abs(x-qq)<E) or (iter_n>20) ;
   WriteLn('Chislo iteracii po metodu Hiutona: ', iter_n);
 End;
 
Procedure ITERACII;
 Var
  q,qq: real;
  iter_i: integer;
 Begin
   iter_i:=1;
   q:=0.5;
   x:=(Lx+Rx)/2;
   Repeat
    qq:=x;
    x:=x-q*f(x);
    Inc(iter_i);
   Until  (Abs(x-qq)<E) or (iter_i>20);
   WriteLn('Chislo iteracii po metodu Iteracii: ', iter_i);
 End;
 
Begin
 ClrScr;
 WriteLn('1.- Testovii primer;');
 WriteLn('2.- Vvesti polinom;');
 WriteLn('ESC-EXIT');
 ch:=readkey;
 If ch=#27 Then halt;
 If ch in cifra Then
  Begin
   ClrScr;
   a6:=0;
   a5:=0;
   a4:=0;
   a3:=0;
   a2:=1;
   a1:=0;
   a0:=-5;
   Lx:=-10;
   Rx:=10;
   h:=100;
   E:=0.001;
   Otdelenie(Lx, Rx);
   WriteLn('f(x)=x^2-5');
   For i:=0 To n-1 do
    Begin
     p:=i*2;
     Lx:=Promezhytki[p];
     Rx:=Promezhytki[p+1];
     DIHOTOMIA;
     WriteLn('Po metodu DIHOTOMII: ',x:5:5);
     SEKUSHIH;
     WriteLn('Po metodu SEKUSHIH:  ',x:5:5);
     ITERACII;
     WriteLn('Po metodu ITERACII:  ',x:5:5);
     NIUTONA;
     WriteLn('Po Metodu NIUTONA:   ',x:5:5);
    End;
  End;
 If ch In cifra2 Then
  Begin
   ClrScr;
   WriteLn('Vvedite koefficienti polinoma vida: f(x)=a6x^6+a5x^5+a4x^4+a3x^3+a2x^2+a1x+a0');
   Write('Vvedite koefficient a6:');
   ReadLn(a6);
   Write('Vvedite koefficient a5:');
   ReadLn(a5);
   Write('Vvedite koefficient a4:');
   ReadLn(a4);
   Write('Vvedite koefficient a3:');
   ReadLn(a3);
   Write('Vvedite koefficient a2:');
   ReadLn(a2);
   Write('Vvedite koefficient a1:');
   ReadLn(a1);
   Write('Vvedite koefficient a0:');
   ReadLn(a0);
   ClrScr;
S: Write('Vvedite levuju granicu a:');
   ReadLn(Lx);
   Write('Vvedite pravuju granicu b:');
   ReadLn(Rx);
   If Lx>Rx Then
    Begin
     ClrScr;
     WriteLn('Neverno zadan promejutok!');
     Writeln('Vvedite zanovo');
     GoTo S;
    End;
   Write('Vvedite kolichestvo razbienii:');
   ReadLn(h);
   Write('Vvedite tochnost:');
   ReadLn(E);
   ClrScr;
   Otdelenie(Lx, Rx);
   If n=0 Then
    Begin
     WriteLn('Na dannom promejutke net kornei');
     WriteLn('Vvedite novii promejutok');
     GoTo S;
    End;
   For i:=0 To n-1 do
    Begin
     p:=i*2;
     Lx:=Promezhytki[p];
     Rx:=Promezhytki[p+1];
     DIHOTOMIA;
     WriteLn('Po metodu DIHOTOMII: ',x:5:5);
     SEKUSHIH;
     WriteLn('Po metodu SEKUSHIH:  ',x:5:5);
     ITERACII;
     WriteLn('Po metodu ITERACII:  ',x:5:5);
     NIUTONA;
     WriteLn('Po Metodu NIUTONA:   ',x:5:5);
    End;
  End;
  WriteLn('PRESS ENTER');
 ReadLn;
End.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.01.2013, 08:17
Ответы с готовыми решениями:

Исправить программу(численные методы решения уравнений)
Народ, составил программу для решения уравнения методом половинного деления, методом хорд и методом касательных. Видимо сделал не совсем...

Численные методы решения нелинейных уравнений
В гибридных интегральных схемах в качестве одновитковой индуктивности может применяться тонкая металлическая полоска, нанесенная на...

Методы численного решения систем нелинейных уравнений. Операнды - неприводимые типы
Собственно задание - Решить нелинейные уравнения методом Зейделя. Вся проблема в передаче значения в функцию. Давно не писал коды на...

5
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
26.01.2013, 08:55
Рассказывать не умею, поэтому пример как я это делал.
Pascal
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
uses crt;
type Fnc=function(x:real):real;
{$F+}
function F(x:real):real; //исследуемая функция
begin
F:=exp(ln(2)*(-x))-sin(x);
end;
{$F-}
const e=0.000001;
procedure Bisec(F:Fnc;a,b:real;k:integer); //метод уточнения корней
var x,c:real;
begin
repeat
 c:=(a+b)/2;
 if F(a)*F(c)<=0 then b:=c
 else a:=c;
until b-a<e;
x:=(a+b)/2;
if k<10 then writeln('x',k,' =',x:10:6)
else writeln('x',k,'=',x:10:6);
end;
 
var a,b,x1,a2,b2,x2:real;
    k:integer;
begin
a:=-2;//начало интервала иследования
k:=0; //номер корня
while a<=59 do//пока не конец интервала
 begin
  if F(a)*F(a+1)<0 then //если знак функции на концах меньшего
   begin                //интервала, в данном случае=1, разный
    k:=k+1; //ищем корень
    Bisec(F,a,a+1,k);//уточнение корня
   end;
  a:=a+1;//новый интервал
 end;
end.
1
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 40
26.01.2013, 12:52  [ТС]
А можете помочь если не сложно,мне нужно чтобы я мог вбить свои коэффициенты нелинейного уравнения,сможете интегрировать свой метод в мой,ну или как-то мой по другому переделать?
буду очень благодарен!

Добавлено через 3 часа 10 минут
Puporev, А можете помочь если не сложно,мне нужно чтобы я мог вбить свои коэффициенты нелинейного уравнения,сможете интегрировать свой метод в мой,ну или как-то мой по другому переделать?
буду очень благодарен!
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
26.01.2013, 13:11
Извините, я думал что Вы что-то знаете, а иначе я бы вообще не лез в тему. Писать за Вас программу на халяву, я, да думаю никто другой, за Вас не будет.
0
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 40
26.01.2013, 15:04  [ТС]
Puporev, если бы мог,сам уже давно бы написал,просто не могу сообразить как ваш метод интегрировать в метод разделение корней написанный у меня!

Добавлено через 9 минут
Puporev, все равно шарите,у вас я думаю это много времени не займет,если поможете буду очень благодарен,от этого зависит моя стипендия)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
26.01.2013, 15:09
Цитата Сообщение от Wilhelm_Art Посмотреть сообщение
у вас я думаю это много времени не займет
Не тебе решать.
Цитата Сообщение от Wilhelm_Art Посмотреть сообщение
от этого зависит моя стипендия
так твоя, а не моя.
И перестань обращаться ко мне лично, надоест, вообще вышибу с форума.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.01.2013, 15:09
Помогаю со студенческими работами здесь

Численные методы решения систем линейных алгебраических уравнений (СЛАУ) в Pascal
Найти решение СЛАУ A*X=B , где A - матрица коэффициентов,B - вектор свободных членов,X - вектор неизвестных, методом прогонки. Заданы...

Решение нелинейных уравнений
Помогите решить линейное уравнение методом половинного деления. На паскале.

Решение нелинейных уравнений

Система нелинейных уравнений
Составить решить ситеми неленейных уравнений с неизвесными U, I, η, да так чтобы можно было водить остальные параметры: G, d, p. ...

Решение нелинейных уравнений
х - 2 + sin1/x = 0 a = 1.2, b = 2 С точностью Е = 0.001


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru