当x的某些值已知并且b是零向量时,如何求解Ax = b

时间:2014-01-21 17:03:38

标签: matlab matrix

我有一个矩阵Q = A(64x64),向量f = b是零向量,我知道x = q的一些值。我知道我应该在等式的右边(到b)转移相应的列和行(已知的x = q),但我不知道,如何在Matlab中进行。我应该为第1,第5,第9,第13,第17,第21,第25,第29,第37,第41,第45,第49,第53,第57和第61,列和行执行此操作。你能救我吗?

这是该计划:

clear all;
K=zeros(64,64);
f=zeros(64,1);

ne=32;
E= 8000; %Young
P= 0.51; %Poisson

Lambda=(E*P)/((1+P)*(1-2*P));
Eta=E/(2*(1+P));

%ILOK
ILOK=[
1   3   5   7   2   4   6   8;
5   7   9   11  6   8   10  12;
9   11  13  15  10  12  14  16;
13  15  17  19  14  16  18  20;
17  19  21  23  18  20  22  24;
21  23  25  27  22  24  26  28;
25  27  29  31  26  28  30  32;
29  31  33  35  30  32  34  36;
33  35  37  39  34  36  38  40;
37  39  41  43  38  40  42  44;
41  43  45  47  42  44  46  48;
45  47  49  51  46  48  50  52;
49  51  53  55  50  52  54  56;
53  55  57  59  54  56  58  60;
57  59  61  63  58  60  62  64;
61  63  1   3   62  64  2   4;
3   0   7   0   4   0   8   0;
7   0   11  0   8   0   12  0;
11  0   15  0   12  0   16  0;
15  0   19  0   16  0   20  0;
19  0   23  0   20  0   24  0;
23  0   27  0   24  0   28  0;
27  0   31  0   28  0   32  0;
31  0   35  0   32  0   36  0;
35  0   39  0   36  0   40  0;
39  0   43  0   40  0   44  0;
43  0   47  0   44  0   48  0;
47  0   51  0   48  0   52  0;
51  0   55  0   52  0   56  0;
55  0   59  0   56  0   60  0;
59  0   63  0   60  0   64  0;
63  0   3   0   64  0   4   0;
];

%x
xm=[
9.000   14.500  8.315   13.396;
8.315   13.396  6.364   10.253;
6.364   10.253  3.444   5.549;
3.444   5.549   0.000   0.000;
0.000   0.000   -3.444  -5.549;
-3.444  -5.549  -6.364  -10.253;
-6.364  -10.253 -8.315  -13.396;
-8.315  -13.396 -9.000  -14.500;
-9.000  -14.500 -8.315  -13.396;
-8.315  -13.396 -6.364  -10.253;
-6.364  -10.253 -3.444  -5.549;
-3.444  -5.549  0.000   0.000;
0.000   0.000   3.444   5.549;
3.444   5.549   6.364   10.253;
6.364   10.253  8.315   13.396;
8.315   13.396  9.000   14.500;
14.500  20.000  13.396  18.748;
13.396  18.748  10.253  14.142;
10.253  14.142  5.549   7.654;
5.549   7.654   0.000   0.000;
0.000   0.000   -5.549  -7.654;
-5.549  -7.654  -10.253 -14.142;
-10.253 -14.142 -13.396 -18.748;
-13.396 -18.748 -14.500 -20.000;
-14.500 -20.000 -13.396 -18.748;
-13.396 -18.748 -10.253 -14.142;
-10.253 -14.142 -5.549  -7.654;
-5.549  -7.654  0.000   0.000;
0.000   0.000   5.549   7.654;
5.549   7.654   10.253  14.142;
10.253  14.142  13.396  18.748;
13.396  18.748  14.500  20.000;
];

%y
ym=[
0.000   0.000   3.444   5.549
3.444   5.549   6.364   10.253
6.364   10.253  8.315   13.396
8.315   13.396  9.000   14.500
9.000   14.500  8.315   13.396
8.315   13.396  6.364   10.253
6.364   10.253  3.444   5.549
3.444   5.549   0.000   0.000
0.000   0.000   -3.444  -5.549
-3.444  -5.549  -6.364  -10.253
-6.364  -10.253 -8.315  -13.396
-8.315  -13.396 -9.000  -14.500
-9.000  -14.500 -8.315  -13.396
-8.315  -13.396 -6.364  -10.253
-6.364  -10.253 -3.444  -5.549
-3.444  -5.549  0.000   0.000
0.000   0.000   5.549   7.654
5.549   7.654   10.253  14.142
10.253  14.142  13.396  18.748
13.396  18.748  14.500  20.000
14.500  20.000  13.396  18.748
13.396  18.748  10.253  14.142
10.253  14.142  5.549   7.654
5.549   7.654   0.000   0.000
0.000   0.000   -5.549  -7.654
-5.549  -7.654  -10.253 -14.142
-10.253 -14.142 -13.396 -18.748
-13.396 -18.748 -14.500 -20.000
-14.500 -20.000 -13.396 -18.748
-13.396 -18.748 -10.253 -14.142
-10.253 -14.142 -5.549  -7.654
-5.549  -7.654  0.000   0.000
];

