matlab单个三角脉冲傅里叶变换代码,宽度为1,的傅里叶变换
% 参数设置
width = 1; % 三角脉冲的宽度
Tmax = 10; % 时间范围
dt = 0.01; % 离散化步长
t = -Tmax:dt:Tmax; % 时间向量
% 创建三角脉冲信号
pulse = zeros(size(t));
pulse(abs(t) <= width/2) = 1 - 2*abs(t(abs(t) <= width/2))/width;
% 计算傅里叶变换
f = fftshift(fft(pulse));
f = f / max(abs(f)); % 归一化
% 计算频率向量
N = length(t);
df = 1 / (N * dt);
freq = -1/(2*dt):df:1/(2*dt) - df;
% 绘制三角脉冲信号及其傅里叶变换
figure;
subplot(2, 1, 1);
plot(t, pulse);
title('Triangle Pulse');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2, 1, 2);
plot(freq, abs(f));
title('Fourier Transform');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
信息:The truss example to be solved using the completed code. The vertical and horizontal segments of the crane are made of aluminum (Young’s modulus E=70 GPa, and have a cross-section of 2 cm2. The diagonal truss elements are made of steel (Young’s modulus E=210 GPa, and have a cross-section of 3 cm2. The structure is subjected to a load P=6000 N applied as illustrated in the figure. The two support nodes are assumed fixed (i.e., x- and y-displacements are 0).
代码:
input代码
%读取input文件按顺序读取节点坐标,单元信息,受力节点信息,固定节点
fid = fopen('input.txt','rt'); %打开文件
NodeCoordinate = fscanf(fid,'%g',[3,25]); %读取节点坐标
NodeCoordinate = NodeCoordinate';
ElementMsg = fscanf(fid,'%g',[5,47]);%读取单元信息
ElementMsg = ElementMsg';
ForceNodeMsg = fscanf(fid,'%g',[3,1]);%读取受力节点信息(节点,方向,载荷)
FixNode = fscanf(fid,'%g',[2,1]);%读取固定节点信息
fclose(fid);
总体刚度矩阵的计算函数
function K = TotalStiffness_2DTRUSS(ElementMsg,NodeCoordinate)
%输入单元信息,节点坐标,输出总体刚度矩阵
Num_Node = size(NodeCoordinate,1);%计算节点数
Num_Element = size(ElementMsg,1);%计算单元数
K = zeros(2*Num_Node,2*Num_Node);%预设总体刚度矩阵
for k = 1:Num_Element
N1 = ElementMsg(k,2);%提取节点编号
N2 = ElementMsg(k,3);
x1 = NodeCoordinate(N1,2);%提取节点坐标
x2 = NodeCoordinate(N2,2);
y1 = NodeCoordinate(N1,3);
y2 = NodeCoordinate(N2,3);
L = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));%计算单元长度
C = (x2-x1)./L;%计算单元转角cos值
S = (y2-y1)./L;%计算单元转角sin值
A = ElementMsg(k,4);%提取单元截面积
E = ElementMsg(k,5);%提取单元弹性模量
Ke = E*A/L*[C*C C*S -C*C -C*S; %计算单元刚度矩阵
C*S S*S -C*S -S*S;
-C*C -C*S C*C C*S;
-C*S -S*S C*S S*S];
Locate = [2*N1-1,2*N1,2*N2-1,2*N2];%定位单元刚度矩阵坐标
%组装总体刚度矩阵K
for i = 1:4
for j = 1:4
K(Locate(i),Locate(j)) = K(Locate(i),Locate(j)) + Ke(i,j);
end
end
end
end
求解函数
Num_Node = size(NodeCoordinate,1);%计算节点数
Num_Element = size(ElementMsg,1);%计算单元数
K = TotalStiffness_2DTRUSS(ElementMsg,NodeCoordinate);%计算K
F = zeros(2*Num_Node,1);%生成力初始边界条件
F(ForceNodeMsg(1)*2-2+ForceNodeMsg(2),1) = ForceNodeMsg(3);%生成力边界条件
%用置0置1处理边界条件
Num_FixNode=size(FixNode,1);
K0 = K;
for i = 1:Num_FixNode
%非主对角线元素全为0
K(FixNode(i)*2-1,:)=0;
K(:,FixNode(i)*2-1)=0;
K(FixNode(i)*2,:)=0;
K(:,FixNode(i)*2)=0;
%主对角线元素为1
K(FixNode(i)*2-1,FixNode(i)*2-1)=1;
K(FixNode(i)*2,FixNode(i)*2)=1;
%载荷列向量本例中不动
end
U = linsolve(K,F) ;%求解控制方程
U1=U(1:2:end);%x方向位移
U2=U(2:2:end);%y方向位移
[U2_max,U2_max_Node]=max(abs(U2)); %求最大垂直位移大小及节点位置
%求解单元应力
for j = 1:Num_Element
N1 = ElementMsg(j,2);
N2 = ElementMsg(j,3);
x1 = NodeCoordinate(N1,2);
x2 = NodeCoordinate(N2,2);
y1 = NodeCoordinate(N1,3);
y2 = NodeCoordinate(N2,3);
L = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
C = (x2-x1)./L;
S = (y2-y1)./L;
Coe = [-1./L,1./L];
R = [C, S, 0, 0
0, 0, C, S];
E = ElementMsg(j,5);
u = [U(2*N1-1),U(2*N1),U(2*N2-1),U(2*N2)];
Stress(j,1) = E*Coe*R*u';
end
%求最大应力及单元位置
[Stmax,Ptmax] = max(Stress);%最大拉应力及位置
[Scmax,Pcmax] = min(Stress);%最大压应力及位置
F = K0*U;%求解载荷列向量
输出代码
NodeCoordinate_u = zeros(Num_Node,2);
for i = 1:Num_Node
NodeCoordinate_u(i,1) = NodeCoordinate(i,2) + U(2*i-1,1);
NodeCoordinate_u(i,2) = NodeCoordinate(i,3) + U(2*i,1);
end
%为邻接矩阵
A = [0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0];
gplot(A,NodeCoordinate(:,2:3),'bo-');%画变形前的图
hold on
gplot(A,NodeCoordinate_u,'ro-');%变形后的图
grid on
hold off
set(gca,'YDir','reverse','XAxisLocation','top');
title('变形图','position',[3.75,13]);
xlabel('x(m)');
ylabel('y(m)');
legend('Original shape','Deformed shape','location','best');
axis([-0.5,8,-0.5,12]);
%标记节点坐标
for i=1:Num_Node
c = num2str(i);
c = [' ',c];
text(NodeCoordinate(i,2),NodeCoordinate(i,3),c)
end
text(7.15,0.8,'U2max=0.4712m');
text(0.65,10,'Scmax');
text(-0.4,10,'Stmax');
text(3,9.5,'最大压应力 = 210MPa');
text(3,10.5,'最大拉应力 = 180MPa');
axis equal
%输出txt文件
fid = fopen('output.txt','w');
fprintf(fid,'最大垂直位移 = %f',U2_max);
fprintf(fid,'m\n');
fprintf(fid,'最大垂直位移节点 = %d\n',U2_max_Node);
fprintf(fid,'\n');
fprintf(fid,'最大压应力 = %.4f',abs(Scmax)./1e6);
fprintf(fid,'MPa\n');
fprintf(fid,'最大压应力单元 = %d\n',Pcmax);
fprintf(fid,'最大拉应力 = %.4f',Stmax./1e6);
fprintf(fid,'MPa\n');
fprintf(fid,'最大拉应力单元 = %d\n',Ptmax);
fprintf(fid,'\n');
fprintf(fid,'支点反力\n');
fprintf(fid,'节点1反力\n Fx = %gN\n Fy = %gN',F(1,1),F(2,1));
fprintf(fid,'\n节点2反力\n Fx = %gN\n Fy = %gN',F(3,1),F(4,1));
最后的结果图
输出文件信息
最大垂直位移 = 0.471171m
最大垂直位移节点 = 25
最大压应力 = 210.0000MPa
最大压应力单元 = 2
最大拉应力 = 180.0000MPa
最大拉应力单元 = 4
支点反力
节点1反力
Fx = 0N
Fy = -42000N
节点2反力
Fx = -3.21165e-10N
Fy = 36000N
代码是计算力学课后作业。
整体思路就是有限元的基本思路,网格划分、单刚计算、组装总刚、边界条件、求解
第一次分享代码,欢迎大家讨论学习