2015-12-28 3 views
-1

У меня есть линейная система Ах = Ь, которая создается с помощью естественных сплайнов и выглядит следующим образом:Методы решения системы линейных с MATLAB

enter image description here

где  enter image description here

Код в MATLAB, который должен решить следующую систему:

clear; 
clc; 

x = [...] ; 
a = [...]; 
x0 = ...; 
n = length(x) - 1 ; 

for i = 0 : (n-1) 
    h(i+1) = x(i+2) - x(i+1) ; 
end 


b= zeros(n+1 , 1) ; 
for i =2: n 
    b(i,1) = 3 *(a(i+1)-a(i))/h(i) - 3/h(i-1)*(a(i) - a(i-1)) ; 
end 


%linear system solution. 

l(1) =0 ; m(1) = 0 ; z(1) = 0 ; 

for i =1:(n-1) 
    l(i+1) = 2*(x(i+2) - x(i)) - h(i)* m(i) ; 
    m(i+1) = h(i+1)/l(i+1); 
    z(i+1) = (b(i+1) - h(i)*z(i))/l (i+1) ; 
end 

l(n+1) =1; 
z(n+1) = 0 ; 
c(n+1) = 0 ; 

for j = (n-1) : (-1) : 0 
    c(j+1) = z(j+1) - m(j+1)*c(j+2) ; 
end 

, но я не могу понять, какой метод используется для решения проблемы l . Если бы я должен был догадаться, я бы сказал, что используется метод LU, скорректированный для трехдиагональных матриц, но я до сих пор не могу найти соединение с кодом ...

Любая помощь будет оценена!

+1

Чтобы решить линейную систему 'A * x = b', вы обычно просто используете' x = A \ b'. Чтобы построить матрицу 'A', найдите команду' diag'. Вы можете сравнить 'x' и ваше решение' c', если это даже правильно. – knedlsepp

+0

Использует треугольный матричный решатель. См. Стр. 115 книги числовых рецептов (http://nrbook.com/c/) – ja72

ответ

1

Коэффициенты выглядят немного странно (в частности, что 2 в уравнении l), но он выглядит как специализированный Thomas Algorithm где:

  1. Второй до последнего цикла выполняет вперед устранение поддиагональных к приведите матрицу в верхнетреугольную форму.
  2. Последний цикл выполняет обратную замену для решения.

Код, похоже, не соответствует взаимно однозначному алгоритму, так как решение использует векторы, которые составляют диагонали вместо самих диагоналей без явного предварительного выделения памяти. Поэтому я не могу сказать, является ли этот метод «лучшим», чем общий с летучей мыши.

+0

Я редактировал код ... «s» должен был быть «b», – Alice1nw0