2014-12-14 10 views
1

Когда я посещаю курс алгоритма, профессор дает нам интересный вопрос о матричных вычислениях. Дано * N maxtrix А и п * 1 вектор-столбец б, нам нужно вычислить соответствующий х, которые удовлетворяют: Ах = Ь с использованием языка MATLAB, А и В определены как следующее:Как правильно вычислить эту матрицу

A=[]; 
for j=1:n-1 
    aj=[]; 
    aj=[aj;repmat(1,j-1,1)]; 
    aj=[aj;1]; 
    aj=[aj;repmat(-1,n-j,1)]; 
    A=[A,aj]; 
end 
A=[A,repmat(1,n,1)]; 
b=rand(n,1)*2; 

мы просто получаем значение х на входе:

x=A\b; 

затем проверяем результат на:

res=A*x-b; 

мы находим много эл ements' абсолютное значение Рез больше 1.

Но, проф говорят нам, что: просто добавив randomlized пункт как следующий

A1=(A1+rand(n,n)*0.0001) 
x1=A1\b; 
res1=A*x1-b;  # there ,this is A not A1 

И мы найдем элементы этого res1 и все меньше чем 1e- 4

Но, состояние A и A1 почти одинаково.

Я думаю, это скопированная численная ошибка. Но я не могу объяснить это явление математически и адекватно. Math geek или CSers знают? Спасибо.

+0

Я пробовал для 'n = 6,10, ..' и 'max (res)' не превышал '0,2'. – Rashid

+0

Я тестирую его для n = 50, 70, 100, тогда я получаю потрясающий результат – lightninghe

ответ

0

Это действительно зависит от матрицы A.
Существует так много решений линейного уравнения, что мы не можем сказать вам, почему в этом конкретном случае вы получите такой эффект.
Посмотрите на следующее: http://de.mathworks.com/help/matlab/ref/mldivide.html

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

+0

Спасибо, может быть, некоторые алгоритмы произведут совершенно потрясающий результат. Как жаль, я не могу знать внутреннюю вычислительную процедуру. = = – lightninghe