Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2017, 16:33   #1
5251
 
Регистрация: 23.11.2017
Сообщений: 7
По умолчанию Нужна помощь с заданием по нахождению экстремумов

Нужно найти экстремумы (перегибы) функции из разряда a*sin(b*x) или также с cos(x)
кому не сложно помогите , пожалуйста
5251 вне форума Ответить с цитированием
Старый 23.11.2017, 16:35   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Какой алгоритм вы выбрали для этой задачи?
p51x вне форума Ответить с цитированием
Старый 23.11.2017, 16:37   #3
5251
 
Регистрация: 23.11.2017
Сообщений: 7
По умолчанию

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;
Tpoint_r=record
x,y:real;
end;
Tmas_TPoint_r=array of TPoint_r;
Tfunc=function(z:real):real;
Tmas_TPoint=array of Tpoint;

var
Form1: TForm1;
a:Tmas_Tpoint_r;
at,b:Tmas_tPoint;

implementation
{$R *.dfm}
function f1(x:real):real;
begin
f1:=sin(x);

end;
procedure Tab(xn,xk:real; N:integer; f:Tfunc;
Var z:Tmas_TPoint_r);
var h:real;i:integer;
begin
h:=(xk-xn)/n;
Setlength(z,n);
For i:=0 to n-1 do
begin
z[i].x:= xn+ i*h;
z[i].y := f(z[i].x);
end;
end;
procedure Grafic(z:Tmas_TPoint_r;Var g:Tmas_TPoint);
Var hxk,hyk:real;hxn,hyn,i,n,imax,o,imi n,t,j:integer;
var max,min,mhx,mhy,xn,xk,max1,min1:rea l;
begin
n:=length(z);
Setlength(g,n);
xn:=z[0].x;
xk:=z[n-1].x;
max:=z[0].Y; min:=z[0].Y;
for i:=0 to n-1 do
begin
if z[i].y>max then
max:=z[i].Y;
if z[i].Y<min then
min:=z[i].y ;
end;

hxn:=0; hyn:=0;
hxk:=form1.Image1.Width;
hyk:=form1.Image1.Height;

mhx:=(hxk-hxn)/abs(xk-xn);
mhy:=(hyk-hyn)/abs(max-min);

for i := 0 to n - 1 do
begin
g[i].X:=round((z[i].x-xn)*mhx)+hxn;
g[i].Y:=round((max-z[i].y)*mhy)+hyn;
end;
for i := 0 to n - 1 do
form1.Image1.Canvas.Pixels [g[i].x, g[i].Y]:=clred;
with form1.image1.Canvas do
begin
moveto(g[0].x,g[0].y);
for i := 0 to n - 1 do
lineto(g[i].X,g[i].y);
end;
max1:=g[0].Y;
for i:=1 to n-1 do
if g[i].Y<max1 then
max1:=g[i].Y;
for i:=0 to n-1 do
if g[i].Y=max1 then
begin
imax:=i;
Form1.Image1.Canvas.Brush.Color:=cl Red;
Form1.Image1.Canvas.Ellipse(g[imax].x+10,g[imax].Y +10,g[imax].x -10,g[imax].Y -10);
end;
min1:=g[0].y;
for i:=1 to n-1 do
if g[i].Y>min1 then
min1:=g[i].Y;

for i:=0 to n-1 do
if g[i].Y=min1 then
begin
imin:=i;
Form1.Image1.Canvas.Brush.Color:=cl blue;
Form1.Image1.Canvas.Ellipse(g[imin].x+10,g[imin].Y +10,g[imin].x -10,g[imin].Y -10);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Tab(-9,9,200,f1,a);
Grafic(a,at) ;

end;


end
5251 вне форума Ответить с цитированием
Старый 23.11.2017, 16:38   #4
5251
 
Регистрация: 23.11.2017
Сообщений: 7
По умолчанию

