Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Найти точки в графике (http://www.tehnari.ru/f43/t106081/)

farejoker 27.12.2015 22:54

Найти точки в графике
 
Вложений: 1
Написать программу на Паскале

Vladimir_S 28.12.2015 10:48

Сударь, извините великодушно, но Вы это западнохристианское Рождество празднуете или уже Новый Год? Что за невнятная бредятина?

Vladimir_S 28.12.2015 14:58

Вложений: 2
М-да... Думал я, стало быть, думал да и надумал вот что: не является ли этот бессмысленный пост иллюстрацией потуг решить вот эту задачку? Если так, то...
Охо-хо, грехи...
Ладно, начнем, помолясь...
Прежде всего - строим (не карякаем, а именно строим) график, и не чего попало, а функции, стоящей в левой части уравнения:
Вложение 256942
И что же мы тут видим? А видим мы ШЕСТЬ корней уравнения. Вот мы их, все шесть, и найдем методом секущих.
1. Определяем интервалы, в которых сидят корни: [-0.7; -0.5], [-0.2; -0.4], [-0.1; 0.1], [0.2; 0.4], [0.6; 0.7], [0.8; 0.9].
2. Берем программу отсюда, слегка причесываем под конкретную задачу и получаем:
Код:

Const
 Eps=0.00001;
 a1=-0.7;
 b1=-0.5;
 a2=-0.4;
 b2=-0.2;
 a3=-0.1;
 b3= 0.1;
 a4= 0.2;
 b4= 0.4;
 a5= 0.6;
 b5= 0.7;
 a6= 0.8;
 b6= 0.9;

Var
 Res:Real;
 i:Integer;

Function F(z:real):Real;
begin
 F:=1.8*Sqr(Sqr(z))-Sin(z*10);
end;

Procedure EQRoot(ar,br:real; var R:real);
var
 x1,x2,a,b,d:real;
begin
 a:=ar;
 b:=br;
 x1:=b;
 Repeat
  x2:=b-F(b)*(b-a)/(F(b)-F(a));
  d:=abs(x1-x2);
  if F(a)*F(x2)<0 then b:=x2 else a:=x2;
  x1:=x2;
 Until d<Eps;
 R:=x2;
end;

Begin 
 EQRoot(a1,b1,Res);
 Writeln(Res:9:5);
 EQRoot(a2,b2,Res);
 Writeln(Res:9:5);
 EQRoot(a3,b3,Res);
 Writeln(Res:9:5);
 EQRoot(a4,b4,Res);
 Writeln(Res:9:5);
 EQRoot(a5,b5,Res);
 Writeln(Res:9:5);
 EQRoot(a6,b6,Res);
 Writeln(Res:9:5);
 Readln
End.

3. Любуемся полученным результатом:
Вложение 256943


Часовой пояс GMT +4, время: 08:56.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.