6

Учитывая L и ULU decomposition и вектор констант b таким образом, что LU*x=b, есть ли встроенная функция, которая найти x? Среднее значение что-то вроде -Решить системы линейных уравнений с помощью разложения заданной LU и вектором констант

X = functionName(L,U,b) 

Обратите внимание, что в обоих L и U мы имеем дело с треугольными матрицами, которые могут быть решены непосредственно forward and backward substitution без использования Gaussian elimination процесса.

Edit:

Решение этой системы линейных уравнений должно быть в соответствии со следующими шагами -

1. define y - s.t Ux=y 
2. solve Ly=b by forward substitution 
3. solve Ux=y by backward substitution 
4. return y 

Изменить 2:

я нашел linalg::matlinsolveLU, но я не пробовал это вызывает у меня слишком старую версию (R2010a). Он работает для кого-то?

+0

Являются ли ваши векторы и матрицы символическими? Если это так, вам нужно подробно рассказать об этом в своем вопросе. – horchler

+0

Кроме того, 'mldivide' [перегружен для символических систем] (http://www.mathworks.com/help/symbolic/arithmeticoperations.html), но не будет работать точно так же. – horchler

+0

Что означает «матрица символическая»? – URL87

ответ

5

Если у вас есть:

A = rand(3); 
b = rand(3,1); 

то решение системы может быть просто вычислена как:

x = A\b 

Или, если у вас уже есть разложение LU А, то:

[L,U] = lu(A); 
xx = U\(L\b) 

mldivide функция smart enough, чтобы обнаружить, что матрица треугольник и выбрал соответствующий алгоритм (форвардная/обратная замена)

+0

этот вид полезен, если у вас есть фиксированная матрица коэффициентов 'A', но много разных правых сторон' b'.Таким образом, предварительно вычислив разложение, вы можете ускорить работу до – Amro

+0

Как вы знаете, что это «достаточно умный, чтобы обнаружить ...»? – URL87

+0

Я дал ссылку на документы, которые объясняют, как «mldivide» реализует различные алгоритмы и выбирает подходящий, основываясь на характеристиках входной матрицы. – Amro

3

Я думаю, что это то, что вы ищете:

A = rand(3,3); % Random 3-by-3 matrix 
b = rand(3,1); % Random 3-by-1 vector 
[L,U] = lu(A); % LU decomposition 
x = U\(L\b) % Solve system of equations via mldivide (same as x = A\b or x = (L*U)\b) 
err = L*U*x-b % Numerical error 

система уравнений решается с помощью mldivide. Вы также можете посмотреть qr, который реализует QR decomposition вместо использования разложения LU. qr может решить проблему A*x = b и является более эффективным. Также посмотрите на linsolve. Для символических систем вы все равно сможете использовать mldivide или попробуйте linalg::matlinsolveLU в MuPAD.

+0

см. Мой отредактированный пост, пожалуйста – URL87

+0

Спасибо за ссылки @Amro. – horchler

 Смежные вопросы

  • Нет связанных вопросов^_^