Sunteți pe pagina 1din 7

Subiecte de realizat în cadrul examenului la disciplina Analiza numerică

Scrieţi programele de rezolvare a următoarelor probleme, în limbajul Pascal, prezentaţi textul


programelor şi rezultatele obţinute:

1. Calculul iterativ al soluţiilor algebrice şi transcendente prin metodele bisecţiei, a coardei,


a lui Newton. Rezultatele numerice le anexaţi pentru ecuaţii concrete, alese la discreţia
Dvs.
2
4 +5 x 2
∫ 3 x dx
2. Să se calculeze valoarea exactă a integralei I = 1 şi valorile aproximative a
acesteia: I1 după formula trapezului şi I2 după una din metodele dreptunghiului. Să se
calculeze valorile
|I−I |
1 şi
|I−I |
2 şi să se compare cu estimările termenilor de rest
corespunzători.
3. Rezolvarea sistemelor de ecuaţii liniare prin metoda lui Gauss. Rezultatele numerice le
anexaţi pentru sistemul de ecuaţii concret, ales la discreţia Dvs.

Rezolvare:
1. a) Calculul iterativ al soluţiilor algebrice şi transcendente prin
metoda bisecţiei:
Să se determine o rădăcină a ecuației x4+x3-x-1=0 pe segmentul
[0,1] pentru 16 divizări consecutive.
program P1;
var a,b,c: real;
i,n:integer;
function f(x:real):real;
begin f:=sqr(sqr(x))+x*sqr(x)-x-1;
end;
begin a:=0; b:=1; n:=16;
for i:=1 to n do
begin c:=(b+a)/2;
writeln ('i=',i:3,' x=',c:10:8,' f(x)=',f(c):12:8);
if f(c)=0 then break;
if f(c)*f(a)>0 then a:=c else b:=c;
end;
end.
Rezultatele:
i= 1 x=25.00000000 f(x)=406224.00000000
i= 2 x=12.50000000 f(x)=26353.68750000
i= 3 x=6.25000000 f(x)=1762.76953125
i= 4 x=3.12500000 f(x)=121.76000977
i= 5 x=1.56250000 f(x)= 7.21266174
i= 6 x=0.78125000 f(x)= -0.93188381
i= 7 x=1.17187500 f(x)= 1.32337862
i= 8 x=0.97656250 f(x)= -0.13574522
i= 9 x=1.07421875 f(x)= 0.49696279
i= 10 x=1.02539063 f(x)= 0.15822816
i= 11 x=1.00097656 f(x)= 0.00586796
i= 12 x=0.98876953 f(x)= -0.06625477
i= 13 x=0.99487305 f(x)= -0.03052582
i= 14 x=0.99792480 f(x)= -0.01241246
i= 15 x=0.99945068 f(x)= -0.00329318
i= 16 x=1.00021362 f(x)= 0.00128215

{ same function f(x)=x^4+x^3-x-1 on interval [0,5; 4] precision 10^-6}

b) Calculul iterativ al soluţiilor algebrice şi transcendente prin


metoda coardei:
Fie dată funcția f(x)=ln(sinx).Să se calculeze soluția
aproximativă a ecuației f(x)=0 pe segmentul
program P2;
var a,b,c: real;
n: integer;
eps: real;

function f(x:real):real;
begin
f:=(x*x*x*x)+(x*x*x)-x-1;
end;

begin
n := 0;
eps := 0.000001;
a:= 0.5;
b:= 4;
repeat
c:=(f(b)*a-f(a)*b)/(f(b)-f(a));
if f(a)*f(c) > 0 then
a := c
else
b := c;
Inc(n);
if (n mod 10 = 0) then
writeln('x=', c:10:7, ' f(x)=', f(c):12:8, ' n=', n);
until abs((f(b)*a-f(a)*b)/(f(b)-f(a))-c)<eps;
writeln('x=', c:10:7, ' f(x)=', f(c):12:8, ' n=', n);
end.

Rezultatele:
x= 0.6388547 f(x)= -1.21154112 n=10
x= 0.7562853 f(x)= -0.99656790 n=20
x= 0.8453078 f(x)= -0.73072226 n=30
x= 0.9064260 f(x)= -0.48665924 n=40
x= 0.9452685 f(x)= -0.30223983 n=50
x= 0.9686701 f(x)= -0.17929806 n=60
x= 0.9822982 f(x)= -0.10341852 n=70
x= 0.9900740 f(x)= -0.05867421 n=80
x= 0.9944583 f(x)= -0.03297473 n=90
x= 0.9969136 f(x)= -0.01843267 n=100
x= 0.9982834 f(x)= -0.01027283 n=110
x= 0.9990460 f(x)= -0.00571562 n=120
x= 0.9994701 f(x)= -0.00317709 n=130
x= 0.9997057 f(x)= -0.00176511 n=140
x= 0.9998366 f(x)= -0.00098036 n=150
x= 0.9999093 f(x)= -0.00054442 n=160
x= 0.9999496 f(x)= -0.00030230 n=170
x= 0.9999720 f(x)= -0.00016785 n=180
x= 0.9999825 f(x)= -0.00010483 n=188

c)
Calculul iterativ al soluţiilor algebrice şi transcendente prin
metoda Newton:
Program Newton;
const
eps=0.000000001;
var
a,x,y,x1,func,proiz:real;

function f(x:real):real;
begin
f:=sqr(sqr(x))+x*sqr(x)-x-1;
end;

