Здравствуйте , подскажите пожалуйста(на моём задании , если можно) , как мне построить график производной, процедура закомментирована как //график производной(переделать) .Сколько пробовал вводить и применять формулы , не выходит.
Delphi
Прикладываю код и исходник
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Math, ExtCtrls, TeeProcs, TeEngine, Chart,
Series, jpeg;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
Edit2: TEdit;
Label4: TLabel;
Edit3: TEdit;
Chart1: TChart;
Button1: TButton;
Series1: TFastLineSeries;
Chart2: TChart;
Series2: TLineSeries;
Button2: TButton;
Button3: TButton;
Edit5: TEdit;
Edit6: TEdit;
Button4: TButton;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit10: TEdit;
Button5: TButton;
Edit11: TEdit;
Label9: TLabel;
Edit12: TEdit;
Image1: TImage;
procedure BitBtn2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
e = 0.01;
var
g:double;
x,y,a : extended;
function f(y : double): double;
begin
result := (power(8+abs(power((x-y),3)), 1/3))/(sqrt(power(x,2) + power(y,2)) + 1.25) + 0.05*a + logN(4,5) + sqrt(Log10(2*y+1.3));
end;
procedure TForm1.BitBtn2Click(Sender: TObject); //вычисление функции
const
step = 0.2;
begin
x := StrToFloat(edit1.Text);
y := StrToFloat(Edit2.Text);
a := StrToFloat(Edit3.Text);
Memo1.Lines.clear;
Memo1.Lines.Add(' y g ');
y := 0.1;
while (y<8) do
begin
g := (f(y));
Memo1.Lines.Add(floattostrf(y,fffixed,6,3)+
' '+floattostrf(g,fffixed,6,3));
y:=y+step;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);//график функции
var
y,i:double;
begin
y := StrToFloat(Edit2.Text);
Series1.Clear;
i := 0;
while i<y do
begin
i := i+0.3;
Series1.AddXY(i,(f(i)),'',clGreen);
end;
end;
procedure TForm1.Button5Click(Sender: TObject);//производная
const
e = 0.00000001;
var
y0,y,derivative:double;
begin
y0 := StrToFloat(Edit10.Text);
y := y0+e;
derivative := (f(y)-f(y0))/e;
Edit11.Text := FloatToStr(derivative);
end;
procedure TForm1.Button2Click(Sender: TObject); // график производной(переделать)
const
e = 0.00000001;
var
x,a,a0:double;
begin
//x := StrToFloat(edit1.Text);
Series2.Clear;
a := 0;
x := 0;
while a<8 do
begin
Series2.AddXY(a,x,'',clred);
a0 := a0 + 0.3;
a := a0 + e;
x := (f(a)-f(a0))/e;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);//дихотомия
var
start,finish,middle,result:double;
begin
start := 0.2;
finish := 1;
repeat
middle := (start+finish)/2;
if f(start)*f(middle)>0 then
start := middle
else
finish := middle;
until
abs(finish-start)<e;
result := (start+finish)/2;
Edit5.Text := 'y='+floattostrF(result,ffFixed,8,4);
Edit12.Text := 'g(y)='+floattostrF(f(result),ffFixed,8,4);
end;
procedure TForm1.Button4Click(Sender: TObject); // метод Симпсона
var
start,finish: double;
i1,h,middle,x,e,r,result: extended;
k,n: integer;
begin
start := strtofloat(edit8.text);
finish := strtofloat(edit9.text);
e := strtofloat(edit6.text);
n := round(1/e);
e := 1/n;
h := (finish-start)/n;
i1 := 0;
result := 0;
r := 2*e;
while r>e do
begin
middle := (f(start)-f(finish))/2;
for k := 0 to round(int((finish-start-2*h)/(2*h))) do
begin
x := a+h+result*2*h;
middle := middle+2*f(x)+f(x+h);
end;
result := 2*h*middle/3;
r := abs(result-i1)/15;
h := h/2;
i1 := result;
end;
Edit7.Text := floattostr(result);
end;
end.