Sunteți pe pagina 1din 17

Exerciii programate n Scilab

1. S se adune primii 20 de termeni din seria

k2

k 1!
k 1

//ex 1 din lectia 1


s=1; k=1; t=1;
for k=2:20
t=t*k^2/(k-1)^3;
s=s+t;
end
disp(s)
//gata

2. S se adune termenii mai mari dect 10 7 din seria

k2
.

k 1 k 1!

//ex 2 din lectia 1


s=0; k=1; t=1; eps=10^(-7);
while (t>eps)
s=s+t;
k=k+1;
t=t*k^2/(k-1)^3;
end
s,k
//gata

3. Un sistem de 100 ecuaii cu 100 are matricea egal cu 4 pe diagonala


princiupal iar diagonalele de deasupra i dedesuptul diagonalei principale sunt
egale cu 1. Celelalte elemente sunt egale cu zero. Termenii liberi sunt egali cu 1. S
se rezolve sistemul.
//un sistem
clear;
n=100;
a=zeros(100,100);
for i=1:n
a(i,i)=4;
if(i<n) then
a(i,i+1)=1;
end
if (i>1) then
a(i,i-1)=1;

end
b(i)=1;
end
x=a\b;
disp(x);
//gata

4. S se reprezinte pe aceeai figur dar pe grafice diferite funciile f(x)=sin(kx)


pentru k=1,2,3,4 i x [0, ] .
//grafice de functii plane
clear;
x=linspace(0,%pi,100);
y1=sin(x);
subplot(221);
plot(x,y1,'r:');
xgrid;
xtitle('SINUSURI')
y2=sin(2*x);
subplot(222);
plot(x,y2,'b-');
xgrid;
y3=sin(3*x);
subplot(223)
plot(x,y3,'k-');
xgrid

5. S se arate c ecuaia x 3 a sin x 1 0 are pentru orice a 0 o singur soluie n


intervalul [0, 1]. Cum se poate determina aceast soluie n Scilab? S se reprezinte
grafic aceste soluii n funcie de a pentru a [0,1]
//rezolvam o ecuatie
x0=0.5;
function y=g(a)
function z=f(x)
z=x^3+a*sin(x)-1
endfunction
y=fsolve(x0,f)
endfunction

a=linspace(0,1,20);
for i=1:20
x(i)=g(a(i));
end
plot(a,x)
xgrid;
xtitle('radacina in functie de a')

6. Fie x un vector cu n=200 componente. S se calculeze:


a.

xi 2

b.
c.

3
i

sin xi 0

xi
2
1 x i 1 1 xi

// niste sume
clear;
n=200000;
x=10*(rand(n,1)-0.5);
tic();
//metoda 1
s=0;
for i=1:n
if(x(i)>2)
s=s+x(i)^3;
end
end
toc()
disp(s)
//metoda 2
tic()
s1=sum(x(x>2).^3)
toc()

7. S se fac graficul suprafeei:

x u 2 v2
1 u 1

,
y uv
z u 2 v2 1 v 1

function [x, y, z]=sup(u, v)


x=u.^2+v.^3;
y=u+v;
z=u.^2-v.^2;
endfunction
u=linspace(-1,1,20);
v=linspace(-1,1,20);
[xx,yy,zz]=eval3dp(sup, u, v);
cc=(zz-min(zz))*128/max(zz-min(zz));//se determina culoarea in functie de z
plot3d(xx,yy,list(zz,cc));
figura=gcf();
figura.color_map = rainbowcolormap(128);

8. S se determine epsilon main pentru calculatorul pe care lucrm.


Rezolvare.
-->format("e",22)
-->nearfloat("succ",1) - 1
ans =
2.220446049250313D-16

Prin comenzile urmtoare vedem care este distana ntre dou numere reale
consecutive reprezentabile n calculador:
-->nearfloat("succ",10^10)-10^10
ans =
1.907348632812500D-06
-->nearfloat("succ",10^15)-10^5
ans =
9.999999999000001D+14

10. Se d tabelul:
x
y

1
-2

3
4

4
1

5
6

S se scrie polinomul de interpolare sub forma Lagrange. S se programeze


