Помощь - Поиск - Пользователи - Календарь
Полная версия: Численное интегрирование
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Account
Дана функция f(x)=x*exp(x)*sin(x) интервал [0;3]. Методом прямоугольников вычислить интеграл. Побыстрому накидал (не оптимизировал)))). Вот программа
uses crt;
var
f:real;
x:real;
i:integer;
a,b:real;
begin
clrscr;
b:=3;
while (x < 2.97) do
begin
f:=f+(x*exp(x)*sin(x));
writeln('x= ',x:2:5,' | f(x)= ',f:2:2);
x:=x+0.03;
i:=i+1;
end;
writeln('--------------');
writeln('Itog: f(x) = ',((b-a)/100)*f:2:2);
{writeln('i=', i);}
readkey;
end.


только вот как проверить? нет у меня ни одного готового примера))))
Account
Все,проверил с помощью метода трапецийsmile.gif(результаты положительные))))

P.S. Извиняюсь перед админом за 2 поста подряд, думал он добавит к первому, как произошло ранее в другой теме), а получилось отдельным постом(
Lapp
Цитата(Account @ 2.01.2009 23:30) *
Все,проверил с помощью метода трапецийsmile.gif(результаты положительные))))
Это не очень хорошая проверка, ибо так ты не проверяешь логику всей программы. Лучше будет, если ты подставишь вместо данной функции такую, которая интегрируется по формулам - например, x или x^2.

Цитата(Account @ 2.01.2009 23:30) *
P.S. Извиняюсь перед админом за 2 поста подряд, думал он добавит к первому, как произошло ранее в другой теме), а получилось отдельным постом(
Непонятно, за что ты извиняешься. Разве что-то на эту тему есть в Правилах? blink.gif Пость сколько угодно, если это не флуд.
А объединяются (причем автоматически) сообщения, которые были отосланы не позже, чем через 20 мин.
Account
Lapp
Цитата
Это не очень хорошая проверка, ибо так ты не проверяешь логику всей программы. Лучше будет, если ты подставишь вместо данной функции такую, которая интегрируется по формулам - например, x или x^2

Спасибо за совет. Учел, и подставил как ты и советовал x и x^2. Результаты также положительны. smile.gif (теперь надо делать более привлекательный код программыsmile.gif и еще метод парабол заделать, а мне он что то не очень нравитсяsmile.gif) (Тяжело вспоминать математику, занимался 4 года назад ейsmile.gif)
Account
Нужно решить уравнение методом Ньютона 1-0.4x-arcsin(x)=0. интервал [0;1]. Как представить арксинус?

А пока решал темже методом следующее уравнение exp(x)-x^2=0 интервал [-2,0], вот что вышло

uses crt;
function kor(x,b,eps:double):real;
var
y,d_y:real;
begin
y:=x-((exp(x)-sqr(x))/(exp(x)-2*x));
x:=x+0.0001;
d_y:=x-((exp(x)-sqr(x))/(exp(x)-2*x));
while (abs(d_y-y) >=eps) and (x<=0) do
begin
writeln('--------------------------------------------------');
writeln('x= ',x:5:5,' | exp= ',abs(d_y-y):5:8,' | f= ',exp(x)-sqr(x):5:8);
y:=d_y;
x:=x+0.0001;
d_y:=x-((exp(x)-sqr(x))/(exp(x)-2*x));
end;
end;

var
a,x,b:real;
y,d_y:real;
begin
clrscr;
kor(-2,0,10E-8);
readkey;
end.

;
Но проблема в следующем, если уменьшить точность eps до 10E-5, все код неработате, нужно уменьшать шаг. Можно ли как нито избавится от зависимости шаг-точность?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.