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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2013, 22:30   #1
Fat_Tony
Новичок
Джуниор
 
Регистрация: 22.01.2013
Сообщений: 1
По умолчанию Метод касательных(Метод Ньютона)

программа ищет корни и количество итераций, но не получается нарисовать график по методу касательных(метод Ньютона).помогите нарисовать график(заплачу).

Код:
 
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button3: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit3: TEdit;
    Label3: TLabel;
    Panel1: TPanel;
    Label4: TLabel;
    Edit4: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//Функция
function f(x:single):single;
begin
  Result:=x*x+2*x-8;
end;

//производная
function df(x:single):single;
begin
  Result:=2*x+2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  x0, xn, a, e : real;
  i:integer;
begin
  a:=strtofloat(edit1.Text);
  e:=strtofloat(edit2.Text);
  x0:=a;
  xn:=x0-(f(x0)/df(x0));
  // поиск корня

  while abs(x0-xn)>e do
  begin
    x0:=xn;
    xn:=x0-(f(x0)/df(x0));
    inc(i);
  end;
  edit3.Text:=FloatToStr(xn);
  edit4.Text:=FloatToStr(i);
end;


// Строим график функции
procedure GrOfFunc;
var
 x1,x2:real;
 y1,y2:real;
 x:real;
 y:real;
 dx:real;
 l,b:integer;
 w,h:integer;
 mx,my:real;
 x0,y0:integer;
 i:integer;
 _y,_x:array of real;
begin
 // область вывода
 l:=10;
 b:=Form1.ClientHeight-20;
 h:=Form1.ClientHeight-40;
 w:=Form1.Width-40;
 
 x1:=0;
 x2:=10;
 dx:=0.01;

 // максимум и минимум функции
 //  на отрезке [x1,x2]
 y1:=0; // минимум
 y2:=0; // максимум
 x:=x1;
 repeat
   y := f(x);
   if y < y1 then y1:=y;
   if y > y2 then y2:=y;
   x:=x+dx;
 until (x>=x2);
 
 // вычислим маштаб
 my:=h/abs(y2-y1);
 mx:=w/abs(x2-x1);


 x0:=l;
 y0:=b-Abs(Round(y1*my));
 
 with form1.Canvas do
 begin
   // оси
   MoveTo(l,b);LineTo(l,b-h);
   MoveTo(x0,y0);LineTo(x0+w,y0);
   TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3));
   TextOut(l+5,b-2,FloatToStrF(y1,ffGeneral,6,3));
   for i:= 2 to 10 do
    begin
        TextOut(x0+4,y0-Round(_y[i]*my),floattostrf(_y[i],ffGeneral,6,3));
        TextOut(x0+Round(_x[i]*mx),y0-2,floattostrf(_x[i],ffGeneral,6,3));
    end;
   // построение графика
   x:=x1;
   repeat
     y:=f(x);
     Pixels[x0+Round(x*mx),y0-Round(y*my)]:=clRed;
     x:=x+dx;
   until (x>=x2);
   for i:= 1 to 10 do pixels[x0+Round(_x[i]*mx),y0-Round(_y[i]*my)]:=clpurple;
 end;
end;
//>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<
 procedure TForm1.FormPaint(Sender: TObject);
begin
  GrOfFunc;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
  form1.Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));
  GrOfFunc;
end;

end .
Fat_Tony вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Ньютона (касательных) Oh!_Margo Помощь студентам 1 18.03.2012 14:24
Методы оптимизации: метод Ньютона и метод наискорейшего спуска ruslanGacurap Помощь студентам 0 30.01.2012 13:54
Метод касательных(Ньютона) Паскаль. P1RoG Помощь студентам 3 28.12.2010 13:39
метод касательных Meri1992 Паскаль, Turbo Pascal, PascalABC.NET 0 11.12.2010 09:56
метод касательных pinya86 Microsoft Office Excel 2 13.06.2009 16:04