Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Программирование в Паскале, для функции разработать и протестировать программу (http://www.tehnari.ru/f41/t101509/)

Максим777999 11.03.2015 14:12

Программирование в Паскале, для функции разработать и протестировать программу
 
Добрый день, прошу помощи с написание программ в паскале или напишите похожие примеры на мое уравнение, буду благодарен
Для функции разработать и протестировать программу, выполняющую:
1.нахождение всех действительных корней уравнения на отрезке [a; b], если таковые имеются (решение соответствующего уравнения выполнить с точностью до e=0,0001 одним из численных методов: хорд, не более, чем за 20 итераций.
2. вычисление определенного интеграла f(x) на интервале табулирования [a; b] одним из перечисленных методов: правых прямоугольников.
x^4 + 0.5x^3 – 4x^2 – 3x – 0.5 = 0
интервал [–1, 0]
Заранее спасибо.

Vladimir_S 11.03.2015 16:24

Вложений: 3
Цитата:

Сообщение от Максим777999 (Сообщение 1112087)
Добрый день, прошу помощи с написание программ в паскале или напишите похожие примеры на мое уравнение, буду благодарен
Для функции разработать и протестировать программу, выполняющую:
1.нахождение всех действительных корней уравнения на отрезке [a; b], если таковые имеются (решение соответствующего уравнения выполнить с точностью до e=0,0001 одним из численных методов: хорд, не более, чем за 20 итераций.
2. вычисление определенного интеграла f(x) на интервале табулирования [a; b] одним из перечисленных методов: правых прямоугольников.
x^4 + 0.5x^3 – 4x^2 – 3x – 0.5 = 0
интервал [–1, 0]
Заранее спасибо.

Ладно, пожалуйста.
Вопрос о методах численного решения алгебраических уравнений подробно рассмотрен здесь: http://www.tehnari.ru/f41/t95695/
Как там и сказано, начнем с анализа функции с целью определения количества корней и их приближенно-грубых значений, для чего построим график в указанном интервале:
Вложение 218023
Как видно из графика, есть два корня, приблизительно равные -0.5 и -0.25. Точные значения их будем искать в интервалах [-0.6; -0.4] и [-0.3; -0.2], соответственно.
Ну и вот программа:
Код:

Const
 Eps=0.0001;
 a=-1.0;
 b=0.0;

Var
 Res:Real;
 N:Integer;

Function F(z:real):Real;
begin
 F:=Sqr(Sqr(z))+0.5*z*Sqr(z)-4.0*Sqr(z)-3.0*z-0.5;
end;

Function Antiderivative(Q:real):Real;
begin
 Antiderivative:=0.2*Q*Sqr(Sqr(Q))+0.125*Sqr(Sqr(Q))-(4.0/3)*Q*Sqr(Q)-1.5*Sqr(Q)-0.5*Q;
end;

Procedure EQRoot(a1,b1:real; var R:real; var m:Integer);
var
 x1,x2,d,c:real;
 k:Integer;
begin
 k:=0;
 c:=a1;
 x1:=b1;
 Repeat
  x2:=x1-F(x1)*(x1-c)/(F(x1)-F(c));
  d:=abs(x1-x2);
  x1:=x2;
  Inc(k);
 Until d<Eps;
 R:=x2;
 m:=k;
end;

Procedure Integral(var R:Real; var m:Integer);
var
 h,S1,S2,d:real;
 p,k,i:Integer;
begin
 k:=0;
 p:=10;
 S1:=0;
 h:=(b-a)/p;
 for i:=0 to p-1 do S1:=S1+h*F(a+h*i);
 repeat
  S2:=0;
  p:=p+10;
  Inc(k);
  h:=(b-a)/p;
  for i:=0 to p-1 do S2:=S2+h*F(a+h*i);
  d:=Abs(S2-S1);
  S1:=S2;
 until d<Eps;
 R:=S2;
 m:=k;
end;

Begin
 Writeln('Roots: ');
 EQRoot(-0.6,-0.4,Res,N);
 Writeln('X1 = ',Res:8:5,',  ',N,' iterations');
 EQRoot(-0.3,-0.2,Res,N);
 Writeln('X2 = ',Res:8:5,',  ',N,' iterations');
 Writeln;
 Writeln('Integral:');
 Writeln('Numerical:');
 Integral(Res,N);
 Writeln(Res:0:5,',  ',N,' iterations');
 Writeln('Accurate:');
 Writeln((Antiderivative(b)-Antiderivative(a)):0:5);
 Readln
End.

А это - результат:
Вложение 218025

Максим777999 11.03.2015 19:00

Это метод хорд??? или сразу вместе метод хорд с методом правых прямоугольников?

Vladimir_S 11.03.2015 19:59

Цитата:

Сообщение от Максим777999 (Сообщение 1112154)
Это метод хорд??? или сразу вместе метод хорд с методом правых прямоугольников?

О, Боже!
Методом хорд найдены корни уравнения.
Методом прямоугольников вычислен интеграл.


Часовой пояс GMT +4, время: 22:52.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.