%Ke a fe of element    
for k=1:ne
    x=xm(k,:);%k-ty radek x-ove matice
    y=ym(k,:);%k-ty radek y-ove matice

Au=zeros(4,4);
Av=zeros(4,4);
Auv=zeros(4,4);
Avu=zeros(4,4);

%Numerical integration
for i=1:9
    a=0.774596669241483;
    gaus=[1 0 0 68/81;
          2 0 a 40/81;
          3 a 0 40/81;
          4 0 -a 40/81;
          5 -a 0 40/81;
          6 a a 25/81;
          7 a -a 25/81;
          8 -a -a 25/81;
          9 -a a 25/81];

    r=gaus(i,2);   
    s=gaus(i,3);  
    N=[(1/4)*(1-r)*(1-s);
       (1/4)*(1+r)*(1-s);
       (1/4)*(1+r)*(1+s);
       (1/4)*(1-r)*(1+s)];

    Nr=[(1/4)*(s-1);
        (1/4)*(1-s);
        (1/4)*(s+1);
        (1/4)*(-s-1)];

    Ns=[(1/4)*(r-1);
        (1/4)*(-1-r);
        (1/4)*(r+1);
        (1/4)*(1-r)];

    %Jacob matrix
    j1=Nr'*x';
    j2=Nr'*y';
    j3=Ns'*x';
    j4=Ns'*y';
    J=[j1 j2;
       j3 j4];
    detJ=abs(det(J));
    invJ=inv(J);

    %Nx a Ny
    Nx=invJ(1,1)*Nr+invJ(1,2)*Ns;
    Ny=invJ(2,1)*Nr+invJ(2,2)*Ns;

    ds=gaus(i,4)*detJ;        

    Au=Au+(Nx*(Lambda*Nx'+2*Eta*Nx')+Eta*Ny*Ny')*ds;
    Av=Av+(Ny*(Lambda*Ny'+2*Eta*Ny')+Eta*Nx*Nx')*ds;
    Auv=Auv+(Nx*Lambda*Ny'+Eta*Ny*Nx')*ds;
    Avu=Avu+(Ny*Lambda*Nx'+Eta*Nx*Ny')*ds;

    Ke=[Au Auv;
        Avu Av];
    fe=zeros(8,1);
end

%K a f
N=8;
je=1:N;
mg(je)=ILOK(k,je);
igl=mg;
inen=find(igl);
K(igl(inen),igl(inen))=K(igl(inen),igl(inen))+Ke(igl>0,igl>0);
f(igl(inen))=f(igl(inen))+fe(igl>0);

Ke=zeros(8,8);
fe=zeros(8,1);
end
K; 

然后我需要解决q = K / f 我想将列从此矩阵传输到 f (在本例中)。 谢谢你的帮助:))

1 个答案:

答案 0 :(得分:2)

这称为求解矩阵的零空间


Z = null(A)
Z = null(A,'r')
  

Z = null(A)是所获得的A的零空间的标准正交基   从奇异值分解。也就是说,A * Z可以忽略不计   元素,大小(Z,2)是A的无效,Z'* Z = I。

     

Z = null(A,'r')是从中获得的零空间的“有理”基础   减少的行梯队形式。 A * Z为零,大小(Z,2)为估计值   对于A的无效性,如果A是带整数的小矩阵   元素,减少行梯队形式的元素(如计算   使用rref)是小整数的比率。

     

正交基数在数值上是优选的,而理性的   在教学上可能是优选的基础。

请参阅下面参考文献部分中的完整解决方案示例,因为它们包含特定于MATLAB的示例,并制定了“手动”解决方案。

祝你好运!

<强>参考


http://www.mathworks.com/help/matlab/ref/null.html

http://www.math.sunysb.edu/~badger/mat211f12/solver.pdf