You are on page 1of 7

DIFFERENZE FINITE

%% DIFF. FINITE CON TERMINE DI RICHIAMO


%FUNZIONI

%C.I.
alpha=0;
beta=0;

%INTERVALLI
a=0;
b=1;
N=80;
h=(b-a)/N;
x_nodi= linspace(a,b,N+1)'
x= x_nodi(1:end-1) +h/2;
D= N-1;
%MATRICI
mu_m= mu(x)/(h^2);

g_m= g(x)/h

d0= [ mu_m(1:end-1) + mu_m(2:end)]


di= - [mu_m(2:end)];
ds= - [mu_m(1:end-1)];

A= spdiags( [ d0,di,ds], [0,-1,1], D,D);

%differenze centrate
gi= - [g_m(2:end)]/2
gs= [g_m(1:end-1)]/2

B= spdiags( [gi,gs], [-1,1], D,D)

%differenze indietro

gi= -[g_m(2:end)]
g0= [g_m(2:end)]

B= spdiags( [g0,gi], [0,-1], D,D)

%TERMINE NOTO
b= f(x_nodi(2:end-1))

u=(A+B)\b
%% DOPPIO DIRICHLET
%C.I.
alpha=0
beta= 0

%intervallo
x_nodi=linspace(0,pi, 1001)'
h=mean(diff(x_nodi))
D=length(x_nodi)-2
x= x_nodi(1:end-1) +h/2

%matrice
mu_m=mu(x)/h^2

d0= [mu_m(1:end-1) + mu_m(2:end)]


di= -[ mu_m(2:end-1);0]
ds= -[ 0; mu_m(2:end-1)]

A= spdiags( [d0,di,ds], [0,-1,1], D,D)

%termine noto
b= [f(x_nodi(2)) + mu_m(1)*alpha; f(x_nodi(3:end-2));
f(x_nodi(end-1)) + mu_m(end)*beta]

u=A\b

%% NEUMANN SX

% DIFF. FINITE CON NEUMANN DX


%C.I.
gamma=1
beta= -1

%INTERVALLI
a=0;
b=pi
N=1000;
h=(b-a)/N
x_nodi= linspace(a,b, N+1)'

x=x_nodi(1:end-1) +h/2
D=N;

%Matrice
mu_m= mu(x)/h^2

d0= [mu_m(1)*2;mu_m(1:end-1) + mu_m(2:end);]


ds= -[0;mu_m(1)*2; mu_m(2:end-1)]
di= -[mu_m(1:end-1);0]

A=spdiags( [d0,ds,di], [0,1,-1], D,D)

%termine noto
b= [f(x_nodi(1)) - 2*gamma/h ;f(x_nodi(2:end-2)); f(x_nodi(end-
1)) + mu_m(end)*beta]

u=A\b

%% DIFF. FINITE CON NEUMANN DX

%FUNZIONI
mu=@(x) 3*ones(size(x))
f= @(x) x + cos(x)

%C.I.
alpha=-1
gamma= 2

%INTERVALLI
a=0;
b=pi
N=1000;
h=(b-a)/N
x_nodi= linspace(a,b, N+1)'

x=x_nodi(1:end-1) +h/2
D=N;

%Matrice

mu_m= mu(x)/h^2

d0= [mu_m(1:end-1) + mu_m(2:end); 2*mu_m(end)]


ds= -[0; mu_m(2:end)]
di= -[mu_m(2:end-1); mu_m(end)*2;0]

A=spdiags( [d0,ds,di], [0,1,-1], D,D)

%termine noto
b= [f(x_nodi(2)) + mu_m(1)*alpha ;f(x_nodi(3:end-1));
f(x_nodi(end)) + (2*gamma*h/h^2)]

u=A\b
spline( x_nodi, [0,u], pi)

ELEMENTI FINITI
%FUNZIONI
mu=@(x) ones(size(x));
f= @(x) 2*sin(x) + (1-x).*sin(x)
g=@(x) (9*(log(5)^2)*x.^4 - 6*log(5)*x)

%Intervallo
N=110;
x_nodi= [0, 0.1, 0.27, 0.37, 0.41, 0.54, 0.66, 0.77, 0.8, 0.93,
1]'
%x_nodi=(0:1/N:1)'
h= diff(x_nodi)
x= x_nodi(1:end-1) +h(1:end)/2

%% DOPPIO DIRICHLET
alpha=0;
beta=0;