function p(x:real):real;
begin
p:=4*x*x*x+2*x-1;
end;

begin
x:=25;
repeat
x1:=x;
func:=f(x);
proiz:=p(x);
y:=func/proiz;
x:=x-y;
writeln('x=',x:12:9, ' f=',func:12:9, ' p=', proiz:12:9);
until abs(x-x1)<=eps;
writeln('x=',x:12:9);
end.

x=18.505507682 f=406224.000000000 p=62549.000000000


x=13.636816707 f=123592.391300507 p=25385.137800186
x= 9.988505060 f=37103.455182197 p=10170.034463752
x= 7.257138499 f=10939.666436831 p=4005.198932628
x= 5.216295267 f=3147.661538141 p=1542.333820014
x= 3.698389798 f=876.087473595 p=577.168665468
x= 2.582294673 f=232.978574718 p=208.744370766
x= 1.786827547 f=58.102582608 p=73.042091524
x= 1.270480046 f=13.111740586 p=25.393248865
x= 1.025646226 f= 2.385608546 p= 9.743786803
x= 0.995856498 f= 0.159881690 p= 5.367007384
x= 1.000855662 f=-0.024706850 p= 4.942196711
x= 0.999830008 f= 0.005140562 p= 5.011988051
x= 1.000034043 f=-0.001019690 p= 4.997620463
x= 0.999993193 f= 0.000204271 p= 5.000476622
x= 1.000001361 f=-0.000040841 p= 4.999904704
x= 0.999999728 f= 0.000008169 p= 5.000019060
x= 1.000000054 f=-0.000001634 p= 4.999996188
x= 0.999999989 f= 0.000000327 p= 5.000000762
x= 1.000000002 f=-0.000000065 p= 4.999999848
x= 1.000000000 f= 0.000000013 p= 5.000000030
x= 1.000000000 f=-0.000000003 p= 4.999999994
x= 1.000000000

2
4 +5 x 2
∫ 3 x dx
2. Să se calculeze valoarea exactă a integralei I = 1 .
Точное значение 3.424196240746594

PROGRAM integral;
var n:INTEGER; a,b:REAL;
i1, i2: real;
i0: real;
{definirea functiei utilizator}
FUNCTION f(x:REAL):REAL;
BEGIN
f:=(4+5*x*x)/(3*x);
END;

function integral(a, b: real):real;


begin
integral := (8*ln(abs(b)) + 5*sqr(b))/6 - (8*ln(abs(a)) + 5*sqr(a))/6;
end;

{programul principal}

function trapez(a, b: real; n: integer):real;


var s: real;
h: real;
i: integer;
begin
{ metoda trapezului }
s:= 0;
h:=(b-a)/n;
for i:=1 to n-1 do
s:=s+f(a + h*i);
trapez:=h*((f(a)+f(b))/2+S);
end;

function drept(a, b: real; n: integer):real;


var s: real;
h: real;
i: integer;
begin
{ metoda dreptunghiului }
s:= 0;
h:=(b-a)/n;
for i:=0 to n-1 do
s:=s+f(a+h*(i+0.5));
drept:=s*h;
end;
BEGIN
a:=1; b:=2; n:=20;
i0 := integral(a, b); {3.424196240746594;}
i1 := trapez(a, b, n);
i2 := drept(a, b, n);
writeln ('I=',i0:0:6);
writeln ('I1=',i1:0:6,' I2=',i2:0:6);
writeln ('|I-I1|=',abs(i0-i1):0:6,' |I-I2|=',abs(i0-i2):0:6);
END.

I=3.424196
I1=3.424405 I2=3.424092
|I-I1|=0.000208 |I-I2|=0.000104

3.Rezolvarea sistemelor de ecuaţii liniare prin


metoda lui Gauss.
Program Gauss;
const
e = 0.000001;
var
a,a1: array[1..3, 1..3] of real;
b,b1: array[1..3] of real;
x: array[1..3] of real;
n, i, j, k: integer;z, r, g: real;

begin
n:=3;

A[1, 1] := 3; A[1, 2] := 2; A[1, 3] := 1;


A[2, 1] := 8; A[2, 2] := 1; A[2, 3] := 2;
A[3, 1] := 1; A[3, 2] := -6; A[3, 3] := 7;
b[1] := 7; b[2] := -10; b[3] := -5;

writeln('A:');
for i := 1 to n do
begin
for j := 1 to n do
begin
write(a[i,j]:5:2);
a1[i,j]:=a[i,j];
end;
writeln;
end;
writeln;
Writeln('B:');
for i:=1 to n do
writeln(b[i]);
for k := 1 to n do
begin
for j := k + 1 to n do
begin
r := a[j, k] / a[k, k];
for i := k to n do
begin
a[j, i] := a[j, i] - r * a[k, i];
end;
b[j] := b[j] - r * b[k];
end;
end;
for k := n downto 1 do
begin
r := 0;
for j := k + 1 to n do
begin
g := a[k, j] * x[j];
r := r + g;
end;
x[k] := (b[k] - r) / a[k, k];
end;
writeln('result:');
for i := 1 to n do
write('x[', i, ']=', x[i]:0:2, ' ');
end.
A:
3.00 2.00 1.00
8.00 1.00 2.00
1.00-6.00 7.00

B:
7.00000000000000E+000
-1.00000000000000E+001
-5.00000000000000E+000

result:
x[1]=-3.18 x[2]=5.88 x[3]=4.78

S-ar putea să vă placă și