传递矩阵-matlab程序
传递矩阵法matlab程序
传递矩阵法matlab程序传递矩阵法是一种在数值计算中常用的方法,特别适用于处理大规模的线性方程组。
在Matlab中,我们可以利用矩阵运算的特性,通过编写一段简洁的程序来实现矩阵的传递。
矩阵传递的基本思想是将多个矩阵的运算结果传递给下一个矩阵,从而实现复杂的运算。
在Matlab中,我们可以利用矩阵乘法的特性,将矩阵的运算结果保存在一个中间变量中,并将该中间变量传递给下一个矩阵进行运算。
我们需要定义需要进行运算的矩阵。
在Matlab中,可以通过直接赋值或者从文件中读取的方式来定义矩阵。
例如,我们可以使用以下代码定义一个3x3的矩阵A:A = [1, 2, 3; 4, 5, 6; 7, 8, 9];接下来,我们可以定义一个中间变量B,并将矩阵A传递给B:B = A;这样,矩阵A的运算结果就被传递给了矩阵B。
我们可以通过对矩阵B进行进一步的运算,实现复杂的计算。
例如,我们可以定义一个矩阵C,并将矩阵B传递给C进行运算:C = B * B';在这个例子中,矩阵B的转置与矩阵B相乘的结果被传递给了矩阵C。
通过这样的传递,我们可以实现复杂的矩阵运算。
除了简单的矩阵乘法外,矩阵传递法还可以应用于其他形式的矩阵运算,例如矩阵的加法、减法、乘法等。
通过灵活地利用矩阵传递法,我们可以简化程序的编写过程,提高效率。
在编写矩阵传递法的程序时,我们应注意以下几点:1. 矩阵的维度要匹配。
在进行矩阵传递前,需要确保传递的矩阵维度是相同的,否则会导致运算错误。
2. 矩阵的类型要一致。
在进行矩阵传递时,需要确保传递的矩阵类型是一致的,例如都是实数矩阵或都是复数矩阵,否则会导致运算结果不正确。
3. 矩阵的运算顺序要正确。
在进行矩阵传递时,需要确保传递的顺序是正确的,例如先进行矩阵A的运算,再将结果传递给矩阵B进行运算,否则会导致运算结果不正确。
通过以上几点的注意,我们可以编写出一个高效、准确的矩阵传递法程序。
在实际应用中,矩阵传递法可以广泛应用于科学计算、工程建模等领域,帮助我们快速、准确地求解复杂的数值问题。
传递矩阵法matlab程序
传递矩阵法matlab程序传递矩阵法是一种在MATLAB中进行矩阵运算和矩阵传递的有效方法。
在本文中,我将介绍传递矩阵法的原理和在MATLAB中的具体实现。
传递矩阵法是一种通过矩阵传递信息的方法,它可以用于解决一些复杂的问题,例如网络流、图论等。
在传递矩阵法中,我们将问题转化为矩阵运算的形式,通过对矩阵进行操作和传递,达到求解问题的目的。
在MATLAB中,我们可以使用矩阵运算和矩阵操作函数来实现传递矩阵法。
首先,我们需要定义问题的初始矩阵。
这个矩阵可以是问题的描述、条件或者初始状态。
然后,我们根据问题的要求,通过矩阵运算和矩阵操作函数来对初始矩阵进行操作和传递。
最后,我们可以得到问题的解或者结果。
在传递矩阵法中,矩阵的元素通常代表问题中的某种状态或者信息。
通过对矩阵进行运算和操作,我们可以传递信息并改变矩阵的状态。
例如,在网络流问题中,矩阵的元素可以表示节点之间的连接关系或者流量。
通过对矩阵进行运算,我们可以传递流量,计算最大流量或者最小割。
在MATLAB中,我们可以使用矩阵乘法、矩阵加法、矩阵转置等运算来操作矩阵。
此外,MATLAB还提供了一些专门用于矩阵操作的函数,例如矩阵求逆、矩阵特征值分解等。
通过这些运算和函数,我们可以对矩阵进行传递和操作,实现传递矩阵法。
下面,我将通过一个简单的例子来演示传递矩阵法在MATLAB中的应用。
假设我们有一个由节点和边组成的图,我们希望计算出图中任意两个节点之间的最短路径。
我们可以使用一个邻接矩阵来表示图中节点之间的连接关系。
邻接矩阵的元素可以是0或者1,分别表示两个节点之间是否有边连接。
接下来,我们可以通过矩阵乘法来计算出任意两个节点之间的距离。
在MATLAB中,我们可以使用函数graph和函数shortestpath来实现这个过程。
首先,我们可以使用函数graph来创建一个图对象,将邻接矩阵作为输入。
然后,我们可以使用函数shortestpath来计算任意两个节点之间的最短路径。
MATLAB矩阵操作教程
MATLAB矩阵操作教程第一章:MATLAB中的矩阵介绍1.1 什么是矩阵矩阵是由数个行和列组成的矩形数组,可以用于表示数据和进行数值计算。
1.2 创建矩阵在MATLAB中,可以使用矩阵生成算符进行矩阵的创建,如使用方括号,分号和逗号分隔元素。
1.3 矩阵索引MATLAB中的矩阵索引从1开始,可以使用括号和索引访问矩阵中的元素。
1.4 矩阵运算MATLAB提供了丰富的矩阵运算函数,如加法、减法、乘法、除法等,可用于执行矩阵操作。
第二章:MATLAB矩阵的基本操作2.1 矩阵转置可以使用单引号将矩阵转置,即将矩阵的行变为列,列变为行。
使用方括号和逗号将矩阵进行水平或垂直合并。
2.3 矩阵切片可以使用冒号运算符和索引,对矩阵进行切片操作,提取出所需的子矩阵。
2.4 矩阵重塑使用reshape函数可以改变矩阵的形状,重新组织矩阵元素的排列顺序。
2.5 矩阵求逆使用inv函数求矩阵的逆矩阵,如果矩阵不可逆,则会报错。
第三章:MATLAB矩阵的高级操作3.1 特征值与特征向量使用eig函数可以计算矩阵的特征值和特征向量,以进行其他相关计算。
3.2 矩阵分解MATLAB中提供了多种矩阵分解函数,如LU分解、QR 分解、奇异值分解等,可用于求解线性方程组、矩阵逆等问题。
使用左除运算符(\)和右除运算符(/)可以求解形如AX=B的线性方程组。
3.4 矩阵迭代可以使用循环结构和条件判断,在MATLAB中实现矩阵的迭代计算。
第四章:MATLAB中的矩阵应用4.1 数据处理与分析使用MATLAB可以进行各种数据处理和分析,如平均值计算、数据拟合、统计分析等。
4.2 信号处理利用MATLAB中的矩阵操作函数,可以进行信号滤波、频谱分析、波形生成等信号处理操作。
4.3 图像处理MATLAB中的矩阵操作函数可用于图像的载入、处理、显示和保存,如图像滤波、边缘检测、图像分割等。
4.4 机器学习利用MATLAB中的矩阵操作与机器学习算法相结合,可以进行分类、回归、聚类等机器学习任务。
matlab传递函数求系数矩阵 -回复
matlab传递函数求系数矩阵-回复在MATLAB中,可以通过传递函数来求解系数矩阵。
传递函数是一种特殊的数学表达式,它描述了输入和输出之间的关系。
在控制系统设计和信号处理中非常常见。
在本文中,我们将一步一步地了解如何在MATLAB 中传递函数来求解系数矩阵。
第一步是定义传递函数。
传递函数通常用H(s)表示,其中s表示复变量。
传递函数描述了输入信号与输出信号之间的关系。
在MATLAB中,可以使用tf函数来定义传递函数。
tf函数的语法如下:sys = tf(num, den)其中,num和den是两个向量,分别表示传递函数的分子和分母。
例如,如果传递函数为H(s) = (s+1)/(s^2+2s+3),那么可以这样定义传递函数:num = [1 1];den = [1 2 3];sys = tf(num, den);在上面的例子中,num的分子系数为[1 1],den的分母系数为[1 2 3]。
第二步是求解系数矩阵。
在MATLAB中,可以使用coeffs函数来求解传递函数的系数矩阵。
系数矩阵包含了传递函数的系数。
coeffs函数的语法如下:c = coeffs(sys)其中,sys是之前定义的传递函数。
C是一个向量,它包含了传递函数的系数。
例如,对于上面定义的传递函数,可以这样求解系数矩阵:c = coeffs(sys);在上面的例子中,c将包含传递函数H(s) = (s+1)/(s^2+2s+3)的系数。
第三步是输出系数矩阵。
可以使用disp函数来输出系数矩阵。
disp函数的语法如下:disp(c)这将以易读的形式输出系数矩阵。
例如,对于上面定义的传递函数,可以这样输出系数矩阵:disp(c);在上面的例子中,将以易读的形式输出系数矩阵。
第四步是将系数矩阵转换为分子和分母。
系数矩阵通常由分子和分母的系数组成。
在MATLAB中,可以使用roots函数将系数矩阵转换为分子和分母。
roots函数的语法如下:[num, den] = tfdata(sys)其中,sys是之前定义的传递函数。
matlab谐振腔G参数、传输矩阵和稳区图
一、作业一1.1题目1.2程序:%% 传播矩阵mMclcsyms L d1 f R2 R1m=[1 d1;0 1]*[1 0;-1/f 1]*[1 L-d1;0 1];a=m(1,1)b=m(1,2)c=m(2,1)d=m(2,2)g1=a-b/R1G1=simplify(g1)g2=d-b/R2G2=simplify(g2)M0=[a b;c d]*[1 0;-2/R2 1]*[d b;c a]*[1 0;-2/R1 1]; M=simplify(M0)A=M(1,1)B=M(1,2)C=M(2,1)D=M(2,2)1.3运行结果:1.1.1单程传输矩阵:a =1 - d1/fb =d1 - (L - d1)*(d1/f - 1)c =-1/fd =1 - (L - d1)/f2.1.1G参数:G1 =1 - (d1 - (L - d1)*(d1/f - 1))/R1 - d1/fG2 =1 - (L - d1)/f - (d1 - (L - d1)*(d1/f - 1))/R23.1.1往返传输矩阵:A = (4*(d1^2 - L*d1 + L*f)*(L*f - L*d1 + R2*d1 - R2*f + d1^2))/(R1*R2*f^2) - ((d1 - L + f)*(2*L*f - 2*L*d1 + R2*d1 - R2*f + 2*d1^2))/(R2*f^2) - (d1^2 - L*d1 + L*f)/f^2B = -(2*(d1^2 - L*d1 + L*f)*(L*f - L*d1 + R2*d1 - R2*f + d1^2))/(R2*f^2)C =((d1 - f)*(R2 - ((L - d1)/f - 1)/f - (2*((d1/f - 1)*((L - d1)/f - 1) + (d1 - (L - d1)*(d1/f -1))*((2*((L - d1)/f - 1))/R2 - 1/f)))/R1 - ((2*((L - d1)/f - 1))/R2 - 1/f)*((L - d1)/f - 1)D = - ((d1 - f)*(d1 - L + f))/f^2 - ((d1^2 - L*d1 + L*f)*(R2 - 2*L + 2*d1 + 2*f))/(R2*f^2)1.4稳区图程序:%% 稳区图%其他数据都采用第二问的数据% 画f变化时G1G2的关系图f=200:1000;G1=1/8-150./f;G2=-1/6-200./f;plot(G1,G2,'r')ylim([-2 2])xlim([-1 1])xlabel('G1');ylabel('G2');hold on%gig2=1的两条双曲线x1=-2:0.1:2;plot(x1,1./x1,'b')grid onhold online([0 0],[-2 2]);line([-1 1],[0 0]);运行结果:蓝色线为G1G2=1的稳定区域边界线,蓝色线与坐标轴围成区域内为稳区;红色线为GIG2随f变化线。
matlab设计状态反馈矩阵运行步骤
matlab设计状态反馈矩阵运行步骤步骤1:定义系统模型我们需要定义系统的状态空间模型。
状态空间模型由系统的状态方程和输出方程组成。
我们可以使用matlab中的tf函数或ss函数来创建系统模型。
例如,如果我们有一个传递函数为G(s)的系统模型,我们可以使用tf函数将其转换为状态空间模型:```G = tf([1],[1 2 1]);sys = ss(G);```在这个例子中,我们创建了一个传递函数为1/(s^2 + 2s + 1)的系统模型,并将其转换为状态空间模型。
步骤2:选择反馈增益矩阵接下来,我们需要选择反馈增益矩阵K。
反馈增益矩阵的选择决定了状态反馈的效果。
一般来说,我们可以使用极点配置方法来选择反馈增益矩阵。
极点配置方法可以使系统的极点移动到我们期望的位置,从而改变系统的响应特性。
在matlab中,我们可以使用place函数来进行极点配置。
place函数需要输入系统模型、期望的极点位置和对应的增益矩阵,然后返回一个满足极点配置要求的反馈增益矩阵。
例如,如果我们希望系统的极点位于-1和-2处,我们可以使用以下代码选择反馈增益矩阵:```desired_poles = [-1 -2];K = place(sys.A, sys.B, desired_poles);```在这个例子中,我们将系统模型的A矩阵和B矩阵作为输入,以及期望的极点位置,然后使用place函数计算反馈增益矩阵K。
步骤3:计算闭环系统的状态空间模型有了反馈增益矩阵K之后,我们可以计算闭环系统的状态空间模型。
闭环系统的状态空间模型由系统的A矩阵、B矩阵、C矩阵和D矩阵组成。
我们可以使用matlab中的feedback函数来计算闭环系统的状态空间模型。
feedback函数需要输入系统模型、反馈增益矩阵和反馈信号的位置,然后返回闭环系统的状态空间模型。
例如,如果我们希望将反馈信号加到系统的输入端,我们可以使用以下代码计算闭环系统的状态空间模型:```feedback_sys = feedback(sys, K, 1);```在这个例子中,我们将系统模型、反馈增益矩阵和反馈信号的位置作为输入,然后使用feedback函数计算闭环系统的状态空间模型。
传递矩阵法matlab程序
传递矩阵法matlab程序传递矩阵法是一种用于计算机程序中传递和操作矩阵的方法,在Matlab中,它被广泛应用于矩阵运算和数据处理等领域。
本文将介绍传递矩阵法的原理和在Matlab中的具体实现。
传递矩阵法是一种通过矩阵传递来操作数据的方法。
它的基本原理是将需要进行操作的数据存储在矩阵中,然后通过矩阵的传递,实现对数据的处理和计算。
这种方法的优势在于可以利用矩阵的高效运算能力,简化程序的编写和调试过程。
在Matlab中,可以使用矩阵操作函数来实现传递矩阵法。
例如,可以使用矩阵的乘法运算来实现矩阵的传递。
假设我们有两个矩阵A 和B,我们希望将矩阵A的数据传递给矩阵B,可以使用如下的Matlab代码实现:```B = A;```这样,矩阵B就完全复制了矩阵A的数据。
通过这种方式,我们可以在程序中传递矩阵,进行各种操作和计算。
除了简单的传递,传递矩阵法还可以实现更复杂的操作。
例如,可以通过传递矩阵进行矩阵的相加、相减、相乘等运算。
假设我们有两个矩阵A和B,我们希望将它们相加得到矩阵C,可以使用如下的Matlab代码实现:```C = A + B;```这样,矩阵C的每个元素都等于矩阵A和矩阵B对应元素的和。
通过传递矩阵法,我们可以很方便地实现这样的矩阵运算。
除了矩阵的运算,传递矩阵法还可以用于数据处理和分析。
例如,可以通过传递矩阵来实现数据的转置、截取、排序等操作。
假设我们有一个矩阵A,我们希望将它的每一列按照从大到小的顺序进行排序,可以使用如下的Matlab代码实现:```B = sort(A,'descend');```这样,矩阵B的每一列都按照从大到小的顺序进行了排序。
通过传递矩阵法,我们可以在Matlab中进行各种复杂的数据处理和分析。
传递矩阵法在Matlab中的应用非常广泛。
无论是矩阵运算、数据处理还是图像处理,都可以通过传递矩阵法来实现。
它不仅提高了程序的效率和可读性,还简化了程序的编写和调试过程。
MATLAB中的矩阵操作技巧
MATLAB中的矩阵操作技巧MATLAB(Matrix Laboratory)是一种强大的数值计算和科学分析软件,特别擅长处理矩阵操作。
本文将介绍一些在MATLAB中进行矩阵操作的技巧和方法,帮助读者更好地利用MATLAB进行数据处理和分析。
一、矩阵基本操作1. 创建矩阵:在MATLAB中,可以使用矩阵的行向量或列向量来创建一个矩阵。
例如,要创建一个3x3的矩阵A,可以使用以下命令:```MATLABA = [1 2 3; 4 5 6; 7 8 9];```这样就创建了一个包含1到9的3x3的矩阵A。
2. 矩阵转置:矩阵的转置可以使用单引号来实现,例如,要将矩阵A进行转置操作,可以使用以下命令:```MATLABA_transpose = A';```这样就得到了矩阵A的转置矩阵A_transpose。
3. 矩阵相加:两个相同大小的矩阵可以进行相加操作,即对应位置的元素相加。
例如,要计算两个3x3矩阵A和B的和,可以使用以下命令:```MATLABC = A + B;```这样就得到了矩阵C,它的每个元素都是对应位置的元素相加的结果。
4. 矩阵相乘:两个矩阵的相乘操作通常是指矩阵的乘法运算。
在MATLAB中,矩阵相乘可以使用*运算符来实现。
例如,要计算两个3x3矩阵A和B的乘积,可以使用以下命令:```MATLABD = A * B;```这样就得到了矩阵D,它的每个元素都是对应位置的元素相乘的结果。
二、矩阵求解和方程组1. 矩阵求逆:在MATLAB中,可以使用inv函数来求解矩阵的逆。
例如,要求解一个3x3的矩阵A的逆矩阵,可以使用以下命令:```MATLABA_inverse = inv(A);```如果矩阵A的逆存在,则得到了逆矩阵A_inverse。
2. 矩阵求解线性方程组:MATLAB提供了一个名为“左除”的操作符\,可以用来求解线性方程组。
例如,要求解线性方程组Ax = b,其中A是一个3x3的矩阵,b是一个3x1的列向量,可以使用以下命令:```MATLABx = A \ b;```这样就求解出了方程组的解x。
matlab 函数参数传入矩阵
matlab 函数参数传入矩阵在MATLAB中,可以将矩阵作为函数的参数进行传递。
矩阵可以作为输入参数传入函数,并在函数内部进行操作或处理。
以下是一个示例,展示了如何将矩阵作为函数的参数传递:```matlabfunction result = calculateAverage(matrix)[rows, cols] = size(matrix);result = sum(matrix, 'all') / (rows * cols);end```在上述例子中,定义了一个名为 `calculateAverage` 的函数,接受一个矩阵作为参数 `matrix`。
函数内部使用 `size` 函数获取矩阵的行数和列数,然后使用 `sum` 函数计算矩阵中所有元素的总和。
最后,通过除以矩阵的元素个数,计算出平均值,并将结果返回。
要调用这个函数并传递矩阵作为参数,可以编写以下代码:```matlabA = [1, 2, 3; 4, 5, 6; 7, 8, 9];average = calculateAverage(A);disp(average)```上述代码中,创建了一个名为`A` 的矩阵,并将其传递给`calculateAverage` 函数。
函数将计算矩阵 `A` 的平均值,并将结果存储在变量 `average` 中。
最后,使用 `disp` 函数将计算得到的平均值输出到命令窗口。
传递给函数的矩阵可以是任意大小和形状的,函数内部应该能够处理不同大小的矩阵。
同时,也可以在函数定义时使用 `varargin` 作为可变参数列表,以接受不定数量的矩阵参数。
简述matlab矩阵操作方法
简述matlab矩阵操作方法Matlab是一种强大的数学软件,它提供了许多方便的矩阵操作方法。
矩阵操作是Matlab中的一个基本概念,它可以用来表示和处理向量、矩阵以及高维数组。
在Matlab中,矩阵操作包括创建、索引、切片、运算、合并、转置等一系列操作。
首先,我们来介绍Matlab中的矩阵创建方法。
在Matlab中,可以使用包括zeros、ones、rand、eye和diag等函数来创建各种类型的矩阵。
其中,zeros函数用于创建全零矩阵,ones函数用于创建全1矩阵,rand函数用于创建随机矩阵,eye函数用于创建单位矩阵,diag函数用于创建对角矩阵。
此外,还可以使用矩阵括号、分号、空格等符号来手动创建矩阵。
例如,可以使用矩阵括号来创建矩阵,每一行用分号隔开。
例如,A = [1, 2, 3; 4, 5, 6; 7, 8, 9] 将创建一个3×3的矩阵,元素为1到9。
其次,我们来介绍Matlab中的矩阵索引与切片操作。
在Matlab中,可以使用圆括号和方括号来对矩阵进行索引和切片。
圆括号用于索引操作,方括号用于切片操作。
对于矩阵索引,可以使用单个索引值来获取矩阵中的某个元素,也可以使用两个索引值来获取矩阵中的某个区域。
例如,可以使用A(2,3)获取矩阵A中的第2行第3列的元素。
对于矩阵切片,可以使用一个冒号来表示整行或整列,也可以使用两个冒号来表示一个范围。
例如,可以使用A(:,2)获取矩阵A中的第2列的所有元素,可以使用A(1:2,:)获取矩阵A中的第1行和第2行的所有元素。
接下来,我们来介绍Matlab中的矩阵运算方法。
Matlab中的矩阵运算与数学运算十分相似,包括加、减、乘、除等运算。
对于矩阵加法和减法,可以使用加号和减号来实现。
例如,可以使用A + B来计算矩阵A和矩阵B的加法,可以使用A –B来计算矩阵A和矩阵B的减法。
对于矩阵乘法,可以使用乘号或者使用matmul函数来实现。
matlab根据传递函数矩阵求状态空间方程
MATLAB根据传递函数矩阵求状态空间方程在探讨MATLAB如何根据传递函数矩阵求状态空间方程之前,首先需要了解传递函数和状态空间方程的概念。
传递函数是描述线性时不变系统输入与输出之间关系的数学方法,通常用于描述信号处理、控制系统等领域中的系统行为。
而状态空间方程则是另一种描述系统动态行为的方法,它能够全面描述系统的状态随时间的变化。
在工程领域中,状态空间方程常常用于分析系统的稳定性、控制系统的设计等问题。
在MATLAB中,我们可以利用控制工具箱提供的函数来求解传递函数矩阵对应的状态空间方程。
我们需要用tf函数将传递函数表示为MATLAB中的传递函数对象,然后利用ss函数将传递函数对象转化为状态空间对象,从而得到对应的状态空间方程。
接下来,我们以一个具体的例子来演示MATLAB如何根据传递函数矩阵求状态空间方程。
假设有如下传递函数矩阵:\[ G(s) = \begin{bmatrix} \frac{2s+1}{s^2+3s+2} &\frac{3s+2}{s^2+s+1} \\ \frac{s+1}{s^2+2s+1} &\frac{4s+1}{s^2+4s+3} \end{bmatrix} \]我们希望利用MATLAB求解对应的状态空间方程。
我们可以利用tf函数将传递函数矩阵表示为MATLAB中的传递函数对象:```matlabnum = {[2 1; 3 2]; [1 1; 4 1]}; % 分子矩阵den = {[1 3 2; 1 1 1]; [1 2 1; 1 4 3]}; % 分母矩阵G = tf(num,den);```接下来,我们可以利用ss函数将传递函数对象转化为状态空间对象:```matlabsys = ss(G);```通过以上步骤,我们就可以得到对应的状态空间方程。
值得注意的是,状态空间方程通常表示为如下形式:\[ \dot{x} = Ax + Bu \]\[ y = Cx + Du \]其中,\[ A \]、\[ B \]、\[ C \]、\[ D \] 分别是状态方程的系数矩阵,\[ x \] 是系统的状态向量,\[ u \] 是系统的输入向量,\[ y \] 是系统的输出向量。
c++矩阵传递matlab
c++矩阵传递matlab如果你想在C++中处理矩阵,然后将其结果传递给MATLAB,你可以使用两种方法:使用C++代码直接调用MATLAB函数,或者使用C++将数据保存为MAT文件,然后MATLAB可以读取该文件。
方法一:使用C++调用MATLAB函数你可以在C++中通过MATLAB引擎API来调用MATLAB函数。
这样你可以直接在C++中运行MATLAB代码。
下面是一个简单的例子:cpp复制代码#include <iostream>#include <matrix.h>#include <engine.h>int main() {// 初始化MATLAB引擎Engine *ep;if (!(ep = engOpen(""))) {std::cerr << "\nCan't start MATLAB engine\n";return EXIT_FAILURE;}// 创建一个矩阵mxArray *A = mxCreateDoubleMatrix(1, 100, mxREAL); double *Adata = mxGetPr(A);for (int i = 0; i < 100; i++) {Adata[i] = i;}// 将数据传递给MATLABengPutVariable(ep, "A", A);// 执行MATLAB命令:计算矩阵的平方engEvalString(ep, "B = A^2;");// 从MATLAB获取结果mxArray *B = engGetVariable(ep, "B");double *Bdata = mxGetPr(B);for (int i = 0; i < 100; i++) {std::cout << Bdata[i] << " ";}std::cout << std::endl;// 清理并关闭MATLAB引擎mxDestroyArray(A);mxDestroyArray(B);engClose(ep);return EXIT_SUCCESS;}方法二:使用C++将数据保存为MAT文件,然后MATLAB读取该文件。
一维声子晶体纵波传递矩阵matlab
一维声子晶体纵波传递矩阵matlab 以下是一个用MATLAB计算一维声子晶体纵波传递矩阵的示例代码:matlabfunction transfer_matrix = phononic_crystal_transfer_matrix() % 声子晶体参数a = 0.01; % 晶体单元的间距N = 10; % 晶体单元的个数E = 1; % 晶体单元的弹性模量omega = linspace(0, pi/a, 100); % 频率范围% 声子晶体的传递矩阵transfer_matrix = zeros(size(omega));for i = 1:length(omega)k = omega(i); % 波矢M = E/a*[1, -1; -1, 1]; % 单个晶体单元的局部刚度矩阵% 计算传递矩阵for n = 1:Nk_n = sqrt(k^2 - (2*pi*n/(N*a))^2); % 模式频率T_n = [exp(1j*k_n*a), exp(-1j*k_n*a); % 模式传递矩阵1j*k_n*exp(1j*k_n*a), -1j*k_n*exp(-1j*k_n*a)];M = T_n*M*T_n'; % 计算传递矩阵end% 记录传递矩阵transfer_matrix(i) = M(1,1);end% 绘制结果figure;plot(omega, real(transfer_matrix));xlabel('k');ylabel('Transfer Matrix Element');end在这个示例代码中,我们假设一维声子晶体由相同大小的晶体单元组成,晶体单元的间距为`a`,晶体单元的弹性模量为`E`,晶体单元的个数为`N`。
代码中首先定义了频率范围`omega`,然后逐个计算不同频率下的传递矩阵。
传递矩阵的计算使用了一个循环,其中计算了每个晶体单元的模式频率和传递矩阵,并将其累乘得到整个声子晶体的传递矩阵。
matlab 矩阵运算程序
matlab 矩阵运算程序MATLAB是一种强大的数学软件,主要用于数值计算、算法开发、数据可视化和数据分析等。
在MATLAB中,矩阵运算是非常常见的操作。
以下是一个简单的MATLAB矩阵运算程序示例:```matlab创建两个矩阵A和BA = [1, 2, 3;4, 5, 6;7, 8, 9];B = [9, 8, 7;6, 5, 4;3, 2, 1];矩阵加法C = A + B;disp('矩阵A和矩阵B的和:');disp(C);矩阵减法D = A - B;disp('矩阵A和矩阵B的差:'); disp(D);矩阵乘法E = A * B;disp('矩阵A和矩阵B的乘积:'); disp(E);矩阵转置T = transpose(A);disp('矩阵A的转置:');disp(T);求矩阵的行列式det_A = det(A);disp('矩阵A的行列式:');disp(det_A);求矩阵的逆矩阵inv_A = inv(A);disp('矩阵A的逆矩阵:');disp(inv_A);求矩阵的秩rank_A = rank(A);disp('矩阵A的秩:');disp(rank_A);求矩阵的特征值eig_A = eig(A);disp('矩阵A的特征值:');disp(eig_A);```以上程序演示了MATLAB中的一些基本矩阵运算,如加法、减法、乘法、转置、求行列式、求逆矩阵、求秩和求特征值等。
您可以根据实际需求修改矩阵A和B的值,然后运行该程序以观察结果。
需要注意的是,这里的矩阵运算都是在MATLAB环境下进行的。
如果要编写比MATLAB更快的矩阵运算程序,可以尝试使用如C、C++等编程语言,并链接到高性能的数学库,如Intel的Math Kernel Library(MKL)。
传递函数矩阵解耦matlab
传递函数矩阵解耦matlab在MATLAB中,解耦函数矩阵可以通过多种方法实现。
下面我将从多个角度给出详细的解答。
方法一,使用MATLAB内置函数`ss2ss`进行解耦。
MATLAB提供了一个内置函数`ss2ss`,可以将系统的状态空间表示转换为解耦的形式。
该函数可以将一个多输入多输出(MIMO)系统转换为一组解耦的单输入单输出(SISO)系统。
具体步骤如下:1. 假设你有一个MIMO系统的状态空间表示,其中A是状态矩阵,B是输入矩阵,C是输出矩阵,D是直接耦合矩阵。
2. 使用`ss2ss`函数将系统转换为解耦的形式。
例如,使用以下代码:matlab.sys = ss(A, B, C, D); % 创建原始系统。
sys_decoupled = ss2ss(sys, 'companion'); % 解耦系统。
其中,'companion'是解耦方法的选项之一,还有其他可选项可以根据具体需求选择。
方法二,使用特征值分解进行解耦。
另一种常用的解耦方法是使用特征值分解。
该方法通过将系统的状态矩阵A进行特征值分解,得到特征向量矩阵和特征值矩阵,然后通过变换将系统转换为解耦的形式。
具体步骤如下:1. 假设你有一个MIMO系统的状态空间表示,其中A是状态矩阵,B是输入矩阵,C是输出矩阵,D是直接耦合矩阵。
2. 使用`eig`函数计算系统的特征值和特征向量。
例如,使用以下代码:matlab.[V, D] = eig(A); % 计算特征值和特征向量。
其中,V是特征向量矩阵,D是特征值矩阵。
3. 根据特征值和特征向量进行变换,将系统转换为解耦的形式。
例如,使用以下代码:matlab.A_decoupled = inv(V) A V; % 解耦后的状态矩阵。
B_decoupled = inv(V) B; % 解耦后的输入矩阵。
C_decoupled = C V; % 解耦后的输出矩阵。
matlab 状态转移矩阵
matlab 状态转移矩阵
摘要:
一、引言
二、MATLAB 求一步状态转移矩阵的方法
1.使用rand 函数
2.调整参数实现任意均匀分布
三、结论
正文:
一、引言
MATLAB 是一种广泛使用的数学软件,它提供了各种数学计算和数据分析功能。
在MATLAB 中,状态转移矩阵是一个重要的工具,用于描述系统的状态变化。
本文将介绍如何使用MATLAB 求一步状态转移矩阵。
二、MATLAB 求一步状态转移矩阵的方法
1.使用rand 函数
在MATLAB 中,可以使用rand 函数生成随机数。
对于一步状态转移矩阵,我们可以使用rand 函数生成一个指定阶数、起始值和结束值的随机数矩阵。
具体使用方法如下:
```matlab
rand(5)2030;
```
其中,5 表示的是阶位数,20 是开始的数值,30 是从开始数值算起的结束数值(2030),rand 是固定用法。
2.调整参数实现任意均匀分布
通过调整rand 函数的参数,我们可以实现任意均匀分布的一步状态转移矩阵。
具体来说,我们可以任意调整5、20、30 的值,以生成不同阶数、起始值和结束值的随机数矩阵。
三、结论
本文介绍了如何使用MATLAB 求一步状态转移矩阵的方法,通过使用rand 函数并调整相关参数,可以实现任意均匀分布的一步状态转移矩阵。
传递矩阵-matlab程序
%main_critical.m%该程序使用Riccati传递距阵法计算转子系统的临界转速及振型%本函数中均采用国际单位制% 第一步:设置初始条件(调用函数shaft_parameters)%初始值设置包括:轴段数N,搜索次数M%输入轴段参数:内径d,外径D,轴段长度l,支撑刚度K,单元质量mm,极转动惯量Jpp[N,M,d,D,l,K,mm,Jpp]=shaft_parameters;% 第二步:计算单元的5个特征值(调用函数shaft_pra_cal)%单元的5个特征值:%m_k::质量%Jp_k:极转动惯量%Jd_k:直径转动惯量%EI:弹性模量与截面对中性轴的惯性矩的乘积%rr:剪切影响系数[m_k,Jp_k,EI,rr]=shaft_pra_cal(N,D,d,l,Jpp,mm);% 第三步:计算剩余量(调用函数surplus_calculate),并绘制剩余量图%剩余量:D1for i=1:1:Mptx(i)=0;pty(i)=0;endfor ii=1:1:Mwi=ii/1*2+50;[D1,SS,Sn]=surplus_calculate(N,wi,K,m_k,Jp_k,JD_k,l,EI,rr);D1;pty(ii)=D1;ptx(ii)=w1endylabel(‘剩余量’);plot(ptx,pty)xlabel(‘角速度red/s’);grid on% 第四步:用二分法求固有频率及振型图%固有频率:Critical_speedwi=50;for i=1:1:4order=i[D1,SS,Sn]=surplus_calculate(N,wi,k,m_k,Jp_k,Jd_k,l,EI,rr);Step=1;D2=D1;kkk=1;while kkk<5000if D2*D1>0wi=wi+step;D2=D1;[D1,SS,Sn]=surplus_calculate(N,wi,K,m_k,Jp_k,Jd_k,l,EI,rr);endif D1*D2<0wi=wi-step;step=step/2;wi=wi+step;[D1,SS,Sn] =surplus_calculate(N,wi,K,m_k,Jp_k,Jd_k,l,EI,rr);EndD1;Wi;If atep<1/2000Kkk=5000;endendCritical_speed=wi/2/pi*60figure;plot_mode(N,l,SS,Sn)wi=wi+2;end%surplus_calculate,.m%计算剩余量%(1)计算传递矩阵%(2)计算剩余量function [D1,SS,Sn]= surplus_calculate(N,wi,K,m_k,Jp_k,Jd_k,l,EI,rr); % (1)计算传递矩阵%===============%(a)初值设为0%===============for i=1:1:N+1for j=1:1:2for k=1:1:2ud11(j,k.i)=0;ud12(j,k.i)=0;ud21(j,k.i)=0;ud22(j,k.i)=0;endendendfor i=1:1:Nfor j=1:1:2for k=1:1:2us11(j,k.i)=0;us12(j,k.i)=0;us21(j,k.i)=0;us22(j,k.i)=0;endendendfor i=1:1:Nfor j=1:1:2for k=1:1:2u11(j,k.i)=0;u12(j,k.i)=0;u21(j,k.i)=0;u22(j,k.i)=0;endendend%============%(b)计算质点上传递矩阵―――点矩阵的一部分!%============for i=1:1:N+1ud11(1,1,i)=1; ud11(1,2,i)=0; ud11 (2,1,i)=0; ud11(2,2,i)=1;ud21(1,1,i)=0; ud21(1,2,i)=0; ud21 (2,1,i)=0; ud21(2,2,i)=0;ud22(1,1,i)=1; ud22(1,2,i)=0; ud22 (2,1,i)=0; ud22(2,2,i)=1;end%============%(c)计算质点上传递矩阵―――点矩阵的一部分!%============for i=1:1:N+1ud12(1,1,i)=0;ud12(1,2,i)=(Jp_k(i)-Jd_k(i))*wi^2; %%%考虑陀螺力矩ud12(2,1,i)=m_k(i)*wi^2-k(i);ud12(2,2,i)=0;end%============%(d)以下计算的是无质量梁上的传递矩阵―――场矩阵%计算的锥轴的us是不对的,是随便令的,在后面计算剩余量时,zhui中会把错误的覆盖掉%============for i=1:1:Nus11(1,1,i)=1; us11(1,2,i)=1(i); us11 (2,1,i)=0; us11(2,2,i)=1;us12(1,1,i)=0; us12(1,2,i)=0; us12 (2,1,i)=0; us12(2,2,i)=0;us21(1,1,i)=1(i)^2/(2*EI(i)); us21(1,2,i)=(1(i)^3*(1-rr(i))/(6*EI(i)); us21(2,1,i)=1(i)/EI(i);us21(2,2,i)=1(i)^2/(2*EI(I));us22(1,1,i)=1; us22(1,2,i)=1(i); us22 (2,1,i)=0; us22(2,2,i)=1;end%============%此处全为计算中间量%============for i=1:1:N+2Su (1,1,i)=0; Su (1,2,i)=0; Su (2,1,i)=0; Su (2,2,i)=0;Sn(1,1,i)=0; Sn (1,2,i)=0; Sn (2,1,i)=0; Sn(2,2,i)=0;SS (1,1,i)=0; SS (1,2,i)=0; SS (2,1,i)=0; SS (2,2,i)=0;endfor i=1:1:2for j=1:1:2SS1(i,j)=0;Ud11(i,j)=0; Ud12(i,j)=0; Ud21(i,j)=0; Ud22(i,j)=0;Us11(i,j)=0; Us12(i,j)=0; Us21(i,j)=0; Us22(i,j)=0;endend%============%(e)调用函数cone_modify修改锥轴的传递矩阵%============cone_modify(4,wi);cone_modify(5,wi);cone_modify(6,wi);cone_modify(7,wi);cone_modify(8,wi);cone_modify(16,wi);cone_modify(17,wi);cone_modify(18,wi);cone_modify(19,wi);cone_modify(22,wi);cone_modify(24,wi);%============%(f)形成最终传递矩阵%============%Ud11 Ud12 Ud21 Ud22 为最终参与计算的传递矩阵for i=1:1:Nu11(:,:,i)=us11(:,:,i)*ud11(:,:,i)+us12(:,:,i)*ud21(:,:,i);u12(:,:,i)=us11(:,:,i)*ud12(:,:,i)+us12(:,:,i)*ud22(:,:,i);u21(:,:,i)=us21(:,:,i)*ud11(:,:,i)+us22(:,:,i)*ud21(:,:,i);u22(:,:,i)=us21(:,:,i)*ud12(:,:,i)+us22(:,:,i)*ud22(:,:,i);endu11(:,:,N+1)=ud11(:,:,N+1); u12(:,:,N+1)=ud12(:,:,N+1);u21(:,:,N+1)=ud21(:,:,N+1); u22(:,:,N+1)=ud22(:,:,N+1);for i=1:1:2for j=1:1:2SS1(i,j)=0;endendfor i=1:1:N+1ud11= u11(:,:,i); ud12= u12(:,:,i); ud21= u21(:,:,i); ud22= u22(:,:,i);SS(:,:,:i+1)=( ud11* SS1+ ud12)*inv(ud21* SS1+ ud22);Su(:,:,i)= ud21* SS1+ ud22;Sn(:,:,i)= inv(ud21* SS1+ ud22); %计算振型时用到SS1=SS(:,:,i+1);end%======(2)计算剩余量======D1=det(SS(:,:,N+2);for i=1:1:N+1D1=D1*sign(det(Su(:,:,i)); %消奇点end%======(2)不平衡响应值EE======EE(:,:,n+2)=-inv(SS(:,:,N+2)*PP(:,:,N+2);for i=N+1:-1:1EE(:,:,I)=Sn(:,:,i)*EE(:,:,i+1)-Sn(:,:,i)*UF(:,:,i);endA.2 碰摩转子系统计算仿真程序%main.m%该程序主要完成完成jeffcott转子圆周碰摩故障仿真%===========第一步:设置初始条件%rub_sign:碰摩标志,若rub_sign=0,说明系统无碰摩故障;否则rub_sign=1 %loca: 不平衡质量的位置%loc_rub: 碰摩位置%Famp: 不平衡质量的大小单位为:[g]%wi: 转速单位为:[rad]%r: 偏心半径单位为:[mm]%Fampl: 离心力的大小单位为:[kg,m]%fai: 不平衡量的初始相位[rad]clcclear[rub_sign loca loc_rub Famp wi r Famp1 fai]=initial_conditions% 第二步:设置转子系统的参数值%N:划分的轴段数%density: 轴的密度单位为:[kg/m^3%Ef: 轴的弹性模量单位为:[Pa]%L: 每个轴段的长度单位为:[m]%R: 每个轴段的外半径单位为:[m]%ro: 每个轴段的内半径单位为:[m]%miu: 每个轴段的单元质量[kg/m][N density Ef L R Ro miu]=rotor_parameters% 第三步:设置移动单元质量距阵,移动单元质量距阵,刚度单元质量距阵和陀螺力距距阵%Mst: 移动单元质量距阵%Msr: 移动单元质量距阵%Ks: 刚度单元距阵%Ge: 陀螺力距单元距阵[Mst: Msr Ks Ge]=Mst_Msr_Ks_Ge(N,density,R,Ro.L.Ef,miu)% 第四步:距阵组集%M:总的质量距阵%K:总的刚度距阵%G: 总的陀螺力矩距阵[M G K]=M_G_K(N,Ef,R,Ro.Mst,Msr,Ge,Ks,miu,L)% 第五步:加入支撑刚度和阻尼[K C D Ax]=K_D(N,K,M,G)% 第六步:用Newmark方法进行计算%Fen: 每个周期内的步数%ht: 每步的长度ut1=[];xt1=[];yt1=[];N3=(N+1)*4;Fen=100;ht=2*pi/wi/Fen;gama=0.5; beita=0.25;a0=1.0/(beita*ht);al=gama/(beita*ht);a2=1.0/(beita*ht);a3=0.5/beita-1.0;a4=gama/beita-1.0;a5=ht/2.0*(gama/beita-2.0);a6=ht*(1.0-gama);a7=gama*ht;for i=1:1:N3F(i,1)=0;endfor i=1:1;N3yn(i:1)=0;dyn(i:1)=0;ddyn(i:1)=0;endt=0;for n=1:1:Fen*80t=t+ht;n;for i=1:1:30newmark_newton_multiendif mod(n,100)==1nendif n>Fen*60for i=1:1:N+1x(i,1)=yn(i*4-3,n)*le6;y(i,1)=yn(i*4-2,n)*le6;sitax(I,1)=yn(i+4-0,n)/pi*180endu=F(loca*4-4+1,1);ut1=[ut1;[t u]];xt1=[xt1;[t x’]];yt1=[yt1;[t y’]];endendrub_signsave ’xt1.dat’ xt1 –ascii;save ’yt1.dat’ yt1 –ascii;save ’ut1.dat’ ut1 –ascii;%initial_conditions.m%该程序主要进行仿真条件设置Function [rub_sign loca loc_rob Famp wi r Famp1 fai]=initial_conditions%需要设置的初始条件有:%rub_sign: 碰摩标志,若rub_sign=0,说明系统无碰摩故障;否则rub_sign=1 %loca: 不平衡质量的位置%loc_rub: 碰摩位置%Famp: 不平衡质量的大小单位为:[g]%wi: 转速单位为:[rad]% r:偏心半径单位为:[mm]%Famp1:离心力的大小单位为:[kg,m]%fai: 不平衡量的初始相位[rad]rub_sign=0;loca=6;loc_rub=8;Famp=[1];wi=3000/60*2*pi;r=30Famp1=Famp(1)/1000*wi^2*r/1000;fai=[30 30]/180*pi%roto_parameters.m%该程序对Jeffcott转子系统进行参数设置function [N density Ef L R R0 miu]=rotor_parameters%N: 划分的轴段数%density: 轴的密度单位为:[kg/m^3]%Ef: 轴的弹性模量单位为:[Pa]%L 每个轴段的长度单位为:[m]%R 每个轴段的外半径单位为:[m]%R0: 每个轴段的内半径单位为:[m]%miu: 每个轴段的单元质量[kg/m]N=11;Density=7850;Ef=[2.1 2.1 2.1 2.1 2.1 2.1 2.1 2.1 2.1 2.1 2.1]*lell;L=[90.5 90.5 80.5 62.5 30 20 22.5 62.5 90.5 90.5 90.5]/1000;R=[20 20 20 20 20 90 20 20 20 20 20]/2000;R0=[0 0 0 0 0 0 0 0 0 0 0]/2000;for i=1:1;Nmiu(i)=density*pi*(R(i)^2-R0(i)^2)end%Mst_Msr_Ks_Ge.m%该程序设置单元距阵Function [Mst Msr Ks Ge]= Mst_Msr_Ks_Ge(N,density,R,R0,L,Ef,miu)%Mst: 移动单元质量距阵%Msr: 转动单元质量距阵%Ks: 刚度单元距阵%Ge: 陀螺力距单元距阵NN0=N;NN1=NN0+1NN2=NN1+1for i=1:1:NN0Mst(1,1,i)=156;Mst(2,1,i)=0; Mst(2,2,i)=156;Mst(3,1,i)=0; Mst(3,2,i)=-22*L(i); Mst(3,3,i)= 4*L(i)^2;Mst(4,1,i)22*L(i); Mst(4,2,i)=0; Mst(4,3,i)=0;Mst(4,4,i)=4*L(i)^2; Mst(5,1,i)=54; Mst(5,2,i)=0Mst(5,3,i)=0; Mst(5,4,i)=13*L(i); Mst(6,1,i)=0;Mst(6,2,i)=54; Mst(6,3,i)=13*L(i); Mst(6,4,i)=0;Mst(7,1,i)=0; Mst(7,2,i)=13*L(i); Mst(7,3,i)=-3*L(i)^2;Mst(7.4.i)=0; Mst(8,1,i)=-13*L(i); Mst(8,2,i)=0;Mst(8,3,i)=0; Mst(8,4,i)=-3*L(i)^2; Mst(5,5,i)=156;Mst(6,5.i)=0; Mst(6,6,i)=156;Mst(7,5,i)=0; Mst(7,6,i)=22*L(i); Mst(7,7,i)=4*L(i)^2;Mst(8,5,i)=-22*L(i); Mst(8,6,i)=0 Mst(8,7,i)=0Mst(8,8,i)=4*L(i)^2;endfor i=1:1:NN0Msr(1,1,i)=36;Msr(2,1,i)=0; Msr(2,2,i)=36;Msr(3,1,i)=0 Msr(3,2,i)=-3*L(i); Msr(3,3,i)=4*L(i)^2;Msr(4,1,i)=3*L(i); Msr(4,2,i)=0; Msr(4,3,i)=0;Msr(4,4,i)=4*L(i)^2; Msr(5,1,i)=36; Msr(5,2,i)=0;Msr(5,3,i)=0; Msr(5,4,i)=-3*L(i); Msr(6,1,i)=0;Msr(6,2,i)=-36; Msr(6,3,i)= 3*L(i); Msr(6,4,i)=0;Msr(7,1,i)=0; Msr(7,2,i)=-3*L(i); Msr(7,3,i)=-L(i)^2;Msr(7,4,i)=0; Msr(8,1,i)=3*L(i); Msr(8,2,i)=0;Msr(8,3,i)=0; Msr(8,4,i)=-L(i)^2; Msr(5,5,i)=36;Msr(6,5,i)=0; Msr(6,6,i)=36; Msr(7,5,i)=0;Msr(7,6,i)=3*L(i); Msr(7,7,i)=4*L(i)^2; Msr(8,5,i)=-3*L(i);Msr(8,6,i)=0; Msr(8,7,i)=0; Msr(8,8,i)=4*L(i)^2; endfor i=1:1:NN0Ge(1,1,i)=0;Ge(2,1,i)=36; Ge(2,2,i)=0;Ge(3,1,i)=-3*l(i); Ge(3,2,i)=0; Ge(3,3,i)=0;Ge(4,1,i)=0; Ge(4,2,i)=-3*L(i); Ge(4,3,i)=4*L(i)^2;Ge(4,4,i)=0; Ge(5,1,i)=0; Ge(5,2,i)=36;Ge(5,3,i)=-3*L(i); Ge(5,4,i)=0; Ge(6,1,i)=-36;Ge(6,2,i)=0; Ge(6,3,i)=0; Ge(6,4,i)=-3*L(i0);Ge(7,1,i)=-3*L(i); Ge(7,2,i)=0; Ge(7,3,i)=0;Ge(7,4,i)=L(i)62; Ge(8,1,i)=0; Ge(8,2,i)=-3*L(i);Ge(8,3,i)=-L(i)^2; Ge(8,4,i)=0; Ge(5,5,i)=0;Ge(6,5,i)=36; Ge(6,6,i)=0; Ge(7,5,i)=3*L(i);Ge(7,6,i)=0; Ge(7,7,i)=0; Ge(8,5,i)=0;Ge(8,6,i)=3*L(i); Ge(8,7,i)=4*L(i)^2; Ge(8,8,i)=0;endfor i=1:1:NN0Ks(1,1,i)=12;Ks(2,1,i)=0; Ks(2,2,i)=12;Ks(3,1,i)=0; Ks(3,2,i)=-6*L(i); Ks(3,3,i)=4*L(i)^2;Ks(4,1,i)=6*L(i); Ks(4,2,i)=0; Ks(4,3,i)=0;Ks(4,4,i)=4*L(i)^2; Ks(5,1,i)=-12; Ks(5,2,i)=0;Ks(5,3,i)=0; Ks(5,4,i)=-6*L(i); Ks(6,1,i)=0;Ks(6,2,i)=-12; Ks(6,3,i)=6*L(i); Ks(6.4.i)=0;Ks(7,1,i)=0; Ks(7,2,i)=-6*L(i); Ks(7,3,i)=2*L(i)^2;Ks(7,4,i)=0; Ks(8.1,i)=6*L(i); Ks(8,2,i)=0;Ks(8,3,i)=0; Ks(8,4,i)=2*L(i)62; Ks(5,5,i)=12;Ks(6,5,i)=0; Ks(6,6,i)=12; Ks(7,5,i)=0;Ks(7,6,i)=6*L(i); Ks(7,7,i)=4*L(i)^2; Ks(8,5,i)=-6*L(i);Ks(8,6,i)=0; Ks(8,7,i)=0; Ks(8,8,i)=4*L(i)^2; endfor i=1:1:NN0for j=1:1:8for k=1:1:8EI=Ef(i)*pi*(R(i)^4-R0(i)^4-)/4;Mst(j,k,i)=Mst(j,k,i)*miu(i)*L(i)/420;Msr(j,k,i)=Msr(j,k,i)*miu(i)*R(i)^2/120/L(i);Ge(j,k,i)=-Ger(j,k,i)*2*miu(i)*R(i)^2/120/L(i);Ks(j,k,i)=Ks(j,k,i)*EI/L(i)^3;endendendfor i=1:1:NN0for j=1:1:8for k=j:1:8Mst(j,k,i)=Mst(k,j,i);Msr(j,k,i)=Msr(k,j,i);Ks(j,k,i)=Ks(k,j,i);Ge(j,k,i)=-Ge(k,j,i);endendend%M_G_K.m%该程序进行距阵组集function [M G K]=M_G_K(N,Ef,R,R0,Mst,Msr,Ge,Ks,miu,L)% M: 总的质量距阵% K:总的刚度距阵% G:总的陀螺力距距阵NN0=Nfor i=1:1:NN0for j=1:1:8for K=1:1:8Ms(j,k,i)=Mst(j,k,i)+Msr(j,k,i);Ks(j,k,i)=Ks(j,k,i);Ge(j,k,i)=-Ge(j,k,i);endendengfor i=1:1:Nfor j=1:1:8for K=1:1:8M(i*4+j-4,i*4+k-4)=Ms(j,k,i);G(i*4+j-4,i*4+k-4)=Ge(j,k,i);K(i*4+j-4,i*4+k-4)= K (j,k,i);endendendfor i=2:1:Nfor k=1:1:4M(i*4+j-4,i*4+k-4)= M(i*4+j-4,i*4+k-4)+Ms(j+4,k+4,i-1);G(i*4+j-4,i*4+k-4)= G(i*4+j-4,i*4+k-4)+Ge(j+4,k+4,i-1);K(i*4+j-4,i*4+k-4)= K(i*4+j-4,i*4+k-4)+Ks(j+4,k+4,i-1);endendendKzx(1)=7e7;Kzy(1)=7e7;Kzx(12)=7e7;Kzy(12)=7e7;for i=1:1:N+1K(i*4+1-4,i*4+1-4)= K(i*4+1-4,i*4+1-4)+Kzx(i);K(i*4+2-4,i*4+2-4)= K(i*4+2-4,i*4+2-4)+Kzy(i);end%K_D.m%该程序将组尼加入总体距阵function [K C D Ax]=K_D(N,K,M,G)Kzx(1)=7e7;Kzy(1)=7e7;Kzx(12)=7e7;Kzy(12)=7e7;for i=1:1:N+1K(i*4+1-4,i*4+1-4)= K(i*4+1-4,i*4+1-4)+Kzx(i);K(i*4+2-4,i*4+2-4)= K(i*4+2-4,i*4+2-4)+Kzy(i);endformat long g[Ax WW]=eig(inv(M)*K);f=sqrt(WW)/(2*pi);f0=diag(f);f00=abs(sort(f0))fn123=[f00(1) f00(3) f00(5)]wi1=54*2*pi;wi2=284*2*pi;yita1=0.1;yita2=0.2;alf=2*(yita2/wi2-yita1/wi1)*(1/wi1^2-1/wi1^2);beita=2*(yita2*wi2-yita1*wi1)/(1/wi1^2-wi1^2);C=alf*M+beita*K;D=C+G;Dzx(1)=7e3;Dzy(1)=7e3;Dzx(12)=7e3;for i=1:1:N+1D(i*4+1-4,i*4+1-4)=D(i*4+1-4,i*4+1-4)+Dzx(i);D(i*4+2-4,i*4+2-4)=D(i*4+2-4,i*4+2-4)+Dzy(i);endD=D*1;%newmark_newton_multi.m%该程序为newmark_newton算法xn=yn(:,n);dxn=dyn(:,n);ddxn=ddyn(:,n);if i==1xn=yn(:,n);endif i>1xn=yn(:,n+1);endK0=K;K1=K*0;F(loca*4-4+1,1)=Famp1*cos(wi*t+fai(1));F(loca*4-4+2,1)=Famp1*sin(wi*t+fai(1));F(loca*4+1,1)=Famp1*cos(wi*t+fai(1));F(loca*4+2,1)=Famp1*sin(wi*t+fai(1));Pn1=F;Fr=Pn1*0;dert=20/1e6;k_rub=5e4;miu_rub=0.2;xx=yn(loc_rub*4-4+1,n)+5/1e6;yy=yn(loc_rub*4-4+2,n);rr=sqrt(xx^2+yy^2);if n>Fen*60&rr>dertrub_sign=1;K1(loc_rub*4-4+1,loc_rub*4-4+1)=k_rub*(rr-dert);K1(loc_rub*4-4+2,loc_rub*4-4+1)=k_rub*(rr-dert)*miu_rub;K1(loc_rub*4-4+1,loc_rub*4-4+2)=-k_rub*(rr-dert)*miu_rub;K1(loc_rub*4-4+2,loc_rub*4-4+2)=k_rub*(rr-dert);Fr(loc_rub*4-4+1,l)=k_rub*(rr-dert)/rr*(xx-miu_rub*yy);Fr(loc_rub*4-4+2,l)=k_rub*(rr-dert)/rr*(yy+miu_rub*xx); endKT=K0+K1;If i==1Fn1=K0*xn+Fr;endif i>1Fn1=K0*xn1+Fr;endKj=KT+a0*M+a1*C;Pj=Pn1+M*(a0*xn+a2*dxn+a3*ddxn)+C*(a1*xn+a4*dxn+a5*ddxn); If i==1Pj=Pj-Fn1+KT*xn;endif i>1Pj=Pj-Fn1+KT*xn1;endif rr<derti=100;end[QQ,RR]=qr(Kj);xn1=RR\QQ’ *Pj;ddxn1=a0*(xn1-xn)-a2*dxn-a3*ddxn;dxn1=dxn+a6*ddxn+a7*ddxn1;yn(:,n+1)=xn1;dyn(:,n+1)=dxn1;ddyn(;,n+1)=ddxn1;A.3 稳定性分析程序% 第一步:设置初始条件[N Fen y d y2]=initial_conditionsfm=[];for kk=1:1:60w=40+(kk-1)*1/1 %频率区间h=1/w/Fen; %每个周期内积分点数为Fen=200 w=2*pi*w;% 第二步:通过打靶法计算振幅的分岔特性shooting;% 第三步:计算floquet稳定性并保存计算数据floquet_stabilityend%shooting.m%该程序主要通过打靶法计算振幅的分岔特征并存储计算数据for i=1:1:30*Fent=0;t=t+(i)*h;y=rkutta(t,h,y,w);if i>(20*Fen) & mod(i,Fen)==1fprintf(f1,w/2/pi,y(1),y(2),y(3),y(4), y(5),y(6),y(7),y(8));endend%floquet_stability.m%该程序主要计算floquet稳定性并保存计算数据y2=eye(N);s0=y;for i=1:1:Fen*1t=0;t=t+(i)*h;y=rkutta(t,h,y,w);At=fun_At(t,y,w); % 根据当前y值求AFor j=1:1:N % 由dy2=A*y2积分求得y2zzzz=rkutta21(t,h,y2(:,j)’,At);endends=y;Rsi=s0-s;S=y2;Drds=eye(N)*1-S;dsi=Drds\(-Rsi)’ ;y=s-dsi’ ;floquet_mul=max(abs(eig(y2)));fm=[fm;w/2/pi floquet_mul];fprintf(f2,’ %15.9f, %15.9f\n’ ,w/2/pi, floquet_mul);% rkutta.mfunction yout=rkutta(t,h,y,w)N=length(y);for i=1:1:Na(i)=0;d(i)=0;b(i)=0;y0(i)=0;enda(1)=h/2; a(2)=h/2;a(3)=h; a(4)=h;d=fun(t,y,w);b=y;y0=y;for k=1:1:3for i=1:1:Ny(i)=y0(i)+a(k)*d(i);b(i)=b(i)+a(k+1)*d(i)/3;endtt=t+a(k);d=fun(tt,y,w);endfor i=1:1:Nyout(i)=b(i)+h*d(i)/6;end%rkutta21.mfunction yout=ekutta21(t,h,y,A)N=length(y);For i=1:1:Na(i)=0;d(i)=0;b(i)=0;y0(i)=0;enda(1)=h/2; a(2)=h/2;a(3)=h; a(4)=h;d=fun21(t,y,A);b=y;y0=y;for k=1:1:3for i=1:1:Ny(i)=y0(i)+a(k)*d(i);b(i)=b(i)+a(k+1)*d(i)/3;endtt=t+a(k);d=fun21(t,y,A);endfor i=1:1:Nyout(i)=b(i)+h*d(i)/6;end%fun.mfunction d=fun(t,y,w)N=length(y); %圆盘1的质量m1=0.7902; %圆盘2的质量m2=0.7902; %转轴的直径d0=0.01;l1=0.16;l2=0.16;l3=0.16;e1=5.695e-3*0; %圆盘1的偏心e2=5.695e-5; %圆盘2的偏心E=2.11e11; %转轴的弹性模量delta1=200e-5; %碰摩间隙1delta2=2e-5; %碰摩间隙2kr1=1e5; %碰摩刚度1kr2=1e5; %碰摩刚度2fr1=0.1; %碰摩摩擦系数1fr2=0.1; %碰摩摩擦系数2I=pi*d0*d0*d0*d0/64;k11=2.3704e5;k22=2.3704e5;k12=-2.0741e5;k21=k12; % 刚度c11=53.118385200000006; c12=-37.333800000000004;c21=-37.333800000000004; c22=53.118385200000006; % //阻尼系数omega=w;g=0;% 转子动力学方程If y(5)>=deltalDirac1=1;endif y(5)<deltalDirac1=0;endif y(7)>delta2Dirac2=1endif y(7)>delta2Dirac2=0;endfx1=-kr1*(y(5)-delta1)*Dirac1;fx2=-kr2*(y(7)-delta2)*Dirac2;fy1=-fr1*kr1*(y(5)-delta1)*Dirac1;fy2=-fr2*kr2*(y(7)-delta2)*Dirac2;d(1)=y(2);d(2)=-(c11/m1)*y(2)-(c12/m1)*y(4)-(k11/m1)*y(1)-(k12/m1)*y(3) +e1*omega*omega*sin(omega*t)+fy1/m1-g;d(3)=y(4);d(4)=-(c21/m2)*y(2)-(c22/m2)*y(4)-(k21/m2)*y(1)-(k22/m2)*y(3) +e2*omega*omega*sin(omega*t)+fy2/m2-g;d(5)=y(6);d(6)=-(c11/m1)*y(6)-(c12/m1)*y(8)-(k11/m1)*y(5)-(k12/m1)*y(7) +e1*omega*omega*cos(omega*t)+fy1/m1;d(7)=y(8);d(8)=-(c21/m2)*y(6)-(c22/m2)*y(8)-(k21/m2)*y(5)-(k22/m2)*y(7 +e2*omega*omega*cos(omega*t)+fx2/m2;function At=fun_At(t,y,w)N=length(y);eps=1e-6;for i=1:1:Nyi=y;yi(i)=y(i)+y(i)*eps;At0=fun(t,y,w);Ati=fun(t,yi,w);For j=1:1:NAt(j,i)=(Ati(j)-At0(j))/(yi(i)*eps);endendA.4 不对中转子系统仿真程序%如下是考虑轴承不对中产生的附加载荷。
matlab、python中矩阵的互相导入导出方式
matlab、python中矩阵的互相导⼊导出⽅式还有⼀种最流⾏的h5py.. 过⼏天更新------------在python中导出矩阵⾄matlab------------如果矩阵是mxn维的。
那么可以⽤ :np.savetxt('dev_ivector.csv', dev_ivector, delimiter = ',')对应matlab读取为:dev_ivec = csvread('dev_ivector.csv') ###csv格式其实就内定了结构体如果矩阵是(n,)这种格式。
['aagj' 'aagy' 'aann' ... 'zzgm' 'zzhk' 'zzwn'] 类似这种。
那么可以⽤f = open('label','w')for x in spk_mean_label:print(x)print(x,file=f)f.close()对应matlab读取为:spk_mean_label = importdata('label')第⼆种⽅法。
例如import scipy.ioscipy.io.savemat('filename',mdict={ 'a':a,'b':b})在matlab中只需要load 'filename';就导⼊了a矩阵和b矩阵python存储矩阵import pandas as pddf = pd.DataFrame(a)df.to_csv("score",sep=" ",index = False)------------在matlab中导出矩阵⾄python------------matlab⾥⾯得到矩阵后可以直接从⼯作区变量处保存为.mat⽂件。
传输矩阵的Matlab简易编程o
n0=1;%n0为空气折射率a0=0;%初始入射角为0,即正入射n1=1.444;n2=1.7514;d1=3.4886;d2=4.6373;d=1.55;p1=2*pi*n1*d1/d;p2=2*pi*n2*d2/d;u0=4*pi*1e-7;%真空磁导率e0=1e-9/(36*pi);%真空介电常数b=sqrt(e0/u0);c1=b*n1;%波阻抗c2=b*n2;c0=b*n0;c00=b*n0;A1=cos(p1);B1=-i*sin(p1)/c 1;C1=-i*c1*sin(p1);D1=cos( p1);M1=[A1 B1;C1 D1];%介质1的传输矩阵A2=cos(p2);B2=-i*sin(p2)/c2;C2=-i*c2*sin(p2);D2=cos( p2);M2=[A2 B2;C2 D2];%介质2的传输矩阵M=M1*M2;%两个介质层的总传输矩阵A=M(1,1);B=M(1,2);C=M(2, 1);D=M(2,2);r=(A*c0+B*c0*c00-C-D*c00) /(A*c0+B*c0*c00+C+D*c00) %反射系数t=(2*c0)/(A*c0+B*c0*c00+C+D*c00)%透射系数R=r*conj(r)T=t*conj(t)以上可作为TE波和TM波的一特列,即垂直入射n0=1;%n0为空气折射率a0=input('请输入入射角a0:');%初始入射角n1=input('请输入介质1的折射率n1:');n2=input('请输入介质2的折射率n2:');d1=input('请输入介质1的厚度d1:');d2=input('请输入介质2的厚度d2:');d=input('请输入入射光波长d:');a1=asin(n0*sin(a0)/n1);%光在介质1中的传播角度a2=asin(n1*sin(a1)/n2);%光在介质2中的传播角度a3=asin(n2*sin(a2)/n0);%射出介质时的出射角p1=2*pi*n1*d1*cos(a1)/d;%相位厚度p2=2*pi*n2*d2*cos(a2)/d; u0=4*pi*1e-7;%真空磁导率e0=1e-9/(36*pi);%真空介电常数b=sqrt(e0/u0);c1=b*n1*cos(a1);%波阻抗c2=b*n2*cos(a2);c0=b*n0*cos(a0);c00=b*n0*cos(a3);A1=cos(p1);B1=-i*sin(p1)/c1;C1=-i*c1*sin(p1);D1=cos( p1);M1=[A1 B1;C1 D1];%介质1的传输矩阵A2=cos(p2);B2=-i*sin(p2)/c 2;C2=-i*c2*sin(p2);D2=cos( p2);M2=[A2 B2;C2 D2];%介质2的传输矩阵M=M1*M2;%两个介质层的总传输矩阵A=M(1,1);B=M(1,2);C=M(2,1);D=M(2,2);r=(A*c0+B*c0*c00-C-D*c00) /(A*c0+B*c0*c00+C+D*c00) %反射系数t=(2*c0)/(A*c0+B*c0*c00+C +D*c00)%透射系数R=r*conj(r)T=t*conj(t)以上为TE波的例子。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%main_critical.m%该程序使用Riccati传递距阵法计算转子系统的临界转速及振型%本函数中均采用国际单位制% 第一步:设置初始条件(调用函数shaft_parameters)%初始值设置包括:轴段数N,搜索次数M%输入轴段参数:内径d,外径D,轴段长度l,支撑刚度K,单元质量mm,极转动惯量Jpp[N,M,d,D,l,K,mm,Jpp]=shaft_parameters;% 第二步:计算单元的5个特征值(调用函数shaft_pra_cal)%单元的5个特征值:%m_k::质量%Jp_k:极转动惯量%Jd_k:直径转动惯量%EI:弹性模量与截面对中性轴的惯性矩的乘积%rr:剪切影响系数[m_k,Jp_k,EI,rr]=shaft_pra_cal(N,D,d,l,Jpp,mm);% 第三步:计算剩余量(调用函数surplus_calculate),并绘制剩余量图%剩余量:D1for i=1:1:Mptx(i)=0;pty(i)=0;endfor ii=1:1:Mwi=ii/1*2+50;[D1,SS,Sn]=surplus_calculate(N,wi,K,m_k,Jp_k,JD_k,l,EI,rr);D1;pty(ii)=D1;ptx(ii)=w1endylabel(‘剩余量’);plot(ptx,pty)xlabel(‘角速度red/s’);grid on% 第四步:用二分法求固有频率及振型图%固有频率:Critical_speedwi=50;for i=1:1:4order=i[D1,SS,Sn]=surplus_calculate(N,wi,k,m_k,Jp_k,Jd_k,l,EI,rr);Step=1;D2=D1;kkk=1;while kkk<5000if D2*D1>0wi=wi+step;D2=D1;[D1,SS,Sn]=surplus_calculate(N,wi,K,m_k,Jp_k,Jd_k,l,EI,rr);endif D1*D2<0wi=wi-step;step=step/2;wi=wi+step;[D1,SS,Sn] =surplus_calculate(N,wi,K,m_k,Jp_k,Jd_k,l,EI,rr);EndD1;Wi;If atep<1/2000Kkk=5000;endendCritical_speed=wi/2/pi*60figure;plot_mode(N,l,SS,Sn)wi=wi+2;end%surplus_calculate,.m%计算剩余量%(1)计算传递矩阵%(2)计算剩余量function [D1,SS,Sn]= surplus_calculate(N,wi,K,m_k,Jp_k,Jd_k,l,EI,rr); % (1)计算传递矩阵%===============%(a)初值设为0%===============for i=1:1:N+1for j=1:1:2for k=1:1:2ud11(j,k.i)=0;ud12(j,k.i)=0;ud21(j,k.i)=0;ud22(j,k.i)=0;endendendfor i=1:1:Nfor j=1:1:2for k=1:1:2us11(j,k.i)=0;us12(j,k.i)=0;us21(j,k.i)=0;us22(j,k.i)=0;endendendfor i=1:1:Nfor j=1:1:2for k=1:1:2u11(j,k.i)=0;u12(j,k.i)=0;u21(j,k.i)=0;u22(j,k.i)=0;endendend%============%(b)计算质点上传递矩阵―――点矩阵的一部分!%============for i=1:1:N+1ud11(1,1,i)=1; ud11(1,2,i)=0; ud11 (2,1,i)=0; ud11(2,2,i)=1;ud21(1,1,i)=0; ud21(1,2,i)=0; ud21 (2,1,i)=0; ud21(2,2,i)=0;ud22(1,1,i)=1; ud22(1,2,i)=0; ud22 (2,1,i)=0; ud22(2,2,i)=1;end%============%(c)计算质点上传递矩阵―――点矩阵的一部分!%============for i=1:1:N+1ud12(1,1,i)=0;ud12(1,2,i)=(Jp_k(i)-Jd_k(i))*wi^2; %%%考虑陀螺力矩ud12(2,1,i)=m_k(i)*wi^2-k(i);ud12(2,2,i)=0;end%============%(d)以下计算的是无质量梁上的传递矩阵―――场矩阵%计算的锥轴的us是不对的,是随便令的,在后面计算剩余量时,zhui中会把错误的覆盖掉%============for i=1:1:Nus11(1,1,i)=1; us11(1,2,i)=1(i); us11 (2,1,i)=0; us11(2,2,i)=1;us12(1,1,i)=0; us12(1,2,i)=0; us12 (2,1,i)=0; us12(2,2,i)=0;us21(1,1,i)=1(i)^2/(2*EI(i)); us21(1,2,i)=(1(i)^3*(1-rr(i))/(6*EI(i)); us21(2,1,i)=1(i)/EI(i);us21(2,2,i)=1(i)^2/(2*EI(I));us22(1,1,i)=1; us22(1,2,i)=1(i); us22 (2,1,i)=0; us22(2,2,i)=1;end%============%此处全为计算中间量%============for i=1:1:N+2Su (1,1,i)=0; Su (1,2,i)=0; Su (2,1,i)=0; Su (2,2,i)=0;Sn(1,1,i)=0; Sn (1,2,i)=0; Sn (2,1,i)=0; Sn(2,2,i)=0;SS (1,1,i)=0; SS (1,2,i)=0; SS (2,1,i)=0; SS (2,2,i)=0;endfor i=1:1:2for j=1:1:2SS1(i,j)=0;Ud11(i,j)=0; Ud12(i,j)=0; Ud21(i,j)=0; Ud22(i,j)=0;Us11(i,j)=0; Us12(i,j)=0; Us21(i,j)=0; Us22(i,j)=0;endend%============%(e)调用函数cone_modify修改锥轴的传递矩阵%============cone_modify(4,wi);cone_modify(5,wi);cone_modify(6,wi);cone_modify(7,wi);cone_modify(8,wi);cone_modify(16,wi);cone_modify(17,wi);cone_modify(18,wi);cone_modify(19,wi);cone_modify(22,wi);cone_modify(24,wi);%============%(f)形成最终传递矩阵%============%Ud11 Ud12 Ud21 Ud22 为最终参与计算的传递矩阵for i=1:1:Nu11(:,:,i)=us11(:,:,i)*ud11(:,:,i)+us12(:,:,i)*ud21(:,:,i);u12(:,:,i)=us11(:,:,i)*ud12(:,:,i)+us12(:,:,i)*ud22(:,:,i);u21(:,:,i)=us21(:,:,i)*ud11(:,:,i)+us22(:,:,i)*ud21(:,:,i);u22(:,:,i)=us21(:,:,i)*ud12(:,:,i)+us22(:,:,i)*ud22(:,:,i);endu11(:,:,N+1)=ud11(:,:,N+1); u12(:,:,N+1)=ud12(:,:,N+1);u21(:,:,N+1)=ud21(:,:,N+1); u22(:,:,N+1)=ud22(:,:,N+1);for i=1:1:2for j=1:1:2SS1(i,j)=0;endendfor i=1:1:N+1ud11= u11(:,:,i); ud12= u12(:,:,i); ud21= u21(:,:,i); ud22= u22(:,:,i);SS(:,:,:i+1)=( ud11* SS1+ ud12)*inv(ud21* SS1+ ud22);Su(:,:,i)= ud21* SS1+ ud22;Sn(:,:,i)= inv(ud21* SS1+ ud22); %计算振型时用到SS1=SS(:,:,i+1);end%======(2)计算剩余量======D1=det(SS(:,:,N+2);for i=1:1:N+1D1=D1*sign(det(Su(:,:,i)); %消奇点end%======(2)不平衡响应值EE======EE(:,:,n+2)=-inv(SS(:,:,N+2)*PP(:,:,N+2);for i=N+1:-1:1EE(:,:,I)=Sn(:,:,i)*EE(:,:,i+1)-Sn(:,:,i)*UF(:,:,i);endA.2 碰摩转子系统计算仿真程序%main.m%该程序主要完成完成jeffcott转子圆周碰摩故障仿真%===========第一步:设置初始条件%rub_sign:碰摩标志,若rub_sign=0,说明系统无碰摩故障;否则rub_sign=1 %loca: 不平衡质量的位置%loc_rub: 碰摩位置%Famp: 不平衡质量的大小单位为:[g]%wi: 转速单位为:[rad]%r: 偏心半径单位为:[mm]%Fampl: 离心力的大小单位为:[kg,m]%fai: 不平衡量的初始相位[rad]clcclear[rub_sign loca loc_rub Famp wi r Famp1 fai]=initial_conditions% 第二步:设置转子系统的参数值%N:划分的轴段数%density: 轴的密度单位为:[kg/m^3%Ef: 轴的弹性模量单位为:[Pa]%L: 每个轴段的长度单位为:[m]%R: 每个轴段的外半径单位为:[m]%ro: 每个轴段的内半径单位为:[m]%miu: 每个轴段的单元质量[kg/m][N density Ef L R Ro miu]=rotor_parameters% 第三步:设置移动单元质量距阵,移动单元质量距阵,刚度单元质量距阵和陀螺力距距阵%Mst: 移动单元质量距阵%Msr: 移动单元质量距阵%Ks: 刚度单元距阵%Ge: 陀螺力距单元距阵[Mst: Msr Ks Ge]=Mst_Msr_Ks_Ge(N,density,R,Ro.L.Ef,miu)% 第四步:距阵组集%M:总的质量距阵%K:总的刚度距阵%G: 总的陀螺力矩距阵[M G K]=M_G_K(N,Ef,R,Ro.Mst,Msr,Ge,Ks,miu,L)% 第五步:加入支撑刚度和阻尼[K C D Ax]=K_D(N,K,M,G)% 第六步:用Newmark方法进行计算%Fen: 每个周期内的步数%ht: 每步的长度ut1=[];xt1=[];yt1=[];N3=(N+1)*4;Fen=100;ht=2*pi/wi/Fen;gama=0.5; beita=0.25;a0=1.0/(beita*ht);al=gama/(beita*ht);a2=1.0/(beita*ht);a3=0.5/beita-1.0;a4=gama/beita-1.0;a5=ht/2.0*(gama/beita-2.0);a6=ht*(1.0-gama);a7=gama*ht;for i=1:1:N3F(i,1)=0;endfor i=1:1;N3yn(i:1)=0;dyn(i:1)=0;ddyn(i:1)=0;endt=0;for n=1:1:Fen*80t=t+ht;n;for i=1:1:30newmark_newton_multiendif mod(n,100)==1nendif n>Fen*60for i=1:1:N+1x(i,1)=yn(i*4-3,n)*le6;y(i,1)=yn(i*4-2,n)*le6;sitax(I,1)=yn(i+4-0,n)/pi*180endu=F(loca*4-4+1,1);ut1=[ut1;[t u]];xt1=[xt1;[t x’]];yt1=[yt1;[t y’]];endendrub_signsave ’xt1.dat’ xt1 –ascii;save ’yt1.dat’ yt1 –ascii;save ’ut1.dat’ ut1 –ascii;%initial_conditions.m%该程序主要进行仿真条件设置Function [rub_sign loca loc_rob Famp wi r Famp1 fai]=initial_conditions%需要设置的初始条件有:%rub_sign: 碰摩标志,若rub_sign=0,说明系统无碰摩故障;否则rub_sign=1 %loca: 不平衡质量的位置%loc_rub: 碰摩位置%Famp: 不平衡质量的大小单位为:[g]%wi: 转速单位为:[rad]% r:偏心半径单位为:[mm]%Famp1:离心力的大小单位为:[kg,m]%fai: 不平衡量的初始相位[rad]rub_sign=0;loca=6;loc_rub=8;Famp=[1];wi=3000/60*2*pi;r=30Famp1=Famp(1)/1000*wi^2*r/1000;fai=[30 30]/180*pi%roto_parameters.m%该程序对Jeffcott转子系统进行参数设置function [N density Ef L R R0 miu]=rotor_parameters%N: 划分的轴段数%density: 轴的密度单位为:[kg/m^3]%Ef: 轴的弹性模量单位为:[Pa]%L 每个轴段的长度单位为:[m]%R 每个轴段的外半径单位为:[m]%R0: 每个轴段的内半径单位为:[m]%miu: 每个轴段的单元质量[kg/m]N=11;Density=7850;Ef=[2.1 2.1 2.1 2.1 2.1 2.1 2.1 2.1 2.1 2.1 2.1]*lell;L=[90.5 90.5 80.5 62.5 30 20 22.5 62.5 90.5 90.5 90.5]/1000;R=[20 20 20 20 20 90 20 20 20 20 20]/2000;R0=[0 0 0 0 0 0 0 0 0 0 0]/2000;for i=1:1;Nmiu(i)=density*pi*(R(i)^2-R0(i)^2)end%Mst_Msr_Ks_Ge.m%该程序设置单元距阵Function [Mst Msr Ks Ge]= Mst_Msr_Ks_Ge(N,density,R,R0,L,Ef,miu)%Mst: 移动单元质量距阵%Msr: 转动单元质量距阵%Ks: 刚度单元距阵%Ge: 陀螺力距单元距阵NN0=N;NN1=NN0+1NN2=NN1+1for i=1:1:NN0Mst(1,1,i)=156;Mst(2,1,i)=0; Mst(2,2,i)=156;Mst(3,1,i)=0; Mst(3,2,i)=-22*L(i); Mst(3,3,i)= 4*L(i)^2;Mst(4,1,i)22*L(i); Mst(4,2,i)=0; Mst(4,3,i)=0;Mst(4,4,i)=4*L(i)^2; Mst(5,1,i)=54; Mst(5,2,i)=0Mst(5,3,i)=0; Mst(5,4,i)=13*L(i); Mst(6,1,i)=0;Mst(6,2,i)=54; Mst(6,3,i)=13*L(i); Mst(6,4,i)=0;Mst(7,1,i)=0; Mst(7,2,i)=13*L(i); Mst(7,3,i)=-3*L(i)^2;Mst(7.4.i)=0; Mst(8,1,i)=-13*L(i); Mst(8,2,i)=0;Mst(8,3,i)=0; Mst(8,4,i)=-3*L(i)^2; Mst(5,5,i)=156;Mst(6,5.i)=0; Mst(6,6,i)=156;Mst(7,5,i)=0; Mst(7,6,i)=22*L(i); Mst(7,7,i)=4*L(i)^2;Mst(8,5,i)=-22*L(i); Mst(8,6,i)=0 Mst(8,7,i)=0Mst(8,8,i)=4*L(i)^2;endfor i=1:1:NN0Msr(1,1,i)=36;Msr(2,1,i)=0; Msr(2,2,i)=36;Msr(3,1,i)=0 Msr(3,2,i)=-3*L(i); Msr(3,3,i)=4*L(i)^2;Msr(4,1,i)=3*L(i); Msr(4,2,i)=0; Msr(4,3,i)=0;Msr(4,4,i)=4*L(i)^2; Msr(5,1,i)=36; Msr(5,2,i)=0;Msr(5,3,i)=0; Msr(5,4,i)=-3*L(i); Msr(6,1,i)=0;Msr(6,2,i)=-36; Msr(6,3,i)= 3*L(i); Msr(6,4,i)=0;Msr(7,1,i)=0; Msr(7,2,i)=-3*L(i); Msr(7,3,i)=-L(i)^2;Msr(7,4,i)=0; Msr(8,1,i)=3*L(i); Msr(8,2,i)=0;Msr(8,3,i)=0; Msr(8,4,i)=-L(i)^2; Msr(5,5,i)=36;Msr(6,5,i)=0; Msr(6,6,i)=36; Msr(7,5,i)=0;Msr(7,6,i)=3*L(i); Msr(7,7,i)=4*L(i)^2; Msr(8,5,i)=-3*L(i);Msr(8,6,i)=0; Msr(8,7,i)=0; Msr(8,8,i)=4*L(i)^2; endfor i=1:1:NN0Ge(1,1,i)=0;Ge(2,1,i)=36; Ge(2,2,i)=0;Ge(3,1,i)=-3*l(i); Ge(3,2,i)=0; Ge(3,3,i)=0;Ge(4,1,i)=0; Ge(4,2,i)=-3*L(i); Ge(4,3,i)=4*L(i)^2;Ge(4,4,i)=0; Ge(5,1,i)=0; Ge(5,2,i)=36;Ge(5,3,i)=-3*L(i); Ge(5,4,i)=0; Ge(6,1,i)=-36;Ge(6,2,i)=0; Ge(6,3,i)=0; Ge(6,4,i)=-3*L(i0);Ge(7,1,i)=-3*L(i); Ge(7,2,i)=0; Ge(7,3,i)=0;Ge(7,4,i)=L(i)62; Ge(8,1,i)=0; Ge(8,2,i)=-3*L(i);Ge(8,3,i)=-L(i)^2; Ge(8,4,i)=0; Ge(5,5,i)=0;Ge(6,5,i)=36; Ge(6,6,i)=0; Ge(7,5,i)=3*L(i);Ge(7,6,i)=0; Ge(7,7,i)=0; Ge(8,5,i)=0;Ge(8,6,i)=3*L(i); Ge(8,7,i)=4*L(i)^2; Ge(8,8,i)=0;endfor i=1:1:NN0Ks(1,1,i)=12;Ks(2,1,i)=0; Ks(2,2,i)=12;Ks(3,1,i)=0; Ks(3,2,i)=-6*L(i); Ks(3,3,i)=4*L(i)^2;Ks(4,1,i)=6*L(i); Ks(4,2,i)=0; Ks(4,3,i)=0;Ks(4,4,i)=4*L(i)^2; Ks(5,1,i)=-12; Ks(5,2,i)=0;Ks(5,3,i)=0; Ks(5,4,i)=-6*L(i); Ks(6,1,i)=0;Ks(6,2,i)=-12; Ks(6,3,i)=6*L(i); Ks(6.4.i)=0;Ks(7,1,i)=0; Ks(7,2,i)=-6*L(i); Ks(7,3,i)=2*L(i)^2;Ks(7,4,i)=0; Ks(8.1,i)=6*L(i); Ks(8,2,i)=0;Ks(8,3,i)=0; Ks(8,4,i)=2*L(i)62; Ks(5,5,i)=12;Ks(6,5,i)=0; Ks(6,6,i)=12; Ks(7,5,i)=0;Ks(7,6,i)=6*L(i); Ks(7,7,i)=4*L(i)^2; Ks(8,5,i)=-6*L(i);Ks(8,6,i)=0; Ks(8,7,i)=0; Ks(8,8,i)=4*L(i)^2; endfor i=1:1:NN0for j=1:1:8for k=1:1:8EI=Ef(i)*pi*(R(i)^4-R0(i)^4-)/4;Mst(j,k,i)=Mst(j,k,i)*miu(i)*L(i)/420;Msr(j,k,i)=Msr(j,k,i)*miu(i)*R(i)^2/120/L(i);Ge(j,k,i)=-Ger(j,k,i)*2*miu(i)*R(i)^2/120/L(i);Ks(j,k,i)=Ks(j,k,i)*EI/L(i)^3;endendendfor i=1:1:NN0for j=1:1:8for k=j:1:8Mst(j,k,i)=Mst(k,j,i);Msr(j,k,i)=Msr(k,j,i);Ks(j,k,i)=Ks(k,j,i);Ge(j,k,i)=-Ge(k,j,i);endendend%M_G_K.m%该程序进行距阵组集function [M G K]=M_G_K(N,Ef,R,R0,Mst,Msr,Ge,Ks,miu,L)% M: 总的质量距阵% K:总的刚度距阵% G:总的陀螺力距距阵NN0=Nfor i=1:1:NN0for j=1:1:8for K=1:1:8Ms(j,k,i)=Mst(j,k,i)+Msr(j,k,i);Ks(j,k,i)=Ks(j,k,i);Ge(j,k,i)=-Ge(j,k,i);endendengfor i=1:1:Nfor j=1:1:8for K=1:1:8M(i*4+j-4,i*4+k-4)=Ms(j,k,i);G(i*4+j-4,i*4+k-4)=Ge(j,k,i);K(i*4+j-4,i*4+k-4)= K (j,k,i);endendendfor i=2:1:Nfor k=1:1:4M(i*4+j-4,i*4+k-4)= M(i*4+j-4,i*4+k-4)+Ms(j+4,k+4,i-1);G(i*4+j-4,i*4+k-4)= G(i*4+j-4,i*4+k-4)+Ge(j+4,k+4,i-1);K(i*4+j-4,i*4+k-4)= K(i*4+j-4,i*4+k-4)+Ks(j+4,k+4,i-1);endendendKzx(1)=7e7;Kzy(1)=7e7;Kzx(12)=7e7;Kzy(12)=7e7;for i=1:1:N+1K(i*4+1-4,i*4+1-4)= K(i*4+1-4,i*4+1-4)+Kzx(i);K(i*4+2-4,i*4+2-4)= K(i*4+2-4,i*4+2-4)+Kzy(i);end%K_D.m%该程序将组尼加入总体距阵function [K C D Ax]=K_D(N,K,M,G)Kzx(1)=7e7;Kzy(1)=7e7;Kzx(12)=7e7;Kzy(12)=7e7;for i=1:1:N+1K(i*4+1-4,i*4+1-4)= K(i*4+1-4,i*4+1-4)+Kzx(i);K(i*4+2-4,i*4+2-4)= K(i*4+2-4,i*4+2-4)+Kzy(i);endformat long g[Ax WW]=eig(inv(M)*K);f=sqrt(WW)/(2*pi);f0=diag(f);f00=abs(sort(f0))fn123=[f00(1) f00(3) f00(5)]wi1=54*2*pi;wi2=284*2*pi;yita1=0.1;yita2=0.2;alf=2*(yita2/wi2-yita1/wi1)*(1/wi1^2-1/wi1^2);beita=2*(yita2*wi2-yita1*wi1)/(1/wi1^2-wi1^2);C=alf*M+beita*K;D=C+G;Dzx(1)=7e3;Dzy(1)=7e3;Dzx(12)=7e3;for i=1:1:N+1D(i*4+1-4,i*4+1-4)=D(i*4+1-4,i*4+1-4)+Dzx(i);D(i*4+2-4,i*4+2-4)=D(i*4+2-4,i*4+2-4)+Dzy(i);endD=D*1;%newmark_newton_multi.m%该程序为newmark_newton算法xn=yn(:,n);dxn=dyn(:,n);ddxn=ddyn(:,n);if i==1xn=yn(:,n);endif i>1xn=yn(:,n+1);endK0=K;K1=K*0;F(loca*4-4+1,1)=Famp1*cos(wi*t+fai(1));F(loca*4-4+2,1)=Famp1*sin(wi*t+fai(1));F(loca*4+1,1)=Famp1*cos(wi*t+fai(1));F(loca*4+2,1)=Famp1*sin(wi*t+fai(1));Pn1=F;Fr=Pn1*0;dert=20/1e6;k_rub=5e4;miu_rub=0.2;xx=yn(loc_rub*4-4+1,n)+5/1e6;yy=yn(loc_rub*4-4+2,n);rr=sqrt(xx^2+yy^2);if n>Fen*60&rr>dertrub_sign=1;K1(loc_rub*4-4+1,loc_rub*4-4+1)=k_rub*(rr-dert);K1(loc_rub*4-4+2,loc_rub*4-4+1)=k_rub*(rr-dert)*miu_rub;K1(loc_rub*4-4+1,loc_rub*4-4+2)=-k_rub*(rr-dert)*miu_rub;K1(loc_rub*4-4+2,loc_rub*4-4+2)=k_rub*(rr-dert);Fr(loc_rub*4-4+1,l)=k_rub*(rr-dert)/rr*(xx-miu_rub*yy);Fr(loc_rub*4-4+2,l)=k_rub*(rr-dert)/rr*(yy+miu_rub*xx); endKT=K0+K1;If i==1Fn1=K0*xn+Fr;endif i>1Fn1=K0*xn1+Fr;endKj=KT+a0*M+a1*C;Pj=Pn1+M*(a0*xn+a2*dxn+a3*ddxn)+C*(a1*xn+a4*dxn+a5*ddxn); If i==1Pj=Pj-Fn1+KT*xn;endif i>1Pj=Pj-Fn1+KT*xn1;endif rr<derti=100;end[QQ,RR]=qr(Kj);xn1=RR\QQ’ *Pj;ddxn1=a0*(xn1-xn)-a2*dxn-a3*ddxn;dxn1=dxn+a6*ddxn+a7*ddxn1;yn(:,n+1)=xn1;dyn(:,n+1)=dxn1;ddyn(;,n+1)=ddxn1;A.3 稳定性分析程序% 第一步:设置初始条件[N Fen y d y2]=initial_conditionsfm=[];for kk=1:1:60w=40+(kk-1)*1/1 %频率区间h=1/w/Fen; %每个周期内积分点数为Fen=200 w=2*pi*w;% 第二步:通过打靶法计算振幅的分岔特性shooting;% 第三步:计算floquet稳定性并保存计算数据floquet_stabilityend%shooting.m%该程序主要通过打靶法计算振幅的分岔特征并存储计算数据for i=1:1:30*Fent=0;t=t+(i)*h;y=rkutta(t,h,y,w);if i>(20*Fen) & mod(i,Fen)==1fprintf(f1,w/2/pi,y(1),y(2),y(3),y(4), y(5),y(6),y(7),y(8));endend%floquet_stability.m%该程序主要计算floquet稳定性并保存计算数据y2=eye(N);s0=y;for i=1:1:Fen*1t=0;t=t+(i)*h;y=rkutta(t,h,y,w);At=fun_At(t,y,w); % 根据当前y值求AFor j=1:1:N % 由dy2=A*y2积分求得y2zzzz=rkutta21(t,h,y2(:,j)’,At);endends=y;Rsi=s0-s;S=y2;Drds=eye(N)*1-S;dsi=Drds\(-Rsi)’ ;y=s-dsi’ ;floquet_mul=max(abs(eig(y2)));fm=[fm;w/2/pi floquet_mul];fprintf(f2,’ %15.9f, %15.9f\n’ ,w/2/pi, floquet_mul);% rkutta.mfunction yout=rkutta(t,h,y,w)N=length(y);for i=1:1:Na(i)=0;d(i)=0;b(i)=0;y0(i)=0;enda(1)=h/2; a(2)=h/2;a(3)=h; a(4)=h;d=fun(t,y,w);b=y;y0=y;for k=1:1:3for i=1:1:Ny(i)=y0(i)+a(k)*d(i);b(i)=b(i)+a(k+1)*d(i)/3;endtt=t+a(k);d=fun(tt,y,w);endfor i=1:1:Nyout(i)=b(i)+h*d(i)/6;end%rkutta21.mfunction yout=ekutta21(t,h,y,A)N=length(y);For i=1:1:Na(i)=0;d(i)=0;b(i)=0;y0(i)=0;enda(1)=h/2; a(2)=h/2;a(3)=h; a(4)=h;d=fun21(t,y,A);b=y;y0=y;for k=1:1:3for i=1:1:Ny(i)=y0(i)+a(k)*d(i);b(i)=b(i)+a(k+1)*d(i)/3;endtt=t+a(k);d=fun21(t,y,A);endfor i=1:1:Nyout(i)=b(i)+h*d(i)/6;end%fun.mfunction d=fun(t,y,w)N=length(y); %圆盘1的质量m1=0.7902; %圆盘2的质量m2=0.7902; %转轴的直径d0=0.01;l1=0.16;l2=0.16;l3=0.16;e1=5.695e-3*0; %圆盘1的偏心e2=5.695e-5; %圆盘2的偏心E=2.11e11; %转轴的弹性模量delta1=200e-5; %碰摩间隙1delta2=2e-5; %碰摩间隙2kr1=1e5; %碰摩刚度1kr2=1e5; %碰摩刚度2fr1=0.1; %碰摩摩擦系数1fr2=0.1; %碰摩摩擦系数2I=pi*d0*d0*d0*d0/64;k11=2.3704e5;k22=2.3704e5;k12=-2.0741e5;k21=k12; % 刚度c11=53.118385200000006; c12=-37.333800000000004;c21=-37.333800000000004; c22=53.118385200000006; % //阻尼系数omega=w;g=0;% 转子动力学方程If y(5)>=deltalDirac1=1;endif y(5)<deltalDirac1=0;endif y(7)>delta2Dirac2=1endif y(7)>delta2Dirac2=0;endfx1=-kr1*(y(5)-delta1)*Dirac1;fx2=-kr2*(y(7)-delta2)*Dirac2;fy1=-fr1*kr1*(y(5)-delta1)*Dirac1;fy2=-fr2*kr2*(y(7)-delta2)*Dirac2;d(1)=y(2);d(2)=-(c11/m1)*y(2)-(c12/m1)*y(4)-(k11/m1)*y(1)-(k12/m1)*y(3) +e1*omega*omega*sin(omega*t)+fy1/m1-g;d(3)=y(4);d(4)=-(c21/m2)*y(2)-(c22/m2)*y(4)-(k21/m2)*y(1)-(k22/m2)*y(3) +e2*omega*omega*sin(omega*t)+fy2/m2-g;d(5)=y(6);d(6)=-(c11/m1)*y(6)-(c12/m1)*y(8)-(k11/m1)*y(5)-(k12/m1)*y(7) +e1*omega*omega*cos(omega*t)+fy1/m1;d(7)=y(8);d(8)=-(c21/m2)*y(6)-(c22/m2)*y(8)-(k21/m2)*y(5)-(k22/m2)*y(7 +e2*omega*omega*cos(omega*t)+fx2/m2;function At=fun_At(t,y,w)N=length(y);eps=1e-6;for i=1:1:Nyi=y;yi(i)=y(i)+y(i)*eps;At0=fun(t,y,w);Ati=fun(t,yi,w);For j=1:1:NAt(j,i)=(Ati(j)-At0(j))/(yi(i)*eps);endendA.4 不对中转子系统仿真程序%如下是考虑轴承不对中产生的附加载荷。