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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2008, 21:42   #1
Durak
Новичок
Джуниор
 
Регистрация: 10.01.2008
Сообщений: 1
По умолчанию Метод Ньютона

Помогите разобраться. Я написал программу но у меня есть такая проблема у меня уравнение заданно областью определения от 0 до 2 но программа находит корень тогда когда вводишь значения которые выходят за область определения. Скажите что нужно добавить что бы корень уравнения находился только на промежутке от 0 до 2. Код программы прилагается внизу.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    N3: TMenuItem;
    Button2: TButton;
    procedure N1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 function fn(x:real):real;
var
  Form1: TForm1;
  a,b:integer;
  x,x1,e,s:real;
implementation

uses Unit2, Unit3, Unit4;

{$R *.dfm}
 function fn(x:real):real;
begin
fn:=0.25*x*x*x+x-1.2502;
end;
 function fn1(x:real):real;
 begin
 fn1:=0.75*x*x+1;
 end;
  function fn2(x:real):real;
  begin
  fn2:=1.5*x;
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtoint(Edit1.text);
b:=strtoint(Edit2.text);
e:=strtofloat(Edit3.text);
if fn(a)*fn2(a)>0 then x1:=a else x1:=b;

repeat
x:=x1-fn(x1)/fn1(x1);
 s:=abs(x-x1);
x1:=x;

until s<=e;
Edit4.text:=floattostr(x);
end;

 procedure TForm1.N1Click(Sender: TObject);
begin
form3.show;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
Form4.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
Form2.showmodal;
end;

end.
Durak вне форума Ответить с цитированием
Старый 30.04.2008, 21:55   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Durak Посмотреть сообщение
Помогите разобраться. Я написал программу но у меня есть такая проблема у меня уравнение заданно областью определения от 0 до 2 но программа находит корень тогда когда вводишь значения которые выходят за область определения. Скажите что нужно добавить что бы корень уравнения находился только на промежутке от 0 до 2. Код программы прилагается внизу.
так все-таки корень или область определения ?
Если область определения, то можно так:

Код:
// Задаем значения по умолчанию
var A, B : integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
   A := 0; B := 2;
   edit1.Text := '0';
   edit2.Text := '2';
end;

// В обработчике OnChange обеих Edit проверяем условия и блокируем кнопку вычисления
// Можно еще показывать в label1 соответствующее сообщение
procedure TForm1.Edit1Change(Sender: TObject);
begin
   A := StrToInt(edit1.Text);
   B := StrToINt(edit2.Text);
   Button1.Enabled := (A >= 0) and (B <= 2);
end;
alexBlack вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СНАУ методом Ньютона Tina Помощь студентам 7 09.04.2012 08:52
Метод Ньютона(помогите исправить ошибку) Юлёк Общие вопросы C/C++ 2 07.07.2008 12:47
Метод Ньютона Cubar Помощь студентам 12 09.02.2008 21:28
Интерполяционный полином Ньютона Skay Общие вопросы Delphi 2 19.10.2007 22:18