matlab单个三角脉冲傅里叶变换代码

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');

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7515029
  • 这篇博客你也可以参考下:【元胞自动机】基于matlab元胞自动机甲板火灾下人群疏散【含Matlab源码 1291期】
  • 同时,你还可以查看手册:matlab 创建全部为 1 的数组 ones 中的内容
  • 除此之外, 这篇博客: Matlab 二维杆单元有限元模型编程求解代码中的 Matlab 二维杆单元有限元模型编程求解代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述
    信息: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

    代码是计算力学课后作业。
    整体思路就是有限元的基本思路,网格划分、单刚计算、组装总刚、边界条件、求解
    第一次分享代码,欢迎大家讨论学习

  • 您还可以看一下 硬核野生技术咨询客服小李老师的二十八天精通matlab基础编程课程中的 精通matlab绘图小节, 巩固相关知识点