МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Числові методи в інформатиці Приклади типових завдань
Скласти графічний алгоритм і програму мовою Сі для розв’язування рівняння методом Ньютона з похибкою, що не перевищує число е=10-5, при x0=1.
cos x - x2 =2;
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
float x0,x,t,eps;
int n;
float f(float t,x);
{
f=cos(tx)-pow(tx,2)-2;
};
float fp(float q);
{
fp=sin(q)-(2*q);
};
void main(void)
clrscr();
x0=1;
n=0;
eps=0.00001;
do
{ x=x0-(f(x0)/fp(x0));
t=abs(x-x0);
x0=x;
n=n+1;
}
while(t<eps);
cout<<endl<<
"Корiнь = "<<x;
cout<<endl<<
"Кiлькiсть iтерацiй = "<<n;
getch();
end.
Скласти графічний алгоритм і програму мовою Сі для розв’язування системи рівнянь методом Зейделя з похибкою, що не перевищує число е=10-5, при x0=2; y0=2,3
xy - x2 + 12y = 0;
19x - 5yex=1.
Скласти графічний алгоритм і програму мовою Сі для перевірки чи належить точка A(x,y) лінії, побудованій за інтерполяційною формулою Лагранжа і заданій у 8 точках.
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
float
x[8]={0,1,2,3,4,5,6,7},
y[8]={0.1,0.5,0.9,1.3,1.7,2.1,2.5},
n=8,x0,y0,y1,x1,Ax,Ay,Lx;
int i;
void main (void)
{
clrscr();
cout<<
"Введiть координати точки А"<<
endl<<" x=";
cin>>Ax;
cout<<"y=";
cin>>Ay;
x0=x[0]; y0=y[0];y1=y[1];x1=x[1],i=0;
n:
if (x0<=Ax>=x1)
Lx=y0*(Ax-x0/x0-x1)+y1*(Ax-x1/x1-x0);
else
if(i!=n-1)
{
i++,x0=x[i]; y0=y[i];y1=y[i+1];x1=x[i+1];
goto n;
}
if (Lx!=Ay)
cout<<endl<<"Точка А("<<Ax<<","<<Ay<<")
не належить лiнiї, побудованiй по
iнтерполяцiйнiй формулi Лагранжа. "<<
"Вiдхилення дорiвнює "<<Lx-Ay;
else cout<<endl<<
"Точка А("<<Ax<<","<<Ay<<") належить
лiнiї, побудованiй по iнтерполяцiйнiй
формулi Лагранжа";
getch();
}
Скласти графічний алгоритм і програму мовою Сі для обчислення означеного інтегралу за методом трапецій s = ?xevxdx в межах [0,2].
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
float x[10],y[10],h,a=0,b=2,
InTr,SumY,e=2.7183;
int n=10,i;
void main (void)
{
clrscr();
h=(b-a)/n;
for(i=0;i<=10;i++)
{
x[i]=a+h*i;
y[i]=(x[i]*pow(e,sqrt(x[i])));
SumY=SumY+y[i];
cout<<"\nx="<<x[i];
cout<<"\ny="<<y[i];
}
InTr=h*((y[0]+y[n])/2+SumY);
cout<<
"Iнтеграл за методом трапецiй S="
<<InTr;
getch();
}
Скласти графічний алгоритм і програму мовою Сі для знаходження мінімуму функції y=ex+x2 методом золотого перерізу в межах [0,1] з похибкою, не більшою за 0.0001.
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
float a=0,b=1,E=0.0001,
A,B,e=2.7183,y,z,x;
void main (void)
{
clrscr();
y=0.618*a+0.382*b;
z=0.382*a+0.618*b;
A=pow(e,y)+y*y;
B=pow(e,z)+z*z;
start: if (A<B)
{
b=z;
if ((b-a)<E) goto end;
else
{
z=y;B=A;y=0.618*a+0.382*b;
A=pow(e,y)+y*y;
goto start;
}
}
else
{
a=y;
if ((b-a)<E) goto end;
else
{
y=z;A=B;z=0.382*a+0.618*b;
B=pow(e,z)+z*z;
goto start;
}
}
end:
x=(a+b)/2;
cout<<"\nЗначення мiнiмуму
функцiї методом золотого
перерiзу x="<<x;
getch();
}
Скласти графічний алгоритм і програму мовою Сі для перевірки чи належить точка S(x,y) лінії регресії першого порядку, побудованій за 45 точками.
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
float
a,b,hy=.25,y[45],x[45],
SumY,SumX,SumXY,SumX2,
Yreg,Sx,Sy;
int i,n=45;
void main (void)
{
for(i=0;i<=45;i++)
{
x[i]=i;
y[i]=hy*i;
SumY=SumY+y[i];
SumX=SumX+x[i];
SumXY=SumXY+x[i]*y[i];
SumX2=SumX2+x[i]*x[i];
}
a=n*SumXY-SumY*SumX/(n*SumX2-SumX*SumX);
b=SumY-a*SumX/n;
clrscr();
cout<<endl<<
"Введiть координати точки S x=";
cin>>Sx;
cout<<" y=";
cin>>Sy;
Yreg=a*Sx+b;
if(Sy!=Yreg)cout<<
"Точка S не лежить на лiнiї регресiї";
else cout<<
"Точка S лежить на лiнiї регресiї";
getch();
}
Скласти графічний алгоритм і програму мовою Сі для визначення координати мінімуму функції y=(2x-ex)3 при x Є [-10,10] покроковим методом з похибкою, що не перевищує 10-3.
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
float
a=-10,b=10,h=0.01,
e=2.7183,x,y,y_min,x_min;
void main (void)
{
clrscr();
x=a;
x_min=x;
y_min=pow((2*x-pow(e,x)),3);
cout<<endl<<
"----- Покроковий метод ----¬"<<endl;
s:
y=pow((2*x-pow(e,x)),3);
cout<<setprecision(3)<<
endl<<"x="<<x<<" y="<<y;
if (y_min>y)
{
y_min=y;
x_min=x;
}
if (x<=b)
{
x=x+h;
goto s;
}
cout<<endl<<
"L--------------------------- ";
cout<<endl<<
"Мiнiмум функцiї при х="<<x_min<<
" y="<<y_min;
getch();
}
Скласти графічний алгоритм і програму мовою Сі для розв’язування диференціального рівняня за методом Рунге-Кута xЙ = et-cos рt, xt=0 = 1 в межах [0,1].
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
float a=0,b=1,h,R0=0,R=0,t=.1,
t0=1,k0=0,k1=0,k2=0,k3=0,e=2.7183,
Pi=3.14;
int i,n=10;
void main (void)
{
clrscr();
i=1;
h=(b-a)/n;
cout<<endl<<
"--- Метод Рунге-Кутта --¬"<<endl;
cout<<setw(3)<<setprecision(5)<<
"¦ t="<<t0<<"\t x="<<R;cout<<setw(3)<<
setprecision(5)<<"\t\t¦";
f:
k0=pow(e,R0)-cos(Pi*(t-h));
k1=pow(e,R0+k0*h/2)-cos(Pi*(t-h+h/2));
k2=pow(e,R0+k1*h/2)-cos(Pi*(t-h+h/2));
k3=pow(e,R0+k2*h)-cos(Pi*(t-h+h));
R=R0+h/6*(k0+2*k1+2*k2+k3);
cout<<endl<<setw(3)<<setprecision(5)<<
"¦ t="<<t<<"\t x="<<R;
cout<<setw(1)<<setprecision(5)<<"\t¦";
if (i<n)
{
i=i+1;
t=t+h;
R0=R;
goto f;
}
cout<<endl<<"L------------------------ ";
getch();
}
Скласти графічний алгоритм і програму мовою Сі для розв’язування диференціального рівняня за методом Ейлера yV = eрx-x, yt=0=1; yЙt=0=2; yЙЙt=0=2; yЙЙЙt=0=0; yЙV=4 в межах [0,1].
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
float
a=0,b=1,h,z0=1,z1=2,
z2=2,z3=0,z4=4,k0=0,
Pi=3.14,x=0,y,z0p,z1p,
z2p,z3p,z4p;
int i,n=10;
void main (void)
{
clrscr();
h=(b-a)/n;
cout<<endl<<
"--- Метод Ейлера --¬"<<endl;
for (i=0;i<=n;i++)
{
z4p=exp(Pi*x-x);
z3p=z4*h;
z2p=z3*h;
z1p=z2*h;
z0p=z1*h;
cout<<setw(3)<<setprecision(5)
<<"¦ x="<<x<<"\t y="<<z0p;
cout<<setw(3)<<setprecision(5)
<<"\t\t¦";
x=x+h;
}
cout<<endl<<
"L------------------------ ";
getch();
}
Скласти графічний алгоритм і програму мовою Сі для обчислення означеного інтегралу за методом Сімпсона s = ?sin(xex)dx в межах [-р/2, р/2].
Скласти графічний алгоритм і програму мовою Сі для знаходження мінімуму функції y=ex - 3x3 методом випадкового пошуку в межах [-5,5] з похибкою, не більшою за 0.0001.
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
#include<time.h>
#include <stdlib.h>
#include <stdio.h>
float
a=-5,b=5,E=0.0001,
e=2.7183,x,y,y_min,x_min;
int i;
void main (void)
{
randomize();
clrscr();
x=a; x_min=x;
y_min=pow(e,x)-3*pow(x,3);
for(i=0;i<0;i++)
{
x=a+(b-a)*random(10)/10;
y=pow(e,x)-3*pow(x,3);
if(y<y_min)
{
y_min=y;
x_min=x;
}
}
cout<<endl<<
"Мiнiмум функцiї методом
випадкового пошуку f("
<<x_min<<")="<<y_min;
getch();
}
Скласти графічний алгоритм і програму мовою Pascal для розв’язування рівняння методом Ньютона з похибкою, що не перевищує число е=10-5, при x0=1.
cos x - x2 =2;
program iter_Nuton;
uses crt;
var x0,x,t,eps:real;
n:integer;
function f(tx:real):real;
begin
f:=cos(tx)-sqr(tx)-2;
end;
function fp(q:real):real;
begin
fp:=sin(q)-(2*q);
end;
begin clrscr;
x0:=1; n:=0; eps:=0.00001;
repeat
x:=x0-(f(x0)/fp(x0));
t:=abs(x-x0);
x0:=x;
n:=n+1;
until t<eps;
writeln('Корiнь = ',x:8:4);
writeln('Кiлькiсть iтерацiй = ',n);
readln;
end.
Скласти графічний алгоритм і програму мовою Pascal для розв’язування системи рівнянь методом Зейделя з похибкою, що не перевищує число е=10-5, при x0=2; y0=2,3
xy - x2 + 8y = 0;
12x - 5yex=1.
Скласти графічний алгоритм і програму мовою Pascal для перевірки чи належить точка A(x,y) лінії, побудованій за інтерполяційною формулою Лагранжа і заданій у 8 точках.
program Lagrange;
uses crt;
var
x[8]={0,1,2,3,4,5,6,7},
y[8]={0.1,0.5,0.9,1.3,1.7,2.1,2.5},
n=8,x0,y0,y1,x1,Ax,Ay,Lx: real
i: integer
label n;
begin clrscr;
writeln('Введiть координати точки А x=');
readln(Ax);
writeln('y=');
readln(Ay);
x0=x[0]; y0=y[0];y1=y[1];x1=x[1],i=0;
n:
if x0<=Ax>=x1 then
Lx=y0*(Ax-x0/x0-x1)+y1*(Ax-x1/x1-x0);
else
if i<>n-1 then
begin
i=i+1,x0=x[i]; y0=y[i];y1=y[i+1];x1=x[i+1];
goto n;
end;
if Lx<>Ay then
writeln('Точка А(',Ax,Ay,')
не належить лiнiї, побудованiй по
iнтерполяцiйнiй формулi Лагранжа.
"Вiдхилення дорiвнює ',Lx-Ay);
else writeln('Точка А(',Ax,',',Ay,') належить
лiнiї, побудованiй по iнтерполяцiйнiй
формулi Лагранжа');
readln;
end.
Скласти графічний алгоритм і програму мовою Pascal для обчислення означеного інтегралу за методом трапецій s = ?xevxdx в межах [0,2].
program Method_Trap;
uses crt;
var
x[0..10],y[0..10]: array of real;
h,a=0,b=2,InTr,SumY,e=2.7183: real
n=10,i: integer;
begin
clrscr;
h=(b-a)/n;
for i=0 to i<=10
do
x[i]=a+h*i;
y[i]=(x[i]*exp(sqrt(x[i])));
SumY=SumY+y[i];
writeln('x=’,x[i]);
writeln('y=’,y[i]);
end;
InTr=h*((y[0]+y[n])/2+SumY);
writeln('Iнтеграл за методом трапецiй S=',InTr);
readln;
}
Скласти графічний алгоритм і програму мовою Pascal для знаходження мінімуму функції y=ex+x2 методом золотого перерізу в межах [0,1] з похибкою, не більшою за 0.0001.
program Zol_Sich;
uses crt;
var
a=0,b=1,E=0.0001,
A,B,e=2.7183,y,z,x: real
label start;
begin
clrscr;
y=0.618*a+0.382*b;
z=0.382*a+0.618*b;
A=exp(y)+y*y;
B=exp(z)+z*z;
start:
if A<B then
begin
b=z;
if (b-a)<E then goto end;
else
begin
z=y;B=A;y=0.618*a+0.382*b;
A=exp(y)+y*y;
goto start;
end;
end;
else
begin
a=y;
if (b-a)<E then goto end;
else
begin
y=z;A=B;z=0.382*a+0.618*b;
B=exp(z)+z*z;
goto start;
end;
end;
end;
x=(a+b)/2;
writeln('Значення мiнiмуму
функцiї методом золотого
перерiзу x=',x);
writeln;
end.
Скласти графічний алгоритм і програму мовою Pascal для перевірки чи належить точка S(x,y) лінії регресії першого порядку, побудованій за 45 точками.
program Regresiya;
uses crt;
var
a,b,hy:=.25,SumY,SumX,SumXY,SumX2,Yreg,Sx,Sy;
y[0..45],x[0..45]:array of real;
i,n:=45: integer;
begin
for i:=0 to i<=45 do
begin
x[i]:=i;
y[i]:=hy*i;
SumY:=SumY+y[i];
SumX:=SumX+x[i];
SumXY:=SumXY+x[i]*y[i];
SumX2:=SumX2+x[i]*x[i];
end;
a:=n*SumXY-SumY*SumX/(n*SumX2-SumX*SumX);
b:=SumY-a*SumX/n;
clrscr;
writeln('Введiть координати точки S x=');
readln(Sx);
writeln(' y=');
readln(Sy);
Yreg:=a*Sx+b;
if Sy<>Yreg then
writeln('Точка S не лежить на лiнiї регресiї');
else
writeln('Точка S лежить на лiнiї регресiї');
readln;
end.
Скласти графічний алгоритм і програму мовою Pascal для визначення координати мінімуму функції y=(2x-ex)3 при x Є [-10,10] покроковим методом з похибкою, що не перевищує 10-3.
Скласти графічний алгоритм і програму мовою Pascal для розв’язування диференціального рівняня за методом Рунге-Кута xЙ = et-cos рt, xt=0 = 1 в межах [0,1].
Скласти графічний алгоритм і програму мовою Pascal для розв’язування диференціального рівняня за методом Ейлера yV = eрx-x, yt=0=1; yЙt=0=2; yЙЙt=0=2; yЙЙЙt=0=0; yЙV=4 в межах [0,1].
Скласти графічний алгоритм і програму мовою Pascal для обчислення означеного інтегралу за методом Сімпсона s = ?sin(xex)dx в межах [-р/2, р/2].
Скласти графічний алгоритм і програму мовою Pascal для знаходження мінімуму функції y=ex - 3x3 методом випадкового пошуку в межах [-5,5] з похибкою, не більшою за 0.0001.
Скласти графічний алгоритм і програму мовою Visual Basic для розв’язування рівняння методом