有限元的matlab编程
有限元matlab仿真

有限元matlab仿真最近写有有限元作业,用matlab实现了整个的过程,顺便熟悉一下有限元的整体解题思路,感觉这确实是一种很好方法。
下面对书上的一道题做仿真吧,最后结果如下。
题目:如图所示薄板忽略自重,在力F的作用下,求各节点位移和各单元应力,已知假定该问题为平面应力问题。
这是一个正方形的薄板,上面两个顶点处被吊起来,在中心处受到一个向下的力。
现分成四个单元(下面的两个顶点编号为1,2,上面个两个为3,4,中间的5)执行程序得到如下结果1节点的位移:(u,v) = (-1.42857e-006, -7.14286e-006)2节点的位移:(u,v) = (1.42857e-006, -7.14286e-006)3节点的位移:(u,v) = (0, 0)4节点的位移:(u,v) = (0, 0)5节点的位移:(u,v) = (0, -8.57143e-006)第1单元:应力为(750000,3.75e+006,-2.25e+006)应变为(3.57143e-006,1.78571e-005,-2.14286e-005)第2单元:应力为(1.5e+006,-1.5e+006,6.98492e-010)应变为(7.14286e-006,-7.14286e-006,1.01644e-020)第3单元:应力为(750000,3.75e+006,2.25e+006)应变为(3.57143e-006,1.78571e-005,2.14286e-005)第4单元:应力为(0,9e+006,0)应变为(0,4.28571e-005,0)还可以实现各顶点移动的动画图,本来想做个gif,但发现getframe截不了屏,郁闷只能在这贴几张图了这个是不是就是ANSYS的有限元分析啊!代码部分如下,显示动画的代码麻烦点,就不贴了,从代码也可以看到,好的数据结构的重要性:main.m文件:clcclear allclose all% 数据choise = 1;switch choisecase 1% 作业第3题verts = [0 0;2 0;2 2;0 2;1 1;]*0.2;eleindex = [1 5 4;2 5 1;3 5 2;4 5 3];vertdisind = [1 1 1 1 0 0 0 0 0 1]'; R = [0 0 0 0 0 0 0 0 0 -30000]'; case 2% 书上例题verts = [0 2;0 1;1 1;0 0;1 0;2 0];eleindex = [5 2 4;6 3 5;2 5 3;3 1 2];endfigurepatch('Faces', eleindex, 'Vertices', verts, 'FaceColor', 'r'); % 绘制数据axis equalaxis off% 构造FEMhFEM.vertcount = size(verts, 1);hFEM.verts = verts;hFEM.elecount = size(eleindex, 1);hFEM.eleindex = eleindex;hFEM.mu = 0;hFEM.E = 210e9;hFEM.t = 0.01;hFEM = FEM(hFEM);% 求解有限元方程得各节点位移hFEM = FEMSolve(hFEM, vertdisind, R);for k = 1:hFEM.vertcountfprintf('%d节点的位移:(u,v)= (%g, %g)\n', k, hFEM.vertdis([2*k-1, 2*k]));end% 求各单元应力、应变for k = 1:hFEM.elecountind(1:2:5) = 2*hFEM.eleindex(k, :)-1;ind(2:2:6) = 2*hFEM.eleindex(k, :);stress = hFEM.eletruct(k).S * hFEM.vertdis(ind);strain = hFEM.eletruct(k).B * hFEM.vertdis(ind);fprintf('第%d单元:\n应力为(%g,%g,%g)\n', k, stress);fprintf('应变为(%g,%g,%g)\n', strain);endFEM.m文件:% 计算FEM分析的各种矩阵function hFEM = FEM(hFEM)% 处理每个单元for i = 1:hFEM.elecounthFEM.eletruct(i) = FEMele(hFEM, i);end% 计算合成刚度矩阵hFEM.K = FEMCalcCombiningK(hFEM);endfunction hFEMele = FEMele(hFEM, ind) hFEMele.ele = hFEM.verts(hFEM.eleindex(ind, :), :); hFEMele.B = FEMCalcB(hFEMele);hFEMele.D = FEMCalcD(hFEM);hFEMele.S = FEMCalcS(hFEMele);hFEMele.K = FEMCalcK(hFEM, hFEMele);end% 计算几何矩阵function B = FEMCalcB(hFEMele)ele = hFEMele.ele;A(:, 2:3) = ele;A(:, 1) = 1;invA = inv(A);B(1, 1:2:5) = invA(2, :);B(2, 2:2:6) = invA(3, :);B(3, 1:2:5) = invA(3, :);B(3, 2:2:6) = invA(2, :);end% 计算应力矩阵function D = FEMCalcD(hFEM)mu = hFEM.mu;E = hFEM.E;D = [1 mu 0;mu 1 0;0 0 (1-mu)/2]*E/(1-mu^2);end% 计算应力变换矩阵function S = FEMCalcS(hFEMele)S = hFEMele.D*hFEMele.B;end% 计算单元刚度矩阵function K = FEMCalcK(hFEM, hFEMele)triarea = CalcTriangleArea(hFEMele.ele);K = hFEM.t*triarea*hFEMele.B'*hFEMele.D*hFEMele.B; end% 计算三角形面积function area = CalcTriangleArea(ele)A(:, 2:3) = ele;A(:, 1) = 1;area = 0.5*det(A);end% 计算合成矩阵function K = FEMCalcCombiningK(hFEM) vertcount = hFEM.vertcount;elecount = hFEM.elecount;eleindex = hFEM.eleindex;eleK = zeros(6, 6, elecount);for k = 1:elecounteleK(:, :, k) = hFEM.eletruct(k).K;endK = zeros(vertcount*2);for i = 1:vertcountfor j = 1:vertcountfor k = 1:elecountindi = find(eleindex(k, :)==i);indj = find(eleindex(k, :)==j);if ~isempty(indi) && ~isempty(indj)K(2*i-1:2*i, 2*j-1:2*j) = K(2*i-1:2*i, 2*j-1:2*j) + eleK(2*indi-1:2*indi, 2*indj-1:2*indj, k);endendendendendFEMSolve.m文件:% 求解有限元方程function hFEM = FEMSolve(hFEM, vertdisind, R)K = hFEM.K;hFEM.vertdis = SolveFEM(vertdisind, R, K);for i = 1:hFEM.elecounthFEM.eletruct(i).vertdis(1:2:5) = hFEM.vertdis(2*hFEM.eleindex(i, :) - 1); % uhFEM.eletruct(i).vertdis(2:2:6) = hFEM.vertdis(2*hFEM.eleindex(i, :)); % vendendfunction vertdis = SolveFEM(vertdisind, R, K)vertdis = vertdisind;ind = find(vertdisind ~= 0);Krule = K(ind, ind); Rrule = R(ind);vertdis(ind) = Krule\Rrule; end。
matlab有限元刚度矩阵编程

