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

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

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

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

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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2013, 08:17
Ответы с готовыми решениями:

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

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

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

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

5
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
26.01.2013, 08:55 2
Рассказывать не умею, поэтому пример как я это делал.
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
А можете помочь если не сложно,мне нужно чтобы я мог вбить свои коэффициенты нелинейного уравнения,сможете интегрировать свой метод в мой,ну или как-то мой по другому переделать?
буду очень благодарен!

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

Добавлено через 9 минут
Puporev, все равно шарите,у вас я думаю это много времени не займет,если поможете буду очень благодарен,от этого зависит моя стипендия)
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
26.01.2013, 15:09 6
Цитата Сообщение от Wilhelm_Art Посмотреть сообщение
у вас я думаю это много времени не займет
Не тебе решать.
Цитата Сообщение от Wilhelm_Art Посмотреть сообщение
от этого зависит моя стипендия
так твоя, а не моя.
И перестань обращаться ко мне лично, надоест, вообще вышибу с форума.
0
26.01.2013, 15:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2013, 15:09
Помогаю со студенческими работами здесь

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

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

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

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


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

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

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