4 svar
61 visningar
Louiger är nöjd med hjälpen!
Louiger 361
Postad: 2 jan 2020

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

Ebola 991
Postad: 2 jan 2020

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

Ebola 991
Postad: 3 jan 2020

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 361
Postad: 3 jan 2020
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?

Ebola 991
Postad: 3 jan 2020
Louiger skrev:

På vilket sätt är b fel?

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

Svara Avbryt
Close