calculul polinomului de interpolare sub forma Lagrange.
Rezolvare.
//interpolare Lagrange
x=[1;3;4;5];
y=[-2;4;1;6];
function v=lag(t, x, y)
v=0;
n=length(x);
for i=1:n
p=y(i);
for j=1:n
if(j~=i)
p=p*(t-x(j))/(x(i)-x(j));
end
end
v=v+p;
end
endfunction
//facem graficul puctelor
plot(x,y,'o')
//graficul polinomului
vx=linspace(x(1),x(length(x)),100);
for i=1:length(vx)
vy(i)=lag(vx(i),x,y);
end
plot(vx,vy,'r-')
xgrid
Rezultatul rulrii este graficul urmtor:

11. S se studieze ct de bine este aproximat funcia cos(x) pe intervalul [0, ] de


polinomul Lagrange cu grad din ce in ce mai mare.,
Rezolvare.
Definim
n=10;
x=linspace(0,%pi,n);
y=cos(x);

In rest procedm ca n programul anterior.


Pentru n=10 graficul valorilor exacte i al celor nterpolate practic se suprapun:

Pentru n=70 vedem c apar mari diferene la capete datorit erorilor de3 rotunjire:

12. S se programeze calculul valorii polinomului de interpolare prin metoda

Newton i s se compare cu valorile obinute prin metoda lui Lagrange.


//interpolare Newton
x=[1;3;4;5];
y=[-2;4;1;6];
function d=dd(x, y)
n=length(x);
d=y;
for k=1:n-1
for i=0:n-k-1
d(n-i)=(d(n-i)-d(n-i-1))/(x(n-i)-x(n-i-k));
end
end
endfunction

13. S se fac graficul funciei spline natural ce interpoleaz tabelul


x
-2
-1
y
2
3
//spline
x=[-2,-1,1,3,4,5];
y=[2, 3, 5, 4, 0, -1];
plot(x,y,'o');
xgrid
d=splin(x,y,"natural");
xx=linspace(x(1),x(length(x)),100);
yy=interp(xx,x,y,d);
plot(xx,yy,'r')

1
5

3
4

4
0

5
-1

14. Metoda celor mai mici ptrate


15. Derivare numeric
16. S se arate c f x

x 2 sin x 2
este contracie pe [-1, 1]. S se programeze
6

determinarea punctului fix.


//contractie
function y=f(x);
y=(x^2+sin(x)-2)/6;
endfunction
xi=2;
n=20;
x=zeros(n,1);
x(1)=xi;
for i=2:n
x(i)=f(x(i-1))
end
disp(x);
x 3 xy y 3 4 0
17. S se programeze rezolvarea sistemului 4
prin iteraii Newton.
x x y 4 5 0
//rezolvarea sistemelor neliniare
n=2; //nr. de necunoscute
nmax=200;

function y=f(x) //sistemul de ecuatii


y=zeros(n,1)
y(1)=x(1)^3+x(1)*x(2)+x(2)^3-4
y(2)=x(1)^4+x(1)+x(2)^4-5
endfunction
eps=0.0000001;//criteriul de oprire er=||xi-xu||<eps
h=0.0001 ; //pasul pentru calculul derivatelor
xi=[1;1] ; //x initial
er=eps+1 ; // ne asiguram ca er>eps la inceput
a=zeros(n,n); //a va contine derivatele partiale
contor=1;
while ((er>eps) | (contor>nmax))

contor=contor+1;
disp(xi);
val=f(xi);
for i=1:n
xi(i)=xi(i)+h;
a(:,i)=(f(xi)-val)/h;
xi(i)=xi(i)-h;
end
xu=xi-inv(a)*f(xi);
er=norm(xi-xu);
xi=xu
end
disp(xi)
x 3 xy y 3 4 0

18. S se rezolve sistemul

x 4 x y 4 5 0
//rezolvarea sistemelor neliniare

prin procedura fsolve din Scilab.

function y=f(x) //sistemul de ecuatii


y=zeros(2,1)
y(1)=x(1)^3+x(1)*x(2)+x(2)^3-4
y(2)=x(1)^4+x(1)+x(2)^4-5
endfunction
xi=[1;1] ;
sol=fsolve(xi,f)

4 x y z 2
19. S se programeze rezolvarea sistemului x 4 y z 3 prin metoda Iacobi.
x 2 y 5 z 0

