MATLAB中如何给一个已经定义好的单元阵列添加多一列数据

MATLAB中如何给一个已经定义好的单元阵列添加多一列数据,第1张

以下代码可以用于处理任意n个数据,并存到任意指定的r行c列矩阵中 (前提:rc=n)

clc

clear all

close all

n = 8;

x = randi(10, 1, n); % 随机生成n个数 (仅为举例,自行修改)

disp('x:');

disp(x);

r = 2; % 行数

c = n/r; % 列数

m = zeros(r,c); % 定义矩阵

for i=1:r % 行号

for j=1:c % 列号

m(i,j) = x((i-1)c+j);

end

end

disp('m:');

disp(m);

不能只看外形,因为MATLAB有矩阵,也有数组,二者外形一样,但运算截然不同。所以应该根据运算来看是矩阵还是数组。

二者的差别主要在乘、左除、右除、次幂上,矩阵运算符分别是,\,/,^,数组运算符分别是:,\,/,^。左边都有个小圆点。

二者运算不同,矩阵运算是按数学上的矩阵算法。矩阵是一个整体。数组主要在元素间进行运算。例如:a=[1 2 3];a^2=[1 4 9],而a^2却无法计算,因为矩阵乘法运算,要求前一矩阵的列数必须等于后一矩阵的行数,才能进行运算。

用matlab怎样搭建光伏阵列模型

Text Style:这一选择项中用户可以定义文字的字体、高度、厚度、宽度因子等常规项目。在下半部分的Note/Dimension区域定义文字在表格中的存在形式,本例中选择了文字在表格内的水平、垂直方向均为居中方式,如图所示的编辑文本样式。另外还有一些选项,读者可以自己尝试改变一下,如文字的角度、颜色等。

在Pro/ENGINEER软件系统中,有许多变量是可以由软件自动判别的,常用的有以下几种。

Ø &model_name,系统参数,表示该工程图所使用的三维模型名称,可以是零件或装配,一般在机械设计中模型名称以零件的图号命名;

matlab编程语言是:C++语言。

Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。

MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。

使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。

MATLAB程序接口:

新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。

允许用户编写可以和MATLAB进行交互的C或C++语言程序。另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。

你提出的问题我之前刚好做过,使用有限元方法来进行桁架结构分析。

Matlab编程实现平面杆单元分析

首先,明确Matlab程序要实现的5个重要模块分别为:单元刚度矩阵的求解、单元组装、节点位移的求解、单元应力的求解、节点力的求解。下面给出这5个模块的实现。

1. 单元刚度矩阵求解

定义函数Bar2D2Node_Stiffness,该函数计算单元的刚度矩阵,输入d性模量E,横截面积A,两个节点坐标输出单元刚度矩阵k(4X4)。具体代码如下:

function k=Bar2D2Node_Stiffness(E,A,x1,y1,x2,y2)

L=sqrt((x2-x1)(x2-x1)+(y2-y1)(y2-y1));

x=acos((x2-x1)/L);

C=cos(x);

S=sin(x);

k=EA/L[CC CS -CC -CS; CS SS -CS -SS;

-CC -CS CC CS; -CS -SS CS SS];

2. 单元组装

定义函数Bar2D2Node_Assembly,该函数进行单元刚度矩阵的组装,输入单元刚度矩阵k,单元的节点编号i、j。输出整体刚度矩阵KK,具体代码如下:

function z = Bar2D2Node_Assembly(KK,k,i,j)

DOF(1)=2i-1;

DOF(2)=2i;

DOF(3)=2j-1;

DOF(4)=2j;

for n1=1:4

for n2=1:4

KK(DOF(n1),DOF(n2))= KK(DOF(n1),DOF(n2))+k(n1,n2);

end

end

z=KK;

3. 节点位移的求解

定义函数Bar2D2Node_Disp(KK,num,p),该函数输入KK为总体刚度矩阵;num为活动自由度编号数组;p为活动自由度方向上的节点力;输出节点位移列阵。具体代码如下:

function u = Bar2D2Node_Disp(KK,num,p)

k=KK(num,num)

u=k\p

4. 单元应力的求解

定义函数函数Bar2D2Node_Stress(E,x1,y1,x2,y2,u),该函数计算单元的应力输入d性模量E,第一个节点坐标(x1,y1),第二个节点坐标(x2,y2)单元节点位移矢量u,返回单元应力标量stress 。具体代码如下:

L=sqrt((x2-x1)(x2-x1)+(y2-y1)(y2-y1));

x=acos((x2-x1)/L);

C=cos(x);

S=sin(x);

stress=E/L[-C -S C S]u;

5. 计算节点力

定义函数Bar2D2Node_Forces(KK,q),该函数用于计算节点力,KK为刚度矩阵,q为节点位移阵列

function P= Bar2D2Node_Forces(KK,q)

q=zeros(8,1);

q(num)=u;

P=KKq;

至此,基于Matlab的杆单元有限元分析的程序设计已经完成,遇到实际问题时可以直接调用这些函数就可以解决问。

经典算例

如图所示的结构,各个杆的d性模量和横截面积都为 ,  。试基于MATLAB平台求解该结构的节点位移、单元应力以及支反力。

四杆桁架结构

解答:对该问题进行有限元分析的过程如下

(1) 结构的离散化与编号

对该结构进行自然离散,节点编号和单元编号如上图所示