Только точки дублируются
так то программа более менее
5251 вне форума Ответить с цитированием
Старый 23.11.2017, 16:39   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вы не поверите, но Delphi не умеет сама находить формулы для производной функции. Тем более - если перегиб, то это уже вторая производная.
Так что, либо вы сами пишете формулу второй производной и ищите, где она =0 ( а на форуме куча тем с решением f(x)=0), либо надо как-то численно вычислять производные ( по приращениям ), и опять же искать, где они =0.

PS Пока писал, появились ответы. Это я к самому первому вопросу.
type_Oleg вне форума Ответить с цитированием
Старый 23.11.2017, 16:59   #6
5251
 
Регистрация: 23.11.2017
Сообщений: 7
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Вы не поверите, но Delphi не умеет сама находить формулы для производной функции. Тем более - если перегиб, то это уже вторая производная.
Так что, либо вы сами пишете формулу второй производной и ищите, где она =0 ( а на форуме куча тем с решением f(x)=0), либо надо как-то численно вычислять производные ( по приращениям ), и опять же искать, где они =0.

PS Пока писал, появились ответы. Это я к самому первому вопросу.
Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Вы не поверите, но Delphi не умеет сама находить формулы для производной функции. Тем более - если перегиб, то это уже вторая производная.
Так что, либо вы сами пишете формулу второй производной и ищите, где она =0 ( а на форуме куча тем с решением f(x)=0), либо надо как-то численно вычислять производные ( по приращениям ), и опять же искать, где они =0.

PS Пока писал, появились ответы. Это я к самому первому вопросу.
А можно ссылочку
5251 вне форума Ответить с цитированием
Старый 23.11.2017, 17:14   #7
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от 5251 Посмотреть сообщение
А можно ссылочку
А сейчас я уже не знаю, что именно вам нужно. Я думал, надо найти перегиб, то есть решить уравнение f''(x)=0. Вот пример - ссыла

А у вас в исходнике - графика. Так может быть надо график построить, и пальцем показать на перегиб ?
type_Oleg вне форума Ответить с цитированием
Старый 23.11.2017, 17:31   #8
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от 5251 Посмотреть сообщение
Нужно найти экстремумы (перегибы) функции из разряда a*sin(b*x) или также с cos(x)
кому не сложно помогите , пожалуйста
А математика не судьба? И ежу ясно, что косинусоида имеет экстремумы в точках 1 и -1, на координатах 0 и Pi, с периодом 2*Pi для каждого экстремума.
А уравнение синусоиды будет иметь тот же экстремум только смещенный на Pi/2 относительно косинусоиды.
В вашем случае экстремум синусоиды будет:
Значение = а;
Координаты =Pi/(2*b);
Перидочность = 2*pi/b;
И аналогично для минимума.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 23.11.2017, 17:32   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
А математика не судьба?
Не судьба. Т.к. задача явно на программирование и численные методы в нем.
p51x вне форума Ответить с цитированием
Старый 23.11.2017, 17:41   #10
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Да, и надо уточнить - экстремум нужно или перегиб.
Если экстремум - это там, производная f'(x) меняет знак.
А если перегиб - это там, где вторая производная f''(x) меняет знак. Там где выпуклость меняется на вогнутость или наоборот.
type_Oleg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срочно!! Нужна помощь с заданием на С++ 70velebi Помощь студентам 9 07.11.2016 15:09
Нужна помощь с заданием на рекурсию. Не получается выполнить. kipairs Паскаль, Turbo Pascal, PascalABC.NET 1 08.12.2015 18:22
Нужна помощь с заданием по выводу Постраничной навигации Svyatoslav359 PHP 1 19.11.2015 15:39
Нужна помощь с заданием по выводу Постраничной навигации Svyatoslav359 Помощь студентам 0 19.11.2015 13:02
HTML, Javascript нужна помощь с заданием nastjamihneva JavaScript, Ajax 1 04.04.2014 20:51