Ingenjören Ingvar har utvecklat en numerisk metod för att lösa linjära ekvationssystem med n obekanta när matrisen är tridiagonal, och har gjort det tillgängligt i MATLAB med programmet:
function x=ingvars_metod(T,b,n)
% T är en tridiagonal matris
% b är högerledvektorn i det linjära ekvationssystemet T x = b
% n är antalet obekanta i stystemet
% x är lösningen till ekvationssystemetPå en viss dator kommer Ingvar fram till att beräkningstiden för hans metod kan väl uppskattas till αn + β millisekunder där α = 1 och β = 10. Han vill använda det för att lösa differentialekvationen
y′(t) = Ty(t), ₀,
vid tidpunkt där T är en tridiagonal n × n matris och y₀ en given vektor. Matrisen T och vektorn y₀ är tillgängliga i MATLAB. Vi antar att beräkningstiden för att multiplicera T med en vektor är αn/3 och att addera två vektorer är αn/10. Ett steg av bakåt Euler innebär lösningen av ett linjärt ekvationssystem.
a)Skriv ett MATLAB program som beräknar lösningen med framåt Euler med steg och (4 p)
b)Skriv ett MATLAB program som beräknar lösningen med bakåt Euler med hjälp av Ingvars metod med steg och (4 p)
c)Vad är beräkningstiden för (a) respektive (b)?(2 p)
d)Ingvar upptäcker att problemet är styvt och att man behöver mycket finare diskretisering med framåt Euler för samma noggrannhet med bakåt Euler. Om man med framåt Euler väljer behöver man för samma noggrannhet endast med bakåt Euler. Vilken metod är snabbast för att uppnå den noggrannheten för stora n-värden? Ge ett tydligt resonemang med tydliga antaganden om beräkningstider.(2 p)
Du ser bara uppgiftslydelsen
Svarsalternativ, facit, figurer och formler — och resten av kursens uppgifter — finns bakom ett gratis konto.