一、概述有限元方法是工程学和科学领域中常用的数值分析工具,用于求解复杂的结构力学问题。
在有限元分析中,刚度矩阵是一个重要的概念,它描述了结构的刚度性质,并可以用于求解结构的位移、应力和应变分布。
MATLAB是一款功能强大的数学软件,它提供了丰富的工具和函数,可以用于编程求解有限元刚度矩阵。
本文将介绍如何使用MATLAB编程求解有限元刚度矩阵,并给出详细的步骤和代码示例。
二、有限元刚度矩阵的理论基础有限元分析的基本思想是将一个复杂的结构分解成许多小的单元,每个单元都可以用简单的数学方程描述。
在有限元分析中,每个单元都有一个刚度矩阵,它描述了单元的刚度性质。
结构的总刚度矩阵可以通过合并所有单元的刚度矩阵得到。
总刚度矩阵可以用于求解结构的位移、应力和应变分布,是有限元分析的核心之一。
三、MATLAB编程求解有限元刚度矩阵的步骤在MATLAB中,可以通过以下步骤编程求解有限元刚度矩阵:1. 定义结构的几何形状和材料性质,确定结构的边界条件和加载条件。
2. 将结构分解成有限元单元,根据单元的几何形状和材料性质建立单元的刚度矩阵。
3. 合并所有单元的刚度矩阵,得到结构的总刚度矩阵。
4. 根据边界条件和加载条件,求解结构的位移。
5. 根据结构的总刚度矩阵和位移,计算结构的应力和应变分布。
四、MATLAB编程求解有限元刚度矩阵的代码示例以下是一个简单的MATLAB代码示例,用于求解一维弹簧元的刚度矩阵:```MATLAB定义弹簧元的长度和弹性模量L = 1;E = 1;计算弹簧元的刚度矩阵k = E * A / L;K = [k, -k; -k, k];```以上代码示例中,我们首先定义了弹簧元的长度L和弹性模量E,然后通过公式计算了弹簧元的刚度矩阵K。
这是一个简单的一维情况,实际工程中可能涉及到更复杂的二维、三维情况,但基本的求解步骤是相似的。
五、总结MATLAB是一个强大的数学软件,可以用于编程求解有限元刚度矩阵。
Matlab 有限元法计算分析程序编写

