Міністерство освіти і науки України
Національний університет
„Львівська політехніка”
Лабораторна робота №1-7
з курсу
„Алгоритмізація та програмування задач автоматизації”
Завдання:
Знайти(уточнити)розв'язок нелінійного рівняння
y=x-sin(x);
Виділення коренів
# include <stdio.h>
# include <conio.h>
# include <math.h>
main()
{
float x,y;
clrscr();
for(x=0;x<=1;x+=0.05)
{y=x-sin(x);
printf("\n x=%5.4f y=%5.4f ",x,y);
}
getchar();
return 0;
}
Табулювання функції в середовищі MATLAB
N=5;
x=[-0.4 -0.2 0 0.2 0.4];
y=[-0.407 -0.203 0 0.203 0.407];
plot(x,y,'*r',x,y,'ok');
col=['r','g','b','k','m','c'];
pause;
grid;
hold on;
for n=1:4
p=polyfit(x(1:n+1),y(1:n+1),n);
f=polyval(p,[x(1):0.01:x(N)]);
plot([x(1):0.01:x(N)],f,col(n));
grid;
end;
Метод половинного ділення
#include<stdio.h>
#include<conio.h>
#include<math.h>
main ()
{
float a=0,b=1,c,y,eps=0.01;
clrscr();
do
{
c=(a+b)/2;
y=x-sin(x);
if(y>0)
{
b=c;
printf("\n X=%f Y=%7.5f",b,y);
}
else
{
a=c;
printf("\n X=%f Y=%7.5f",a,y);
}
}
while (fabs(a-b)>eps);
getch();
return(0);
}
x=0.5 y=-0.36758
x=0.75 y=0.01753
x=0.625 y=-0.17122
x=0.6875 y=-0.08469
x=0.71875 y=-0.03236
x=0.734375 y=-0.00758
Метод ітерацій
#include<stdio.h>
#include<conio.h>
#include<math.h>
main ()
{
float x0=0.5,x,d,eps=0.01;
clrscr();
do
{
x=sin(x0);
printf("\n x=%f ",x);
d=fabs(x-x0);
x0=x;
}
while (d>eps);
getch();
return(0);
}
x=0.867239
x=0.620468
x=0.796543
x=0.689402
x=0.753694
x=0.705486
x=0.746722
x=0.720018
Метод дотичних
# include <stdio.h>
# include <conio.h>
# include <math.h>
float f(float x);
float f1(float x);
float f2(float x);
main()
{float x,a=0,b=1,eps=1e-2,x0;
clrscr();
if(f(a)*f2(a)>0) x0=a;
else x0=b;
x=x0-f(x0)/f1(x0);
while(fabs(x-x0)>eps)
{x0=x;
x=x0-f(x0)/f1(x0);
}
printf("\n x=%7.6f ",x,);
getchar();
return 0;
}
float f(float x)
{float y;
y=x-sin(x);
return(y);
}
float f1(float x)
{float y;
y=1-cos(x);
return(y)
}
float f2(float x)
{float y;
y=sin(x);
return(y);
}
x=0.8592
x=0.8243
x=0.8003
x=0.7911
x=0.7524
x=0.7202
Метод хорд
# include <stdio.h>
# include <conio.h>
# include <math.h>
float f(float x);
float f1(float x);
float f2(float x) ;
main()
{float x,a=0,b=1,eps=1e-3,x0,c;
clrscr();
if(f(a)*f2(a)<0) {x0=a;c=b;}
else {x0=b;c=a;}
x=x0-(c-x0)*f(x0)/(f(c)-f(x0));
while(fabs(x-x0)>eps)
{x0=x;
x=x0-(c-x0)*f(x0)/(f(c)-f(x0));
}
printf("\n x=%7.6f",x);
getchar();
return 0;
}
float f(float x)
{float y;
y=x-sin(x);
return(y);
}
float f1(float x)
{float y;
y=1-cos(x);
return(y)
}
float f2(float x)
{float y;
y=sin(x);
return(y);
}
x=0.8693
x=0.8532
x=0.8123
x=0.7201