//metoda Iacobi
a=[4, -1, 1; 1,4,-1; -1,2,5]
b=[2;3;0]
D=diag(diag(a));
A=-inv(D)*(a-D)
B=inv(D)*b;
function y=f(x)
y=A*x+B
endfunction
x1=[1;1;1]
for i=1:20

x1=f(x1)
end

20. S se programeze calculul integralei

metoda Simpson i procedura integrate din Scilab.


a.
//integrare metoda trapezelor
function y=f(x)
y=sin(x^2+1)/(1+sqrt(2+x))
endfunction
a=3
b=5
n=10;
x=linspace(a,b,n+1);
s=0;
for i=2:n
s=s+f(x(i))
end
rez=(f(a)+f(b)+2*s)*(b-a)/(2*n)
disp(rez)

b.
//metoda lui Simpson
function y=f(x)
y=sin(x^2+1)/(1+sqrt(2+x))
endfunction
a=3
b=5
n=10;
x=linspace(a,b,n+1);
s1=0;
for i=2:n
s1=s1+f(x(i))
end
s2=0;
for i=1:n
s2=s2+f((x(i)+x(i+1))/2)

sin x 2 1
dx prin metoda trapezelor,
1 2x

end
rez=(f(a)+f(b)+2*s1+4*s2)*(b-a)/(6*n)
disp(rez)

c.
//utilizam procedura de integrare din scilab
function y=f(x)
y=sin(x^2+1)/(1+sqrt(2+x))
endfunction
rez=integrate('f(x)','x',3,5)
disp(rez)

x cos y x 2
21. S se calculeze
dxdy , D x, y , 0 x 2, x 1 y x 2 1 prin
2
2
1 x y
D

procedura integrate din Scilab.


//integrale duble
function z=f(x, y)
z=(x*cos(y)+x^2)/(1+x^2+y^2)
endfunction
function y=jos(x)
y=x-1
endfunction
function y=sus(x)
y=x^2+1
endfunction
function val=asta(x)
val=integrate('f(x,y)','y',jos(x),sus(x))
endfunction
a=0; b=2;
rez=integrate('asta(x)','x',a,b)
disp(rez)

22. S se calculeze integrala tripl

xy z

1 x y z dxdydz , prin procedura integrate


V

din Scilab, unde

V x, y, z , x 2 y 2 z 1, 1 x 2 y 1 x 2 , 1 x 1
//integrala tripla
function u=f(x, y, z)
u=(x*y+z)/(1+x+y+z)
endfunction
function z=zjos(x, y)
z=x^2+y^2
endfunction
function z=zsus(x, y)
z=1
endfunction
function y=jos(x)
y=-sqrt(1-x^2)
endfunction
function y=sus(x)
y=sqrt(1-x^2)
endfunction
a=-1
b=1
function v=intz(x, y)
v=integrate('f(x,y,z)','z',zjos(x,y),zsus(x,y))
endfunction
function v=inty(x)
v=integrate('intz(x,y)','y',jos(x),sus(x))
endfunction
tic()
rez=integrate('inty(x)','x',a,b)
disp(rez)
disp(toc())

23. S se programeze problema Cauchy y ' y e x , y 0 0 prin metodele Euler,


Euler modificat, Euler mbuntit, Euler predictor-corector, Runge-Kutta de
ordinal 4.
//metode numerice pentru ecuatii diferentiale
clear
function z=f(x, y)
z=y+exp(x)
endfunction
//conditiile initiale
xi=0; yi=0;
//intervalul
L=1;
n=10;
h=L/n;
x=linspace(xi,xi+L,n+1);
//metoda Euler
yeuler=zeros(1,n+1);
yeuler(1)=yi;
for i=1:n
yeuler(i+1)=yeuler(i)+h*f(x(i),yeuler(i));
end
plot(x,yeuler,'r-');
//metoda Euler modificata
yemodif=zeros(1,n+1);
yemodif(1)=yi;
for i=1:n
yemodif(i+1)=yemodif(i)+h*f(x(i)+h/2,yemodif(i)+h/2*f(x(i),yemodif(i)));
end
plot(x,yemodif,'g-.')
//Euler imbunatatita
yeimb=zeros(1,n+1);
yeimb(1)=yi;
for i=1:n
yeimb(i+1)=yeimb(i)+h/2*(f(x(i),yeimb(i))+f(x(i)+h,yeimb(i)+h*f(x(i),yeimb(i))));
end
plot(x,yeimb,'y:')
//Euler predictor-corector
eps=0.0000000001;
yepc=zeros(1,n+1);
yepc(1)=yi;

