【问题标题】:Matlab: Storing user input into arrays for calculating repeatedlyMatlab:将用户输入存储到数组中以重复计算
【发布时间】:2020-11-30 02:31:34
【问题描述】:

我正在编写一个 MATLAB 程序来求解正 z 和负 z 行波 多区域问题。用户选择层数为N,并假设 特征参数为 ei ; , µi 和 oi 在第 i 个区域。频率 f 和 N层的厚度di也是输入数据的一部分 程序。

我在为每个单独的数组(区域)存储来自用户 e、u、o 和 d 的 4 个变量输入时遇到问题,将它们存储到 N 个(3 到 5,最小到最大)数组中,然后计算来自变量输入的 N 次。

c=3*10^8;
u0 = 4*pi*10^-7;
e0 = (36*pi)^-1*10^-9;

% Source parameters --------------------------
prompt = 'Enter number of regions (from 3 to 5)';
N = input(prompt)
prompt = 'Enter the frequency (in Hz) of the incident electric field';
f = input(prompt)
w = 2*pi*f;

% Region example parameters. Region starts from 1 to N -----------------

prompt = 'Enter region %d dielectric epsilon', i; 
e = input(prompt)*e0 % region i epsilon dielectric

prompt = 'Enter region %d permeability mew', i;
u = input(prompt)*u0 % region i permeability mew

prompt = 'Enter region %d conductivity sigma', i;
o = input(prompt) % region i conductivity sigma

B = w*sqrt(u*e); % region i beta propagation constant
L = 2*pi/B; % region i lambda

prompt = 'Enter region %d thickness d (between 0 & 1/2)', i;
d = L*input(prompt) % region i thickness of dielectric material d

a = (w*sqrt(u*e)/sqrt(2))*sqrt(sqrt(1+(o/(w*e))^2)-1); % region i alpha
N = sqrt(u/(e-j*(o/(w) ) )) % region i intrinsic Impedance
Y = a+j*B; % region i gamma

% ---------------------------------------------------------------------

我被困在重复第 i 个区域的用户输入提示 N 次,然后将每个变量输入存储到一个数组中。我也相信我需要一个条件循环来重复输入提示,从 1 开始最多 N 次。任何帮助将不胜感激,如果需要澄清,请询问。

【问题讨论】:

    标签: arrays matlab loops user-input calculation


    【解决方案1】:

    如果我理解您的问题,您可以使用:

    • while 循环获取第一个输入 N 并检查其有效性(即:不断询问输入是否不在预期范围内)
    • for 循环遍历 N 区域

    要实现第二个循环,您可以简单地将用于获取其他输入值并将中间值计算为数组的标量变量进行转换。

    这还允许您记录所有值(输入、中间变量、输出)。

    在循环结束时,您可以添加第三个for 循环来打印结果。

    一个可能的实现可能是:

    c=3*10^8;
    u0 = 4*pi*10^-7;
    e0 = (36*pi)^-1*10^-9;
    
    % Source parameters --------------------------
    %
    % Check for input validity
    %
    go_ahead=0;
    %
    % Continue asking if not valid
    %
    while(~go_ahead)
       prompt = 'Enter number of regions (from 3 to 5)';
       %N_reg = input(prompt)
       N_reg = input(prompt)
       if(N_reg>=3 && N_reg<=5)
          go_ahead=1;
       end
    end
    
    %
    % Loop over the number of regioins
    %
    for reg_idx=1:N_reg
       fprintf('*****************\nProcessing N_reg= %d\n*****************\n',reg_idx)
       prompt = 'Enter the frequency (in Hz) of the incident electric field';
       f(reg_idx) = input(prompt)
       w(reg_idx) = 2*pi*f(reg_idx);
    
       % Region example parameters. Region starts from 1 to N -----------------
    
       prompt = 'Enter region %d dielectric epsilon', i; 
       e(reg_idx) = input(prompt)*e0 % region i epsilon dielectric
    
       prompt = 'Enter region %d permeability mew', i;
       u(reg_idx) = input(prompt)*u0 % region i permeability mew
    
       prompt = 'Enter region %d conductivity sigma', i;
       o(reg_idx) = input(prompt) % region i conductivity sigma
    
       B(reg_idx) = w(reg_idx)*sqrt(u(reg_idx)*e(reg_idx)); % region i beta propagation constant
       L(reg_idx) = 2*pi/B(reg_idx); % region i lambda
    
       prompt = 'Enter region %d thickness d (between 0 & 1/2)', i;
       d(reg_idx) = L(reg_idx)*input(prompt) % region i thickness of dielectric material d
    
       a(N_reg) = (w(reg_idx)*sqrt(u(reg_idx)*e(reg_idx))/sqrt(2))*sqrt(sqrt(1+(o(reg_idx)/(w(reg_idx)*e(reg_idx)))^2)-1); % region i alpha
       N(reg_idx) = sqrt(u(reg_idx)/(e(reg_idx)-j*(o(reg_idx)/(w(reg_idx)) ) )); % region i intrinsic Impedance
       Y(reg_idx) = a(reg_idx)+j*B(reg_idx); % region i gamma
    end
    
    %
    % Print output
    %
    for reg_idx=1:N_reg
       fprintf('\n*************\nRegion #%d\n*************\n',reg_idx)
       fprintf('Frequency=%f\ndielectric epsilon=%f+%fi\npermeability mew=%f+%fi\nconductivity sigma=%f+%fi\nthickness d=%f+%fi\n',real(f(reg_idx)),imag(f(reg_idx)),real(e(reg_idx)),imag(e(reg_idx)),real(u(reg_idx)),imag(u(reg_idx)),real(o(reg_idx)),imag(o(reg_idx)),real(d(reg_idx)),imag(d(reg_idx)))
       fprintf('\n==> a=%f+%fi\n==> N=%f+%fi\n==> Y=%f+%fi\n',real(a(reg_idx)),imag(a(reg_idx)),real(N(reg_idx)),imag(N(reg_idx)),real(Y(reg_idx)),imag(Y(reg_idx)))
    end
    

    【讨论】:

      猜你喜欢
      • 2018-03-22
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-22
      相关资源
      最近更新 更多