You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB如何为函数句柄分配索引以实现向量化计算得到TL向量

你的代码要得到TL向量只需要做两处调整即可:

  1. 把每次循环生成的单个TL值存入数组,不要直接覆盖变量
  2. 与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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:06:04