Randvärdesproblem
Jag har skrivit ett program som skapar en n*n, A-matris som ser ut typ såhär:
A=1/h^2
[2 -1 000....
-1 2 -1 00....
0 -1 2 -1 0...
0 0 -1 2 -1...
0 0 0 -1 2 ...]
och jag har skapat en n*1, b-matris vilket gör att jag kan "räkna ut" T, men eftersom jag har startvärde och slutvärde på T dvs T0=300 och Tend=400 fattar jag inte riktigt hur jag ska få till det så att T0 faktiskt blir 300. Är det någon som förstår vad jag undrar över och kan guida mig? Lägger programmet efter uppgiften.
clear all, close all, clc
N=3;
a=0; %startvärde
L=2; %slutvärde
k=2.5;
b=L;
h=(b-a)/N;
A=[];
B=[-1 2 -1];
for i=1:N
D=zeros(N+1-i);
D=D(1,:);
C=zeros(i);
C=C(1,:);
E=[C B D];
A=[A;E];
end
disp('A')
disp(A)
A(:,1)=[];
A(:,1)=[];
A(:,end)=[];
A(:,end)=[];
disp('A reducerad')
disp(A) %komihåg 1/h^2[A]
A=A/(h^2)
Y=[];
for i=0:(N-1)
x=i*h;
Q(i+1)=300*exp(-(x-1)^2); %Q(1) motsvarar i Q(0) mattetermer
Y=[Y;Q(i+1)]; %komihåg 1/k
end
Y=Y/k %Y motsvarar uppgiftens Q(x)*1/k dvs b
% AT=Y T=A\Y
T=A\Y
Till att börja med är din steglängd fel. Den ska vara som du kan se i instruktionen:
Om N = 3 så ska du dela längden i fyra delar (n+1) och generera fem punkter. Vidare till din fundering så, ingenstans i koden tar du hänsyn till T(x = 0) eller T(x = L). Du skriver i en kommentar att "Y motsvarar uppgiftens [...] b" men gör den det, verkligen? Som du kan se i vänsterledet för approximationen (3) så för i = 1 har vi:
Hur organiserar du detta i en form AT = b enligt instruktionen? Om du läser så står det att
A är en n x n-matris, T är en n x 1-vektor med temperaturvärden i det inre av intervallet och b är en n x 1-vektor som beror av bl a randvärdena T0 och TL samt Q(xi)-värdena.
Hur bör A-matrisen se ut? Den kommer inte se ut så som din gör, eller hur? För påminnelse ser din ut så här:
Om vi kollar på första ekvationen från det linjära ekvationssystemet du genererar skulle den vara:
Den bör vara:
En rättelse: Din A-matris ser helt korrekt ut. Det är bara b-matrisen (den du kallar Y i koden) som är fel.
Ebola skrev:En rättelse: Din A-matris ser helt korrekt ut. Det är bara b-matrisen (den du kallar Y i koden) som är fel.
På vilket sätt är b fel?
Louiger skrev:På vilket sätt är b fel?
Läste du inte mitt första inlägg?