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
我正在编写一个 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