MATLAB的使用方法
1) 最简单的计算器使用法 求[12+2×(7-4)]÷32的算术运算结果 (1)用键盘在MATLAB指令窗中输入一下内容 (12+2*(7-4))/3^2 (2)在上述表达式输入完成后,按【Enter】键,该指令被执行 (3)在指令执行后,MATLAB指令窗中将显示一下内容 ans = 2 [说明] 加 + 减 乘 * 除 / 或 \ (这两个符号对于数组有不同的含义) 幂 ^ “ans”是answer的缩写,其含义是运算答案,它是MATLAB的一个默 认变量
material_number = fscanf( fid_in, '%d', 1 ) ; % read material number material = zeros( material_number, 3 ) ; for i=1:1:material_number nm = fscanf( fid_in, '%d', 1 ) ; material( i, : ) = fscanf( fid_in, '%f', [1,3] ) ; % read materials definition end bc_number = fscanf( fid_in, '%d', 1 ) ; % read boundary conditions number bc = zeros( bc_number, 3 ) ; for i=1:1:bc_number % read boundary condition definition bc( i, 1 ) = fscanf( fid_in, '%d', 1 ) ; bc( i, 2 ) = fscanf( fid_in, '%d', 1 ) ; bc( i, 3 ) = fscanf( fid_in, '%f', 1 ) ; end
matlab有限元三单元编程

matlab有限元三单元编程MATLAB是一种功能强大的编程语言和环境,广泛用于工程和科学领域的数值计算、数据分析和可视化。
在有限元分析中,MATLAB的强大功能和直观的语法使其成为一个理想的选择。
在本文中,我们将讨论MATLAB中有限元三单元的编程方法和实践。
有限元分析是一种数值方法,用于解决连续介质的力学问题。
它将一个复杂的结构分解成更简单的有限元单元,然后通过求解线性代数方程组来得到结构的应力和位移解。
在有限元分析中,三角形和四边形单元是最常用的有限元单元之一。
本文将重点讨论三角形单元的编程实现。
首先,我们需要定义一个三角形单元的几何信息。
在三角形单元中,我们有三个顶点,每个顶点有两个坐标。
我们可以使用一个3x2的矩阵来表示这些坐标。
例如,定义三角形ABC的顶点坐标矩阵为P:P = [x_A, y_A;x_B, y_B;x_C, y_C];接下来,我们需要定义三角形单元的连接性信息。
在MATLAB中,我们可以使用一个3x1的向量来表示三个顶点的连接性。
例如,定义三角形ABC的连接性向量为E:E = [1;2;3];然后,我们可以定义三角形单元材料属性和载荷信息。
这些信息包括杨氏模量、泊松比和外力向量。
我们可以将这些信息存储在一个结构体中,例如:properties.E = 210e9; % 杨氏模量properties.v = 0.3; % 泊松比properties.f = [0; -1000; 0]; % 外力向量接下来,我们可以使用这些信息来计算三角形单元的刚度矩阵和力向量。
刚度矩阵是一个3x3的矩阵,力向量是一个3x1的向量。
我们可以使用以下公式来计算它们:K = (E/(1-v^2)) * [1 v 0;v 1 0;0 0 (1-v)/2] * A;f = (A/3) * [1; 1; 1] * properties.f;其中,A是三角形的面积。
我们可以使用以下公式来计算它:A = abs(det([1, 1, 1;x_A, x_B, x_C;y_A, y_B, y_C])) / 2;最后,我们可以使用这些信息来求解三角形单元的位移解。
matlab有限元三角形单元编程

