![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подсчет суммы ряда
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