N_dof= length(x_nodi)-2
%MATRICE
mu_m= mu(x)./h;

d0=[ mu_m(1:end-1) + mu_m(2:end)];


di= -[mu_m(2:end-1);0];
ds= -[0; mu_m(2:end-1)];

A= spdiags( [d0, ds, di], [0,1,-1], N_dof, N_dof)

%TERMINE NOTO
b= f(x_nodi(2:end-1)).*(h(1:end-1) + h(2:end))/2
b(1) = b(1) + mu_m(1)*alpha
b(end) = b(end) + mu_m(end)*beta
u=A\b

% DOPPIO NEUMANN + RICHIAMO

gammai=0
gammaf= -15*log(5)

N_dof=length(x_nodi)

%MATRICE
mu_m= mu(x)./h

d0= [ mu_m(1) ; mu_m(1:end-1) + mu_m(2:end); mu_m(end)];


di= -[mu_m(1:end);0]
ds=-[ 0; mu_m(1:end)]

A=spdiags( [d0, di, ds], [0,-1,1], N_dof, N_dof)

g_m= g(x).*h

g0= 1/3*[ g_m(1); g_m(1:end-1) + g_m(2:end); g_m(end)]


gi= 1/6*[ g_m(1:end);0]
gs= 1/6*[0; g_m(1:end)]

B= spdiags( [g0, gi, gs], [0,-1,1], N_dof, N_dof)

%TERMINE NOTO
b= [f(x_nodi(1))*h(1)/2-2*gammai ;f(x_nodi(2:end-1)).*(h(1:end-
1) + h(2:end))/2; f(x_nodi(end))*h(end)/2+gammaf]
u=(A+B)\b
sol= @(x) 5^(2-x.^3)
abs( sol(1) - u(end))

% NEUMANN DX
alpha=0
gammaf= 1

N_dof=length(x_nodi)-1

%MATRICE
mu_m= mu(x)./h

d0= [mu_m(1:end-1) + mu_m(2:end); mu_m(end)];


di= -[mu_m(2:end);0]
ds=-[ 0; mu_m(2:end)]

A=spdiags( [d0, di, ds], [0,-1,1], N_dof, N_dof)

% g_m= g(x).*h
%
% g0= 1/3*[ g_m(1); g_m(1:end-1) + g_m(2:end); g_m(end)]
% gi= 1/6*[ g_m(1:end);0]
% gs= 1/6*[0; g_m(1:end)]

%B= spdiags( [g0, gi, gs], [0,-1,1], N_dof, N_dof)

%TERMINE NOTO
b= [f(x_nodi(2:end-1)).*(h(1:end-1) + h(2:end))/2;
f(x_nodi(end))*h(end)/2+gammaf]
b(1)= b(1) + alpha*mu_m(1)
u=A\b
spline( x_nodi, [0; u], 1.83)

ODE
HEUN CON DERIVATA SECONDA
clear all
close all
clc

A= [ 0 1; -1 2]

h=0.1
t=0:h:10
z0= [pi;5]
for i=1:length(t)-1

k1=A*z0 +[0; -t(i)^2]


k2= A*(z0+k1*h) +[0; - t(i+1)^2]

z1= z0+h/2*( k1 + k2)


z0=z1
end

CONSERVAZIONE
clear all
close all
clc

a=0.5
u0= @(x) cos(2*pi*x)
lambda=1
dx=0.01
dt=lambda*dx
T=0:dt:10
X=0:dx:1
%LAX WENDROFF
%u(j+1)(1/2 -1/2*lambda*a) + u(j-1)*(1/2 + 1/2* lambda*a
u_0= (1 -a^2)
u_1= (1/2*a + 1/2*a^2)
u1= (-1/2*a + 1/2*a^2)
for k=1:length(X)-1
u(1,k)= integral(u0, X(k), X(k+1))/dx
end

for i=1:length(T)-1
u(i+1, :)= [ u_1*u(i,end)+u_0*u(i,1)+u1*u(i,2),
( u(i,3:end)*u1 + u(i, 1:end-2)*u_1+ u_0*u(i,2:end-1)),
u(i,1)*u1 + u(i,end-1)*u_1 + u_0*u(i,end) ];
end
Sol= @(t,x) cos(2*pi*(X -a*t))
U_ref= Sol(T(end),X)
plot(X, U_ref, 'g', X(1:end-1), u(end,:))

You might also like