4 svar
344 visningar
Louiger behöver inte mer hjälp
Louiger 470
Postad: 2 jan 2020 20:08

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

SaintVenant Online 3936
Postad: 2 jan 2020 22:49

Till att börja med är din steglängd fel. Den ska vara som du kan se i instruktionen:

h=Ln+1

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:

-T0+2T1-T2h2=1kQ(x=h)

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:

1h22-10-12-10-12

Om vi kollar på första ekvationen från det linjära ekvationssystemet du genererar skulle den vara:

2T1-T2h2=1kQ(x=0)

Den bör vara:

2T1-T2h2=1kQ(x=h)+1h2T0

SaintVenant Online 3936
Postad: 3 jan 2020 01:48

En rättelse: Din A-matris ser helt korrekt ut. Det är bara b-matrisen (den du kallar Y i koden) som är fel. 

Louiger 470
Postad: 3 jan 2020 05:18
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?

SaintVenant Online 3936
Postad: 3 jan 2020 12:29
Louiger skrev:

På vilket sätt är b fel?

Läste du inte mitt första inlägg?

Svara
Close