matlab有限元三角形单元编程
在MATLAB中进行有限元分析,可以使用其自带的有限元分析工具箱(FEATool)进行编程。
以下是一个简单的例子,演示如何使用三角形单元进行有限元分析:
1. 打开MATLAB,进入FEATool环境。
2. 创建新的有限元模型。
选择“Model”菜单下的“New Model”选项,进入“Model Builder”界面。
3. 在“Model Builder”界面中,选择“2D Triangle”单元类型,并在绘图区域中绘制出三角形网格。
4. 在“Model Builder”界面中,设置材料属性、边界条件和载荷等参数。
5. 运行有限元分析。
选择“Model”菜单下的“Solve”选项,进行有限元求解。
6. 查看结果。
选择“Model”菜单下的“Results”选项,可以查看位移、应力、应变等结果。
以上是一个简单的例子,演示了如何使用三角形单元进行有限元分析。
在实际应用中,还需要根据具体问题进行详细的建模和计算。
matlab有限元三角形单元程序

matlab有限元三角形单元程序以下是一个简单的 MATLAB 有限元三角形单元程序的示例:```matlab% 定义模型参数E = 1000; % 弹性模量nu = 0.3; % 泊松比thickness = 1; % 板的厚度% 定义节点坐标nodes = [0, 0; 1, 0; 1, 1; 0, 1; 0.5, 0.5];% 定义单元连接关系connectivity = [1, 2, 5; 2, 3, 5; 3, 4, 5; 4, 1, 5];% 计算总节点数和总单元数numNodes = size(nodes, 1);numElements = size(connectivity, 1);% 初始化全局刚度矩阵和载荷向量K = zeros(numNodes);F = zeros(numNodes, 1);% 循环遍历每个单元for i = 1:numElements% 查找当前单元的节点编号nodesIndex = connectivity(i, :);% 根据节点编号从全局坐标矩阵中取出节点坐标coordinates = nodes(nodesIndex, :);% 计算当前单元的局部刚度矩阵localK = calculateLocalStiffness(E, nu, thickness, coordinates);% 组装局部刚度矩阵到全局刚度矩阵中K(nodesIndex, nodesIndex) = K(nodesIndex, nodesIndex) + localK;% 计算当前单元的局部载荷向量localF = calculateLocalLoad(thickness, coordinates);% 组装局部载荷向量到全局载荷向量中F(nodesIndex) = F(nodesIndex) + localF;end% 边界条件:节点1固定K(1, :) = 0;K(1, 1) = 1;F(1) = 0;% 解线性方程组U = K \ F;% 输出位移结果disp('节点位移:');disp(U);% 计算应力结果stress = calculateStress(E, nu, thickness, nodes, connectivity, U);% 输出应力结果disp('节点应力:');disp(stress);% 计算局部刚度矩阵的函数function localK = calculateLocalStiffness(E, nu, thickness, coordinates)% 计算单元的雅可比矩阵J = (1/2) * [coordinates(2,1)-coordinates(1,1), coordinates(3,1)-coordinates(1,1);coordinates(2,2)-coordinates(1,2), coordinates(3,2)-coordinates(1,2)];% 计算雅可比矩阵的逆矩阵invJ = inv(J);% 计算单元刚度矩阵B = invJ * [-1, 1, 0; -1, 0, 1];D = (E/(1-nu^2)) * [1, nu, 0; nu, 1, 0; 0, 0, (1-nu)/2]; localK = thickness * abs(det(J)) * (B' * D * B);end% 计算局部载荷向量的函数function localF = calculateLocalLoad(thickness, coordinates) localF = zeros(3, 1);midPoint = [sum(coordinates(:,1))/3,sum(coordinates(:,2))/3];localF(3) = thickness * 1 * det([coordinates(1,:); coordinates(2,:); midPoint]);end% 计算各节点应力的函数function stress = calculateStress(E, nu, thickness, nodes, connectivity, U)stress = zeros(size(nodes, 1), 3);for i = 1:size(connectivity, 1)nodesIndex = connectivity(i, :);coordinates = nodes(nodesIndex, :);Ke = calculateLocalStiffness(E, nu, thickness, coordinates);Ue = U(nodesIndex);stress(nodesIndex, :) = stress(nodesIndex, :) + (Ke * Ue)';endstress = stress / thickness;end```这个程序实现了一个简单的平面三角形单元有限元分析,包括定义节点坐标和单元连接关系、计算全局刚度矩阵和载荷向量、施加边界条件、解线性方程组、计算节点位移和应力等。
matlab 编写二位静电场有限元程序

