我有一个矩阵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 (在本例中)。 谢谢你的帮助:))
答案 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的示例,并制定了“手动”解决方案。
祝你好运!<强>参考强>