• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Интегрирование функций методом трапеций. Паскаль

Алекс2

Новые
Регистрация
24 Мар 2016
Сообщения
25
Реакции
0
Баллы
0
Интегрирование функций методом трапеций. Паскаль

Подынтегральная функция 1 + sqrt(х)* (2+sin^2 x), а=0, b=1

а) Вычислить заданный интеграл при n=10.
б) Вычислить значение заданного интеграла при n=20, 30, 40, …, 100. Результаты показать в виде таблицы на экране и в файле;


Если я применю эту программу будет ли она работать и будет ли правильним ответ? и чтобы была таблица на экране и в файле.
Я пока не могу проверить.
Подскажите пожалуйста.
Если нет , то исправте, пожалуйста.

const a=0;{нижний предел}
b=1;{верхний предел}
n=10;

function f(x:real):real;
begin
f:=1+ sqrt(х)*(2+sin^2x);
end;

function integral(a,b:real):real;
var h,k,s,y:real; i:integer;
begin
h:=(b-a)/n;
s:=(f(a)+f(b))/2;
k:=a;
for i:=1 to n-1 do
begin
k:=k+h;
s:=s+f(k);
end;
s:=s*h;
integral:=s;
Writeln('Длина шага равна: ',h:0:4);{ тут я не знаю правильно или нет}
end;

begin
Writeln('Нижний предел: ',a: ); { тут возле а должна быть цыфра я не знаю какая }
Writeln('Верхний предел: ',b:); { и тут тоже}
writeln('Интеграл методом трапеции = ', integral(a,b):0:5);
end.
 
Если я применю эту программу будет ли она работать
Нет, в таком виде не будет.
const a=0;{нижний предел}
b=1;{верхний предел}
Пределы интегрирования лучше задать в вещественном формате, а значит написать так:
const a=0.0;{нижний предел}
b=1.0;{верхний предел}
Величину n вообще не следует задавать в виде константы: ведь Вам нужно будет считать интеграл при разных значениях разбиения.
f:=1+ sqrt(х)*(2+sin^2x);
В Паскале нет символа ^, точнее, есть, но он используется совсем для другого (обозначает указатель при работе с динамическими переменными), а вовсе не как знак возведения в степень. Поэтому функцию следует задать так:
f:=1+ Sqrt(х)*(2+Sqr(sin(x)));
function integral(a,b:real):real;
Поскольку нижний и верхний предел у Вас заданы как константы, нет смысла задавать их, как параметры функции. А вот число шагов разбиения - другое дело. Я бы задал так:
function integral(n:integer):real;
{ тут я не знаю правильно или нет}
Правильно. Вообще - разбирайтесь с форматами вывода целых и вещественных чисел. Ничего там сложного нет.
{ тут возле а должна быть цыфра я не знаю какая }
Да... так же, как и в других выводах. Например, :0:4.

С учетом вышесказанного:
Код:
const
 a=0.0;{lower limit}
 b=1.0;{upper limit}

function f(x:real):real;
begin
 f:=1+Sqrt(x)*(2.0+Sqr(sin(x)));
end;

function integral(m:integer):real;
var
 h,k,s:real;
 i:integer;
begin
 h:=(b-a)/m;
 s:=(f(a)+f(b))/2;
 k:=a;
 for i:=1 to m-1 do
 begin
  k:=k+h;
  s:=s+f(k);
 end;
 s:=s*h;
 integral:=s;
end;

Var
 n,j:Integer;

Begin
 Writeln('     n         Integral');
 for j:=1 to 10 do
  begin
   n:=j*10;
   writeln(n:7, integral(n):16:6);
  end;
 Readln
End.
 
Добрый вечер, или скорее доброй ночи, Vladimir_S. Огромное Вам спасибо за помощь!!!
 
Посмотрите пожалуйста на метод Зэйделя. Я узнал что надо.
 
Назад
Сверху