(2)计算各单元的刚度矩阵(基于国际标准单位)

输入d性模量E、横截面积A,各点坐标。然后分别针对单元1,2,3和4,调用4次Bar2D2Node_Stiffness,就可以得到单元的刚度矩阵。

对应的主程序中代码:

E=295e11;A=00001;x1=0;y1=0;x2=04;y2=0;x3=04;y3=03;x4=0;y4=03;

k1=Bar2D2Node_Stiffness (E,A,x1,y1,x2,y2)

k2=Bar2D2Node_Stiffness (E,A,x2,y2,x3,y3)

k3=Bar2D2Node_Stiffness (E,A,x1,y1,x3,y3)

k4=Bar2D2Node_Stiffness (E,A,x4,y4,x3,y3)

(3) 建立整体刚度方程

由于该结构共有4个节点,因此,设置结构总的刚度矩阵为KK(8×8),先对KK清零,然后四次调用函数Bar2D2Node _Assembly进行刚度矩阵的组装。相关主程序代码为:

KK=zeros(8,8);

KK=Bar2D2Node_Assembly (KK,k1,1,2);

KK=Bar2D2Node_Assembly (KK,k2,2,3);

KK=Bar2D2Node_Assembly (KK,k3,1,3);

KK=Bar2D2Node_Assembly (KK,k4,4,3)

(4)边界条件的处理及刚度方程的求解

由图可以看出,被约束的自由度有:节点1的x,y方向自由度,节点2的y方向自由度,4节点的x、y方向两个自由度。则活动自由度编号为3,5,6活动自由度对应的节点载荷F3=20000N,F5=0N,F6=25000N,采用高斯消去法进行求解,对应的代码为:

num=[3,5,6];%可活动的自由度编号

p=[20000;0;-25000];

u=Bar2D2Node_Disp(KK,num,p)

(5)支反力的计算

在得到整个结构的节点位移后,由原整体刚度方程就可以计算出对应的支反力。这部分对应的主程序的代码如下:

q=zeros(8,1);

q(num)=u;%节点位移阵列

P=Bar2D2Node_Forces(KK,q)

(6)单元应力的计算

先从整体位移列阵q中提取出单元的位移列阵,然后,调用计算单元应力的函数Bar2D2Node_ElementStress,就可以得到各个单元的应力分量。

u1=[q(1);q(2);q(3);q(4)]

stress1=Bar2D2Node_Stress(E,x1,y1,x2,y2,u1)

u2=[q(3);q(4);q(5);q(6)]

stress2=Bar2D2Node_Stress(E,x2,y2,x3,y3,u2)

u3=[q(1);q(2);q(5);q(6)]

stress3=Bar2D2Node_Stress(E,x1,y1,x3,y3,u3)

u4=[q(7);q(8);q(5);q(6)]

stress4=Bar2D2Node_Stress(E,x4,y4,x3,y3,u4)

(7)计算结果的整理

通过主程序的运行得计算结果。

主程序

%计算各单元的刚度矩阵(以国际标准单位)

E=295e11;

A=00001;

x1=0;

y1=0;

x2=04;

y2=0;

x3=04;

y3=03;

x4=0;

y4=03;

k1=Bar2D2Node_Stiffness (E,A,x1,y1,x2,y2)

k2=Bar2D2Node_Stiffness (E,A,x2,y2,x3,y3)

k3=Bar2D2Node_Stiffness (E,A,x1,y1,x3,y3)

k4=Bar2D2Node_Stiffness (E,A,x4,y4,x3,y3)

%建立整体刚度方程

%由于该结构共有4个节点,因此,结构总的刚度矩阵为KK(8×8),先对K清零,然后四次调用函数Bar2D2Node _Assembly进行刚度矩阵的组装。

KK=zeros(8,8);

KK=Bar2D2Node_Assembly (KK,k1,1,2);

KK=Bar2D2Node_Assembly (KK,k2,2,3);

KK=Bar2D2Node_Assembly (KK,k3,1,3);

KK=Bar2D2Node_Assembly (KK,k4,4,3)

%边界条件的处理及刚度方程求解

num=[3,5,6];%可活动的自由度编号

p=[20000;0;-25000];

u=Bar2D2Node_Disp(KK,num,p)

%支反力的计算

q=zeros(8,1);

q(num)=u;%节点位移阵列

P=Bar2D2Node_Forces(KK,q)

%各单元的应力计算

u1=[q(1);q(2);q(3);q(4)];

stress1=Bar2D2Node_Stress(E,x1,y1,x2,y2,u1)

u2=[q(3);q(4);q(5);q(6)];

stress2=Bar2D2Node_Stress(E,x2,y2,x3,y3,u2)

u3=[q(1);q(2);q(5);q(6)];

stress3=Bar2D2Node_Stress(E,x1,y1,x3,y3,u3)

u4=[q(7);q(8);q(5);q(6)];

stress4=Bar2D2Node_Stress(E,x4,y4,x3,y3,u4)

说的可能有些罗嗦,注意其中有5个function,和最后一个主程序,计算的时候直接运行主程序就可以了。希望能帮助到你。

以上就是关于MATLAB中如何给一个已经定义好的单元阵列添加多一列数据全部的内容,包括:MATLAB中如何给一个已经定义好的单元阵列添加多一列数据、matlab里的阵列是什么东西啊是不是矩阵、用matlab怎样搭建光伏阵列模型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9578275.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存