代码之家  ›  专栏  ›  技术社区  ›  Rick T

倍频程/matlab方程从二维到三维的转换

  •  0
  • Rick T  · 技术社区  · 7 年前

    将二维代码/绘图转换为三维代码/绘图。

    Formula image

    %---2D working code    
    clear all,clf reset,tic,clc, close all, 
        S=[15.3039,10.3612,7.9153,6.3793,5.3019,4.4955,3.8656,3.3584,2.9405,2.5903,2.2926,2.0367,1.8146,1.6204,1.4496,1.2983,1.1638,1.04377,.93622,.83959,.75256,.67401,.603,.53871,.48045,.42762,.37969,.33619,.29673,.26094,.22852,.19917,.17265,.14874,.12722,.10791,.090664,.075316,.061733,.049793,.039383,.030399,.0227475,.0163414,.0111008,.0069525,.0038286,.0016664,.0004081];
        x = linspace(0,1,100);
        T = 1.12;
        for bb = 1:length(S)
          y1=exp(log(1-x.^(S(1,bb)*T))/(S(1,bb)*T)); %right to left top to bottom
          hold on
          plot(x,y1,'r')
        end
    

    2D correct plot of equation

    我尝试使用网格网格的代码,但它不是三维的,曲线图案也不再存在。

    %---3D non-working code
    clear all,clf reset,tic,clc, close all, 
        S=[15.3039,10.3612,7.9153,6.3793,5.3019,4.4955,3.8656,3.3584,2.9405,2.5903,2.2926,2.0367,1.8146,1.6204,1.4496,1.2983,1.1638,1.04377,.93622,.83959,.75256,.67401,.603,.53871,.48045,.42762,.37969,.33619,.29673,.26094,.22852,.19917,.17265,.14874,.12722,.10791,.090664,.075316,.061733,.049793,.039383,.030399,.0227475,.0163414,.0111008,.0069525,.0038286,.0016664,.0004081];
        x = linspace(0,1,10);
        T = 1.12;
        [SS,xx]=meshgrid(S,x); %create meshgrid data
    
        for bb = 1:length(S)
          z=exp(log(1-xx.^(SS*T))/(SS*T)); %right to left top to bottom
          hold on
          plot(xx,SS,z,'r')
        end
    

    生成错误的3D图像代码 enter image description here

    0 回复  |  直到 7 年前
        1
  •  1
  •   am304    7 年前

    我建议用 surf

    y1 = zeros(length(x),length(S));
    for ii = 1:length(x)
       for jj = 1:length(S)
          y1(ii,jj) = exp(log(1-x(ii)^(S(jj)*T))/(S(jj)*T));
       end
    end
    surf(S,x,y1,'faceColor','interp','linestyle','none')
    

    它给出了:

    enter image description here