【问题标题】:How to solve Ax=b when some values of x are known and b is vector of zeros当 x 的某些值已知且 b 是零向量时如何求解 Ax=b
【发布时间】:2014-01-22 02:25:39
【问题描述】:

我有一个矩阵 Q=A (64x64),一个向量 f=b 是零向量,我知道一些 x=q 的值。我知道我应该将等式右侧的相应列和行(已知x = q)转移(到b),但我不知道如何在Matlab中制作它。我应该为第 1、5、9、13、17、21、25、29、33、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 (在这种情况下)。 谢谢你的帮助:)

【问题讨论】:

  • 您能提供给我们您的x 向量吗?如果是这样,我可以给出更具体的解决方案。否则,我提供的一般程序应该足够了。

标签: matlab matrix


【解决方案1】:

这称为求解矩阵的零空间


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

Z = null(A) 是得到的 A 的零空间的正交基 从奇异值分解。也就是说,A*Z 可以忽略不计 元素,size(Z,2)是A的零点,Z'*Z = I。

Z = null(A,'r') 是从 减少的行梯队形式。 A*Z 为零,size(Z,2) 是估计值 对于 A 的零点,并且,如果 A 是一个整数的小矩阵 元素,简化行梯形形式的元素(如计算 使用 rref) 是小整数的比率。

正交基在数值上更可取,而有理 基础可能在教学上更可取。

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

祝你好运!

参考文献


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

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

【讨论】:

  • 我可以给你发孔程序吗?我有矩阵 A(64x64),我需要“仅”将等式右侧的 24 列和行传输(到 b)。矢量 x 是未知的,我想得到这样的:x=A\b...我可以在这里发送还是通过电子邮件发送?
  • 在所有情况下,请将整个内容发布到 StackOverflow 上,以便未来的读者可以从中受益。其次,您是在 MATLAB 中编写算法来求解零空间,还是只需要这个特定问题的答案? (即:这是一道数学题还是一道编程题?)
  • 正在编程,我需要 Matlab 中的程序。我知道如何在纸上手工完成。好的,我将重新编辑问题;)
  • 我重新编辑了 ;) 请看一下...复制到 Matlab 并运行它。打印 K 并且我想将列从该矩阵的行转移到 f(在这种情况下)。
  • 好的,所以您正在尝试实现零空间求解器算法。抱歉,我能提供的最好的方法是一般程序的链接。
猜你喜欢
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多