matlab 编写二位静电场有限元程序《MATLAB编写二维静电场有限元程序》在工程领域中,静电场是一个非常重要的概念,它在电力系统、电子设备和传感器等领域都有着广泛的应用。
为了研究和分析静电场的分布情况,有限元方法是一种非常有效的数值计算方法。
本文将探讨如何使用MATLAB编写二维静电场有限元程序,以便更深入地理解这一主题。
一、准备工作在开始编写程序之前,首先需要了解静电场的基本原理和有限元方法的原理。
静电场是由电荷引起的,而有限元方法是一种数值计算方法,用于求解微分方程。
掌握这些理论知识对于编写静电场有限元程序至关重要。
二、程序基本框架1. 定义网格:将二维区域划分为多个小单元,在每个单元内进行计算。
2. 建立有限元方程:根据电场的基本方程和有限元方法,建立离散的数学方程。
3. 求解方程:使用MATLAB的求解器求解离散方程,得到电场分布。
4. 可视化结果:将计算得到的电场分布以图形的形式展现出来,便于分析和理解。
三、具体步骤1. 定义网格:首先需要定义二维区域的网格,在MATLAB中可以使用meshgrid函数来实现。
将区域划分为多个小单元,确定每个单元的节点和连接关系。
2. 建立有限元方程:根据电场的基本方程和有限元方法的原理,建立离散的数学方程。
在二维静电场问题中,通常使用拉普拉斯方程来描述电场分布。
将区域内的拉普拉斯方程离散化,得到线性方程组。
3. 求解方程:利用MATLAB中的矩阵运算和求解器,求解离散化得到的线性方程组,得到每个单元的电场分布。
4. 可视化结果:将计算得到的电场分布以图形的形式展现出来。
可以使用MATLAB的plot函数将电场的大小和方向以矢量图的形式展现出来,也可以使用contour函数将电场的等势线展现出来。
四、个人观点和理解通过编写二维静电场有限元程序,我进一步加深了对静电场和有限元方法的理解。
我也发现了MATLAB强大的数值计算和可视化功能,能够很好地帮助工程师和科研人员进行静电场分析和研究。
matlab有限元切线刚度矩阵编程