for i=1:n
yp=yepc(i)+h*f(x(i)+h/2,yepc(i)+h/2*f(x(i),yepc(i)));
yc=yepc(i)+h/2*(f(x(i),yepc(i))+f(x(i)+h,yp));
while (abs(yc-yp)/(1+abs(yp))>eps)
yp=yc;
yc=yepc(i)+h/2*(f(x(i),yepc(i))+f(x(i)+h,yp));
end
yepc(i+1)=yc;
end
plot(x,yepc,'k:');
//metoda Runge-Kutta
yrk4=zeros(1,n+1);
yrk4(1)=yi;
for i=1:n
k1=h*f(x(i),yrk4(i));
k2=h*f(x(i)+h/2,yrk4(i)+k1/2);
k3=h*f(x(i)+h/2,yrk4(i)+k2/2);
k4=h*f(x(i)+h,yrk4(i)+k3);
yrk4(i+1)=yrk4(i)+(k1+2*k2+2*k3+k4)/6;
end
plot(x,yrk4,'c-')
//y exact
yexact=zeros(1,n+1);
for i=1:n+1
yexact(i)=x(i)*exp(x(i));
end
plot(x,yexact,'b:')
xgrid

y1 ' 0.1 y1 0.1 y1 y2


, y1 0 20, y2 0 20 pe un
y2 ' 0.3 y2 0.02 y1 y2

23. S se rezolve problema Cauchy

interval de lungime L=200. Programele se vor face pentru metodele: Euler, Euler
modificat, Euler mbuntit, Runge-Kutta de ordinal 4. S se fac graficul curbei
y1 x , y2 x 0 x 200 .
//metoda numerice pentru sisteme de ecuatii diferentiale
clear
nec=2;
function z=f(x, y)
z=zeros(nec,1);
z(1)=0.1*y(1)-0.01*y(1)*y(2)
z(2)=-0.3*y(2)+0.02*y(1)*y(2)
endfunction

//conditiile initiale
xi=0; yi=[20;20];
//intervalul
L=100;
n=200;
h=L/n;
x=linspace(xi,xi+L,n+1);
//metoda Euler
yeuler=zeros(nec,n+1);
yeuler(:,1)=yi;
for i=1:n
yeuler(:,i+1)=yeuler(:,i)+h*f(x(i),yeuler(:,i));
end
//metoda Euler modificata
yemodif=zeros(nec,n+1);
yemodif(:,1)=yi;
for i=1:n
yemodif(:,i+1)=yemodif(:,i)+h*f(x(i)+h/2,yemodif(:,i)+h/2*f(x(i),yemodif(:,i)));
end
//Euler imbunatatita
yeimb=zeros(nec,n+1);
yeimb(:,1)=yi;
for i=1:n
yeimb(:,i+1)=yeimb(:,i)+h/2*(f(x(i),yeimb(:,i))+f(x(i)+h,yeimb(:,i)+h*f(x(i),yeimb(:,i))));
end
//metoda Runge-Kutta
yrk4=zeros(nec,n+1);
yrk4(:,1)=yi;
for i=1:n
k1=h*f(x(i),yrk4(:,i));
k2=h*f(x(i)+h/2,yrk4(:,i)+k1/2);
k3=h*f(x(i)+h/2,yrk4(:,i)+k2/2);
k4=h*f(x(i)+h,yrk4(:,i)+k3);
yrk4(:,i+1)=yrk4(:,i)+(k1+2*k2+2*k3+k4)/6;
end
//plot(x,yrk4(1,:),'r');
//plot(x,yrk4(2,:),'b');
//plot(x,yrk4(3,:),'k')
plot(yrk4(1,:),yrk4(2,:))

xgrid

Se obine urmtorul grafic:

y1 ' 0.1 y1 0.1 y1 y2


, y1 0 20, y2 0 20 pe un
y2 ' 0.3 y2 0.02 y1 y2

