clc;clear all; E=210; l=680; B=50; h=8; F=1;N=2; x=linspace(0,l,N); syms a b=l-a; if (0<=x)&&(x<=a) y=F*b*x*(l^2-x^2-b^2)/(6*E*I*l); if (a<=x)&&(x<=l) y=F*a*(l-x)*(2*l*x-x^2-a^2)/(6*E*I*l); end end 1、代码包含初始条件和挠曲线方程,请根据挠曲线方程计算,令式中的F=1,计算N个节点的位移(去掉两边的支撑点),得到柔度矩阵的第1列。然后在第2个质量上施加一个单位力1,得到柔度矩阵的第2列,以此类推。 2、 编程时用双重循环控制,先计算a,b,x,然后带入公式。 3、 刚度矩阵为柔度矩阵的逆矩阵。
时间: 2024-02-17 19:59:45 浏览: 140
根据您提供的代码,可以进行如下修改来计算柔度矩阵的每一列:
```matlab
clc; clear all;
E = 210;
l = 680;
B = 50;
h = 8;
F = 1;
N = 5; % 为了方便计算,这里将节点数改为5
x = linspace(0, l, N);
I = B * h^3 / 12;
K = zeros(N, N); % 初始化刚度矩阵为零矩阵
for i = 2 : N-1 % 去掉两端的支撑点
a = x(i);
b = l - a;
if (0 <= x(i)) && (x(i) <= a)
y = F * b * x(i) * (l^2 - x(i)^2 - b^2)/(6*E*I*l);
elseif (a <= x(i)) && (x(i) <= l)
y = F * a * (l - x(i)) * (2*l*x(i) - x(i)^2 - a^2)/(6*E*I*l);
end
K(i, i-1) = K(i, i-1) - y; % 填充柔度矩阵第一列
K(i, i) = K(i, i) + 2 * y;
K(i, i+1) = K(i, i+1) - y;
end
K_inv = inv(K); % 计算刚度矩阵
```
这里使用了一个循环来计算每个节点的位移,并填充柔度矩阵的第一列。之后,使用 `inv()` 函数求得刚度矩阵的逆矩阵。如果需要计算柔度矩阵的其他列,可以在循环中再次施加单位力,计算每个节点的位移,并填充柔度矩阵的其他列。
阅读全文