Решение уравнения методом Ньютона - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Помогите плииз написать программу на паскале для решения уравнения методом ньютона x^3+6,6*x^2-29,05*x+22,64=0, также чтобы оформление вычисления выполняла подпрограмма и если можно, чтобы строился график функции.

Решение задачи: «Решение уравнения методом Ньютона»

textual
Листинг программы
uses graphABC;
const e=0.0001;
      xn=-10;
      xk=5;
function F(x:real):real;
begin
F:=x*x*x+6.6*x*x-29.05*x+22.64;
end;
function F1(x:real):real;
begin
F1:=3*x*x+13.2*x-29.05;
end;
function newton(a:real):real;
var b:real;
begin
repeat
 b:=a;
 a:=b-F(b)/F1(b);
until abs(a-b)<e;
newton:=a
end;
 
var k:array[1..3] of real;
    a,b,x,max,min,mx,my,dx:real;
    x0,y0,n,i:integer;
    s,s1:string;
begin
x:=0;
n:=0;
a:=xn;
b:=a+0.5;
repeat
if F(a)*F(b)<0 then
 begin
  n:=n+1;
  k[n]:=newton((a+b)/2);
 end ;
a:=b;
b:=a+0.5;
until a>xk;
x0:=0;
{найдем максимум и минимум для масштаба по У}
x:=xn;
max:=F(xn);
min:=F(xn);
while x<=xk do
 begin
  if F(x)>max then max:=F(x);
  if F(x)<min then min:=F(x);
  x:=x+0.1;
 end;
x0:=2*windowwidth div 3;
mx:=(x0-10)/-xn;{масштаб по Х}
y0:=windowheight div 2;
if max>abs(min) then my:=(y0-10)/max{по У}
else my:=(y0-10)/-min;
line(0,y0,windowwidth,y0);{оси}
line(x0,0,X0,windowheight);
for i:=1 to 20 do{максимальное количество засечек в одну сторону}
  begin
   if i mod 2=0 then
    begin
     line(x0-3,y0-round(i*my*10),x0+3,y0-round(i*my*10));{засечки на оси У}
     line(x0-3,y0+round(i*my*10),x0+3,y0+round(i*my*10));
     {подпись оси У}
     str(i*10,s);
     textout(x0-30,y0-round(i*my*10),s);{соответственно засечкам}
     textout(x0-35,y0+round(i*my*10),'-'+s);
    end; 
   line(x0+round(i*mx),y0-3,x0+round(i*mx),Y0+3); {засечки на оси Х}
   line(x0-round(i*mx),y0-3,x0-round(i*mx),Y0+3);
   str(i,s);
   {подпись оси Х}
   textout(x0+round(i*mx),y0+10,s);
   textout(x0-round(i*mx),y0+10,'-'+s);
   end;
{центр}
textout(x0+5,y0+10,'0');
{подписи концов осей}
textout(windowwidth-10,y0-20,'X');
textout(x0+5,10, 'Y');
{график}
x:=xn;
dx:=0.001;
while x<=xk do
 begin
  setpixel(x0+round(x*mx),y0-round(F(x)*my),clRed);
  x:=x+dx;
 end;
 
for i:=1 to 3 do
 begin
  setpencolor(clBlue);
  setbrushcolor(clBlue);
  circle(x0+round(k[i]*mx),y0-round(F(k[i])*my),2);
  str(i,s1);
  str(k[i]:0:2,s);
  setfontcolor(clBlack);
  setbrushstyle(bsClear);
  textout(120,y0+70+i*20,'x'+s1+'='+s);
 end;
{название}
textout(70,y0+50,'Уравнение x^3+6,6*x^2-29,05*x+22,64=0');
textout(120,y0+70,'Корни:');
end.

Объяснение кода листинга программы

  1. Объединение функций на языке PascalABC.Net
  2. Константа e=0.0001
  3. Начальные приближения для метода Ньютона: xn=-10, xk=5
  4. Функция F(x:real):real; для вычисления значения функции
  5. Функция F1(x:real):real; для вычисления производной функции F(x)
  6. Функция newton(a:real):real; для нахождения корня уравнения методом Ньютона
  7. Переменные a, b, x, max, min, mx, my, dx:real; для промежуточных вычислений
  8. Переменные x0, y0, n, i:integer; для подсчета количества засечек и итераций
  9. Переменные k:array[1..3] of real; для хранения найденных корней
  10. Оси X и Y отображаются линиями с помощью функций line(0,y0,windowwidth,y0) и line(x0,0,X0,windowheight)
  11. Подписи осей X и Y выводятся с помощью функций textout(windowwidth-10,y0-20,'X') и textout(x0+5,10, 'Y')
  12. График функции отображается с помощью цикла while x<=xk do и функции setpixel(x0+round(xmx),y0-round(F(x)my),clRed)
  13. Корни уравнения вычисляются с помощью цикла for i:=1 to 3 do и функции newton((a+b)/2)
  14. Подписи корней выводятся с помощью функций textout(120,y0+70+i*20,'x'+s1+'='+s)
  15. Название уравнения выводится с помощью функции textout(70,y0+50,'Уравнение x^3+6,6x^2-29,05x+22,64=0')
  16. Строка с названиями корней выводится с помощью функции textout(120,y0+70,'Корни:')

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.571 из 5
Похожие ответы