Matlab:将用户输入存储到数组中以进行重复计算

Matlab: Storing user input into arrays for calculating repeatedly

我正在编写一个 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 次。任何帮助将不胜感激,如果需要澄清,请询问。

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

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

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

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

在循环结束时,您可以添加第三个 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