题目:使用MATLAB编程实现有限元切线刚度矩阵计算一、引言有限元法是一种用于求解复杂工程问题的数值分析方法,它将连续介质划分为许多小的单元,通过对每个单元进行离散化处理,再用数学方法对这些单元进行组装,最终得到整个结构的解。
在有限元方法中,刚度矩阵是求解结构问题的关键步骤之一,而有限元切线刚度矩阵的计算则是其中的重要内容之一。
本文将介绍如何使用MATLAB编程实现有限元切线刚度矩阵的计算。
二、有限元切线刚度矩阵的基本概念1. 切线刚度矩阵在有限元方法中,切线刚度矩阵是描述结构对外部载荷作用下的应变-应力关系的重要矩阵。
它描述了结构在外部载荷下的变形行为,是求解结构变形和应力的重要工具。
2. 切线刚度矩阵的计算切线刚度矩阵的计算是通过对单元的局部坐标系进行刚度矩阵的求解,并进行坐标变换得到全局坐标系下的切线刚度矩阵。
在实际计算中,需要考虑单元的几何形状、材料性质等因素,以及在单元上施加的外部载荷。
三、MATLAB编程实现有限元切线刚度矩阵的基本步骤1. 单元刚度矩阵的计算我们需要编写MATLAB函数来实现对单元刚度矩阵的计算。
这个函数需要考虑单元的几何形状、材料性质等因素,以及在单元上施加的外部载荷。
通常情况下,我们可以利用数值积分的方法来进行刚度矩阵的计算。
2. 坐标变换矩阵的计算在得到单元刚度矩阵之后,我们需要计算坐标变换矩阵,将单元刚度矩阵从局部坐标系变换到全局坐标系。
这也需要编写一个MATLAB函数来实现坐标变换矩阵的计算。
3. 矩阵组装我们需要将所有单元的切线刚度矩阵组装成整体刚度矩阵。
这通常需要考虑到单元之间的连接关系,以及边界条件等因素。
在MATLAB中,我们可以利用矩阵的组合和相加等运算来实现整体刚度矩阵的计算。
四、编程实例这里我们以一个简单的弹簧-弹簧系统为例,介绍如何使用MATLAB编程实现有限元切线刚度矩阵的计算。
我们需要定义系统的几何形状、材料性质等参数,然后编写MATLAB函数来进行刚度矩阵的计算,坐标变换矩阵的计算,以及矩阵的组装,最终得到整体刚度矩阵,并求解系统的变形和应力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
加下划线的为单元编号
完整ppt
5
形成等效荷载列阵
f=[0;0;0;a;0;0;0;a;0;0;0;a;0;0;0;a;0;0;0;a];%每个节点两个自由度,a 为之前输入的节点力
集成总刚:
获取单元两端节点坐标
xi = Node( Element( ie, 1 ), 1 ) ;%ie为单元号,以下相同 yi = Node( Element( ie, 1 ), 2 ) ; xj = Node( Element( ie, 2 ), 1 ) ; yj = Node( Element( ie, 2 ), 2 ) ;
K(2*i-1,2*i)=K(2*i-1,2*i)+k(3,4);
K(2*i,2*i-1)=K(2*i,2*i-1)+k(4,3);
K(2*i,2*i)=K(2*i,2*i)+k(4,4);
end
end
end
完整ppt
9
求解位移:
u=zeros(20);
根据约束情况修改总刚,采用对角元素置1法
for i=1:1:20
for i=1:1:10 %按节点的顺序循环
for j=1:1:21 %对于每个节点,再按单元的顺序循环
k=PlaneTrussElementStiffness(j);
if Element(j,1)==I %如果i节点为j单元的首节点
K(2*i-1,2*i-1)=K(2*i-1,2*i-1)+k(1,1);
sc 00 0 0 c -s 0 0 s c ];
计算单元刚度矩阵k
k = [ E*A/L 0 -E*A/L
0
0
0
0
0
-E*A/L 0 E*A/L
0
0
0
0
0];
T = TransformMatrix( ie ) ;
k = T*k*transpose(T) ;% transp完o整spept(T) 为T的转置矩阵2
K(2*m-1,2*n-1)=k(3,1);
K(2*m,2*n-1)=k(2,3);
K(2*m-1,2*n)=k(3,2);
K(2*m,2*n)=k(2,4);
K(2*m,2*n-1)=k(4,1);
K(2*m,2*n)=k(4,2);
完整ppt end
8
集成总刚的对角线元素(这里的元素指2*2的小矩阵)
有限元编程示例
完整ppt
1
例一:桁架
题目描述:
如下图所示的平面桁架,杆件长度、弹性模量、截 面积以及所受节点力P的大小可以自行定义。求节 点位移及杆件轴力。
完整ppt
2
解题思路:
• 建立模型 • 集成总刚 • 求解位移 • 求解杆件轴力 • 输出结果
完整ppt
3
建立模型:
模型相关参数输入
H=input('竖杆长度(m):'); L=input('水平杆长度(m):'); E=input('杆件弹性模量(Gpa):'); A=input('杆件截面积(m^2):'); a=input('节点力P(kN):');
7
集成整体刚度矩阵K
K=zeros(20,20);%用来存储整体刚集成总刚的非对角线元素(这里的元素指2*2的小矩阵)
for ie=1:1:21 %按单元顺序进行循环
k=PlaneTrussElementStiffness(ie); %计算第ie个单元的单刚
计算杆件长度
L = ( (xj-xi)^2 + (yj-yi)^2 )^(1/2) ;
完整ppt
6
计算从局部坐标到整体坐标的坐标转换矩阵T
function T = TransformMatrix( ie )%ie为单元号
c = (xj-xi)/L ; s = (yj-yi)/L ; T=[ c -s 0 0
f=f*1e15;
u=K\f;
完整ppt
10
求解轴力:
获取单元两端的节点号
i = Element( ie, 1 ) ;%ie为单元号 j = Element( ie, 2 ) ;
获取单元两端的节点位移
uElement = zeros( 4, 1 ) ;
uElement( 1:2 ) = u( (i-1)*2+1:(i-1)*2+2 ) ;
m=Element(ie,1); %ie单元的首节点号
n=Element(ie,2); %ie单元的末节点号 m=Element(ie,2); %ie单元的末节点号
K(2*m-1,2*n-1)=k(1,3);
n=Element(ie,1); %ie单元的首节点号
K(2*m-1,2*n)=k(1,4);
Element=zeros(21,2); for i=1:2:7
Element(5/2*i-3/2,:)=[i,i+1]; Element(5/2*i-1/2,:)=[i,i+2]; Element(5/2*i+1/2,:)=[i,i+3]; end for i=2:2:8 Element(5*i/2-1,:)=[i,i+1]; Element(5*i/2,:)=[i,i+2]; end Element(21,:)=[9,10];
uElement( 3:4 ) = u( (j-1)*2+1:(j-1)*2+2 ) ;
K(1,i)=0; K(2,i)=0; K(18,i)=0;
K(i,1)=0;K(i,2)=0; K(i,18)=0;
end %自由度1、2、18被约束了,所在的行和列的其他元素都改为0
K(1,1)=1;%对角线元素置1
K(2,2)=1; K(18,18)=1;
求解
K=K*1e15;%乘以一个大数,减小计算误差
K(2*i-1,2*i)=K(2*i-1,2*i)+k(1,2);
K(2*i,2*i-1)=K(2*i,2*i-1)+k(2,1);
K(2*i,2*i)=K(2*i,2*i)+k(2,2);
end
if Element(j,2)==i %如果i节点为j单元的末节点
K(2*i-1,2*i-1)=K(2*i-1,2*i-1)+k(3,3);
定义节点坐标
Node = zeros(10,2) ;
x=-1*L; %L为横杆长度
for i=1:2:10
x=x+L;
Node(i,:)=[x 0];
end x=-1*L;
节点编号方式
for i=2:2:10
x=x+L;
Node(i,:)=[x H];%H为竖杆长度
end
完整ppt
4
定义单元,即储存单元两端的节点号