1
svar
66
visningar
Maja9999 behöver inte mer hjälp
Värmeledningsekvation analytiskt
T = 0.01;
dt = 10^(-5);
N = 100;
dx = 1/N;
D = 1;
TL = 0;
TR = 0;
B = D * dt / dx^2;
t = (0:dt:T)';
w0 = zeros(N,1);
w1 = zeros(N,1);
%g = zeros(N,1);
for j = 1:length(t)
for i = 2:N-1
x = (i-1) * dx;
w0(i) = sin(5*pi*x);
w1(i-1) = w0(i-1);
w1(i) = w0(i);
w1(i+1) = w0(i+1);
end
A = B * diag(ones(N - 1, 1), -1) + (1 - 2 * B) * diag(ones(N, 1)) + B * diag(ones(N - 1, 1), 1);
v = A\w1;
w1(1) = TL;
w1(N) = TR;
w0 = w1;
end
%analytisk
U = zeros(N, 1);
for k = 1:length(t)
t = k * dt;
for n = 1:N
x = (n - 1) * dx;
Hn = 2 * integral(@(x) sin(5 * pi * x) .* sin(n * pi * x), 0, 1);
U(n, k) = Hn * exp(-D * n^2 * pi^2 * t) * sin(n * pi * x);
Uvek = reshape(U, [], 1);
Uvek2 = Uvek(1:length(v));
end
end
figure;
plot((1:N)*dx, v, 'r', (1:N)*dx, Uvek2, 'b');
xlabel('Stångens längd');
ylabel('Temperatur');
title('Värmeledningsekvation');
Detta är en kod för värmeledningsekvationen där u(x,0)=f(x)=sin(5*pi*x)
Plotten till den analytiska lösningen känns fel, så jag undrar om jag har gjort den analytiska beräkningen samt kodat den rätt?
Det är svårt att hjälpa dig om man inte vet vad uppgiften är. Jsg gissar att vi behöver veta geometrin och rand-/begynnelsevillkor.