2013-09-27 8 views
4

У меня есть эта особая матрица (я буду называть его A)вычислительном решить систему уравнений с вырожденной матрицей

-3a   1   0 0 
3a -2a - 1   2 0 
0  2a  -a-b-2 3 
0   0  a+b  -3 

Я пытаюсь решить Ax = 0, такие, что сумма элементов х 1. Я хочу решить для x в терминах a и b. Я знаю, как это сделать вручную (используйте гауссово исключение для записи всех компонентов в терминах четвертого компонента, затем установите четвертый компонент так, чтобы решение было нормализовано). Но есть ли способ сделать это вычислительно? Мне было бы хорошо делать это в Python, Mathematica или R. (Или MATLAB, но я не думаю, что есть способ сделать это в MATLAB.)

Код, который я копировал, сделал это, добавив пятую строку к матрице,

1 1 1 1 

, а затем с помощью QR-разложения найти решение наименьших квадратов. Тем не менее, я не думаю, что могу это сделать, потому что у меня нет значений для a и b, и я хочу решить решение в терминах a и b.

ответ

2
In[1]:= A = {{-3a,1,0,0}, {3a,-2a-1,2,0}, {0,2a,-a-b-2,3}, {0,0,a+b,-3}}; 
x = {p, q, r, s}; 
sol = Reduce[A.x==0 && p+q+r+s==1 && Det[A]==0, x, Backsubstitution->True] 

Out[3]= (1+3*a+3*a^2+a^3+a^2*b) != 0 && 
p == 1/(1+3*a+3*a^2+a^3+a^2*b) && 
q == (3*a)/(1+3*a+3*a^2+a^3+a^2*b) && 
r == (3*a^2)/(1+3*a+3*a^2+a^3+a^2*b) && 
s == (a^3 + a^2*b)/(1+3*a+3*a^2+a^3+a^2*b) 

In[4]:= x=x/.ToRules[sol (* Watch out for that denominator!!! *)]; 
Simplify[A.x] 

Out[5]= {0, 0, 0, 0} 

In[6]:= Simplify[Total[x]] 

Out[6]= 1 
+0

Спасибо, я не знаю, что вы могли бы сделать это! – Jessica

+0

Знаете ли вы, как я мог это сделать в более крупной системе, скажем, 11x11? Когда я пытаюсь, он бежит навсегда. – Jessica

+1

Если вы посмотрите на размер определителя матрицы 11x11, состоящий из небольших целых чисел и примерно того же процента выражений, содержащих переменные, как в вашей проблеме 4x4, тогда я думаю, вы получите представление о размере проблемы, которую вы задаете решать. Или, короткий ответ, нет. Но некоторые проблемы, в которых вы действительно заинтересованы в том, что ответ будет, могут стоить ждать дней или недель. Но раздражает не знать, продвигается ли он или когда-либо даст полезный ответ, если он закончит. – Bill

0

Есть способ сделать это в MATLAB, но я не мог продвинуться дальше этого.

syms a b 
A = [ -3*a,   1,   0, 0; 
     3*a, - 2*a - 1,   2, 0; 
     0,  2*a, - a - b - 2, 3; 
     0,   0,  a + b, -3; 
     1,   1,   1, 1]; 
x = solve(A,[0 0 0 0 1]') 

Я получил следующие предупреждения:

Warning: 20 equations in 2 variables. 
Warning: Explicit solution could not be found. 
Смежные вопросы