MATLAB如何为函数句柄分配索引以实现向量化计算得到TL向量
你的代码要得到TL向量只需要做两处调整即可:
- 把每次循环生成的单个TL值存入数组,不要直接覆盖变量
- 与f无关的q_2计算移到循环外,避免重复运算浪费性能
另外注意你当前的代码里rho_1、rho_2两个参数没有赋值,运行前需要补充对应参数的取值。
修改后的完整代码如下:
gamma = 1.4; R = 286; T = 273.15; c_1 = sqrt(gamma*R*T); c_2 = c_1; h = 0.00163; rho_s = 2750; M = 0; m = rho_s*h; eta = 0.01; E = 72e9; v = 0.30; D = E*h^3/(12*(1-v^2)); f_c1 = c_1^2/(2*pi)*(m/D)^0.5; f_c2 = c_2^2/(2*pi)*(m/D)^0.5; n = 1500; f = linspace(55,7700,n); % 预先初始化数组提升性能 omega = zeros(1,n); q_1 = zeros(1,n); TL = zeros(1,n); % q2和f无关,放在循环外仅计算一次 fun_2 = @(phi_1,beta) sin(phi_1).*cos(phi_1); q_2 = integral2(fun_2,12*pi/180,90*pi/180,0,2*pi); % 注意:请补充rho_1、rho_2的定义再运行 % rho_1 = 你的取值; % rho_2 = 你的取值; for i=1:numel(f) omega(i) = 2*pi*f(i); phi_2 = @(phi_1,beta) acos(c_2/c_1.*cos(phi_1).*(1+M.*cos(beta).*cos(phi_1)).^-1); tau = @(phi_1,beta) ((0.5*(rho_2*c_2/(rho_1*c_1))^0.5... +0.5*(rho_1*c_1/(rho_2*c_2))^0.5*sin(phi_2(phi_1,beta))./(sin(phi_1).*(1.0... +M*cos(beta).*cos(phi_1)))+0.5*eta*m*omega(i)*(rho_1*c_1*rho_2*c_2)... ^-0.5.*(f(i)/f_c2).^2.*sin(phi_1).*cos(phi_2(phi_1,beta)).^4).^2).^-1; fun_1 = @(phi_1,beta) tau(phi_1,beta).*sin(phi_1).*cos(phi_1); q_1(i) = integral2(fun_1,12*pi/180,90*pi/180,0,2*pi); tau_avg = q_1(i)/q_2; TL(i) = -10*log10(tau_avg); end
运行结束后,TL数组就是和f向量一一对应的结果数组。
内容的提问来源于stack exchange,提问作者Mohammad Sd
相关产品推荐
相关产品推荐