24. S se rezolve problema Cauchy

interval de lungime L=200. Programele se vor face pentru metodele AdamsBashfort i Adams-Moulton. Paii iniiali se vor calcula prin metoda RK4. S se
fac graficul curbei y1 x , y2 x 0 x 200 .
//metoda multipas pentru ecuatii diferentiale
clear
nec=2;
function z=f(x, y)
z=zeros(nec,1);
z(1)=0.1*y(1)-0.01*y(1)*y(2)
z(2)=-0.3*y(2)+0.02*y(1)*y(2)
endfunction
//conditiile initiale
xi=0; yi=[20;20];
//intervalul
L=1000;
n=20000;
h=L/n;
x=linspace(xi,xi+L,n+1);
//primii 3 pasi
ymp=zeros(nec,n+1);
ymp(:,1)=yi;
for i=1:3
k1=h*f(x(i),ymp(:,i));
k2=h*f(x(i)+h/2,ymp(:,i)+k1/2);
k3=h*f(x(i)+h/2,ymp(:,i)+k2/2);
k4=h*f(x(i)+h,ymp(:,i)+k3);
ymp(:,i+1)=ymp(:,i)+(k1+2*k2+2*k3+k4)/6;
end
//Adams Bashfort de ordinul 2
for i=4:n
ymp(:,i+1)=ymp(:,i)+h/2*(3*f(x(i),ymp(:,i))-f(x(i-1),ymp(:,i-1)))

end
yab2=ymp;
//plot(yab2(1,:),yab2(2,:));
//xgrid
//Adams Bashfort de ordinul 3
for i=4:n
ymp(:,i+1)=ymp(:,i)+h/12*(23*f(x(i),ymp(:,i))-16*f(x(i-1),ymp(:,i-1))+5*f(x(i-2),ymp(:,i-2)));
end
yab3=ymp;
//plot(yab3(1,:),yab3(2,:));
xgrid;
//Adams Bashfort de ordinul 4
for i=4:n
ymp(:,i+1)=ymp(:,i)+h/24*(55*f(x(i),ymp(:,i))-59*f(x(i-1),ymp(:,i-1))+37*f(x(i-2),ymp(:,i-2))-9*f(x(i3),ymp(:,i-3)));
end
yab4=ymp;
//plot(yab4(1,:),yab4(2,:));
//xgrid;
//Adams Moulton de ordinul 3
eps=0.0000000001;
for i=4:n
yp=ymp(:,i)+h/24*(55*f(x(i),ymp(:,i))-59*f(x(i-1),ymp(:,i-1))+37*f(x(i-2),ymp(:,i-2))-9*f(x(i-3),ymp(:,i-3)));
yc=ymp(:,i)+h/12*(5*f(x(i+1),yp)+8*f(x(i),ymp(:,i))-f(x(i-1),ymp(:,i-1)));
while (abs(yc-yp)/(1+abs(yp))>eps)
yp=yc;
yc=ymp(:,i)+h/12*(5*f(x(i+1),yp)+8*f(x(i),ymp(:,i))-f(x(i-1),ymp(:,i-1)));
end
ymp(:,i+1)=yc;
end
yam3=ymp;
//plot(yam3(1,:),yam3(2,:));
xgrid
//Adams Moulton de ordinul 4
eps=0.0000000001;
for i=4:n
yp=ymp(:,i)+h/24*(55*f(x(i),ymp(:,i))-59*f(x(i-1),ymp(:,i-1))+37*f(x(i-2),ymp(:,i-2))-9*f(x(i-3),ymp(:,i-3)));
yc=ymp(:,i)+h/24*(9*f(x(i+1),yp)+19*f(x(i),ymp(:,i))-5*f(x(i-1),ymp(:,i-1))+f(x(i-2),ymp(:,i-2)));
while (abs(yc-yp)/(1+abs(yp))>eps)
yp=yc;
yc=ymp(:,i)+h/24*(9*f(x(i+1),yp)+19*f(x(i),ymp(:,i))-5*f(x(i-1),ymp(:,i-1))+f(x(i-2),ymp(:,i-2)));
end
ymp(:,i+1)=yc;
end
yam4=ymp;
plot(yam4(1,:),yam4(2,:));
xgrid

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