Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подсчет суммы ряда


Страницы:   1 2

elluminate ©   (2010-11-28 21:43:00) 

необходимо посчитать и сравнить со значением функции визуально. х меняется от 0.1до 0.8.прибавляю 0.03 ибо кол-во расчетных точек должно не менее 10быть. написал код,но х при окончании больше 0.8 получается. вот код

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Edit2: TEdit;
   Edit3: TEdit;
   Button1: TButton;
   Edit4: TEdit;
   Edit5: TEdit;
   Edit6: TEdit;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 eps,j,a,x,s:real;
 n:integer;

implementation

{$R *.dfm}
function c(n:integer):real;
begin
result:=((sqr(n+1)+1)*x)/(2*((sqr(n))+1));
end;
function f(x:real):real;
 begin
result:=(exp(x/2)*ln((sqr(x)/4)+(x/2)+1));
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
x:=strtofloat(edit2.Text);
a:=strtofloat(edit1.text);
eps:=strtofloat(edit3.Text);
s:=0;
n:=1;

while x<=0.8 do begin
repeat
s:=s+a;
a:=a*c(n);
inc(n);
x:=x+0.03;
until (s-f(x))<=eps;
end;

edit4.Text:=floattostr(x);
edit5.text:=floattostr(f(x));
edit6.Text:=floattostr(s);
end;

end.


Юрий Зотов   (2010-11-30 00:20:00) [1]

> elluminate ©

Попробуйте взять диапазон от 0.125 до 0.75 и шаг 0.0625. Это точно удовлетворяет условиям задачи (0.1<=х<=0.8 и не менее 10 шагов).


Leonid Troyanovsky   (2010-11-29 22:46:00) [2]


> elluminate ©   (29.11.10 22:39) [24]

> противоречишь сам себе))твое неоценимое время уходит на
> пустые разговоры.

У данного ресурса тоже есть уровень толерантности.
Удалят ветку - и напрасны были все усилия.

Я и не заявлял, что свое неоценимое время готов тратить на
воспомоществование, если оному, к тому же,
всячески воспрепятствуют.

--
Regards, LVT.


elluminate   (2010-11-29 22:39:00) [3]

противоречишь сам себе))твое неоценимое время уходит на пустые разговоры.


Leonid Troyanovsky   (2010-11-29 22:37:00) [4]


> elluminate ©   (29.11.10 22:33) [22]

> что конкретно тебя не устраивает?если бы ты говорил прямо,
> а не ходил вокруг да около,то времени ушло бы меньше)))

Мы никуда не торопимся.
Нас все устраивает.

--
Regards, LVT.


elluminate   (2010-11-29 22:33:00) [5]

что конкретно тебя не устраивает?если бы ты говорил прямо,а не ходил вокруг да около,то времени ушло бы меньше)))


Leonid Troyanovsky   (2010-11-29 22:29:00) [6]


> elluminate ©   (29.11.10 22:24) [20]

Тема нажатия клавиши не раскрыта.

А ты нас уважаешь?
Я, вот, например, мог б и правила послать читать, или,
скажем, http://rsdn.ru/Info/Howtoask.xml

--
Regards, LVT.


elluminate   (2010-11-29 22:24:00) [7]

а=1,eps=0,0001


Leonid Troyanovsky   (2010-11-29 22:20:00) [8]


> elluminate ©   (29.11.10 22:11) [18]

> такие ответы можно и не писать..))

Такой код приводить - тоже не можно.

Код д.б. необходим и достаточен для того, чтобы могущий
воспомоществовать не терял своего неоценимого времени
на поиски всех  многочисленных a, eps, s.., но простым
нажатием клавиши подверг его суровому испытанию.

--
Regards, LVT.


elluminate   (2010-11-29 22:11:00) [9]

такие ответы можно и не писать..))


Leonid Troyanovsky   (2010-11-29 21:50:00) [10]


> elluminate ©   (29.11.10 18:56) [16]

> вот.посмотри что я не так делаю

Да, считай, все не так.

--
Regards, LVT.


elluminate   (2010-11-29 18:56:00) [11]

вот.посмотри что я не так делаю
function c(n:integer):real;
begin
result:=(sqr(n+1)+1)*x/2*(sqr(n)+1);
end;

function f(x:real):real;
    begin
  result:=exp((x/2)*ln((sqr(x)/4)+(x/2)+1));
    end;

procedure TForm1.Button1Click(Sender: TObject);
  begin
a:=strtofloat(edit1.text);
eps:=strtofloat(edit6.text);
s:=0;
n:=1;
x1:=0.1;
x2:=0.8;
xs:=0.05;
im:=round(int((x2-x1)/xs));
for i:=0 to im do begin
repeat
s:=s+a;
a:=a*c(n);
x:=x1+i*xs;
inc(n);
until c(n)<eps;
end;
edit3.text:=floattostr(x);
edit4.text:=floattostr(f(x));
edit5.text:=floattostr(s);
end;

end.


elluminate   (2010-11-29 18:32:00) [12]

все так и делал))не тупой я.наверно.скомпилируй.и запусти,посмотри выходные данные


Jeer   (2010-11-29 18:28:00) [13]


> elluminate ©   (29.11.10 17:14) [11]
>
> jeer,если сделать как ты говоришь значение функции с суммой
> ряда не совпадает


Главное, чтобы ум с разумом совпал :)
Вот тогда все и получится.

Берем твой пример.
Xa = 0.1 ( принимаем )
Xb = 0.8 ( условие )
Xstep = 0.03 ( условие )

Тогда Imax = 23

Пишем цикл
for i := 0 to Imax do begin
..
 x := Xa + i * Xstep;
..
end;

В итоге x "пробегает" от Xa до (Xb - Xstep), т.е. от 0.1 до 0.79

Что тут еще непонятного ?


elluminate   (2010-11-29 17:16:00) [14]

сумма вообще отрицательная


elluminate   (2010-11-29 17:15:00) [15]

сумма вообще отрицательная


elluminate   (2010-11-29 17:14:00) [16]

jeer,если сделать как ты говоришь значение функции с суммой ряда не совпадает


Jeer   (2010-11-29 16:25:00) [17]

P.S.
Понятно, что
x := Xa + i*Xstep;
и плюс в том, что не накапливается ошибка сложения.

P.P.S.
Конечное значение диапазона может быть обработано исключительно.


Jeer   (2010-11-29 10:53:00) [18]


>  х меняется от 0.1до 0.8.прибавляю 0.03


В первом приближении достаточно задавать начальное значение x как
0.8 - k * 0.03;
Тогда с большой вероятностью получим 0.8, хотя это и не панацея.

Если известно начальное Xa, конечное Xb>Xa и шаг Xstep, то лучше перейти к целочисленной арифметике
Imax := Round(Int((Xb-Xa)/Xstep))

И далее двигаемся циклом
for i:=1 to Imax
..
x := i*Xstep;


12   (2010-11-29 09:57:00) [19]

не про этот случай, а вообще
в подобных вещах, когда учился, строил графики "навстречу"
X менялся от min к max, и навстречу, от max к min
т.е. график строился от начала и от конца диапазона одновременно

Потому что
1. Не читал http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374,
т.к. не было тогда она написана, а опыта не было.
2. Часто именно точки на границе интересуют, а так - точно их "не пролетим"


Anatoly Podgoretsky   (2010-11-29 09:13:00) [20]

Это почему же, ведь x используется во внутреннем цикле until (s-f( x))<=eps


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо