我正在做一个基本的MATLAB在线课程,在最后一个作业的一部分,我需要“根据用户输入从表达式创建折线图”。
我的解释是用户应该能够输入表达式f(x)= ...,例如:
3x^2+3x+c
input
:string - > genvarname
)生成变量,然后通过eval
从用户输入中为其分配正确的值命令/功能。for
循环并使用exist
来确定变量是否存在。我现在的问题是,如何在exist
循环中使用if
(例如= 1)的结果来访问变量并将其存储在矢量中。
这样我相信我可以用另一个for循环计算y的值。 x值只是x = -50:1:50
,但如果有任何关于如何计算y的建议,请告诉我。
我从阅读StackOverflow帖子中获得了大量信息,我希望我的问题是相关的,也是有帮助的。 :)
编辑:
%% Initial questions
IN = input('Give foo: [på formen A1x^a1+A2x^a2...Nx^n+KONST] ','s');
if isempty(IN)
IN = '3x^2+4x+2';
end
disp(['Du vill plotta ' IN]);
vars_qty = input('Hur många variabler har du? ');
if isempty(vars_qty)
vars_qty = 2;
end
exps_qty = vars_qty;
const = input('Har du en konstant på slutet? [Ja/Nej] ','s');
if isempty(const)
const = 'Ja';
end
disp(' ');
%vars_vector_name = cell(vars_qty, 1); % cell array with variable names
vars_vector_vals = zeros(vars_qty, 1); % vector with variable values
%exps_vector_name = cell(exps_qty, 1); % cell array with exponent names
exps_vector_vals = zeros(exps_qty, 1); % vector with exponent values
%% Assigning vectors
x = -50:1:50; % x vector
A = zeros(vars_qty, 1);
a = zeros(vars_qty, 1);
%% Assigning variable and exponent names + create variables and set a value to it
for i = 1:vars_qty
disp(['Variabel ' num2str(i) ':']);
% vars_vector_name(i, 1) = cellstr(input('Var god och namnge variabeln [A1,B..] ', 's')); %
... does not like an empty input
var = input('Var god och namnge variabeln [A1,A2...An] ', 's');
% if isempty(var)
% var = ['A',num2str(i)];
% end
vars_vector_vals(i, 1) = input('Vad är värdet på variabeln? '); %
... does not like an empty input
% if isempty(vars_vector_vals(i, 1))
% vars_vector_vals(i, 1) = i;
% end
vars_gen = genvarname( var );
eval([ var '= vars_vector_vals(i, 1);' ]);
vars_exist = exist( ['A',num2str(i)], 'var'); % isvarname( num2str(vars_gen) ); % num2str(vars_gen)
if vars_exist == 1
disp('Exist!');
% A(i, 1) = vars_gen;
% A(i, 1) = eval([ var '= vars_vector_vals(i, 1);' ]);
else
...
end
disp(['Exponent ' num2str(i) ':']);
exps = input('Var god och namnge exponenten [a1,a2...an & a2<a1] ', 's');
% if isempty(exps)
% exp = ['a',num2str(i)];
% end
exps_vector_vals(i, 1) = input('Vad är värdet på exponenten? '); %
... does not like an empty input
% if isempty(exps_vector_vals(i, 1))
% exps_vector_vals(i, 1) = i;
% end
exps_gen = genvarname( exps );
eval([ exps '= exps_vector_vals(i, 1);' ]);
exps_exist = exist( ['a',num2str(i)], 'var'); % isvarname( num2str(exps_gen) ); % num2str(exps_gen)
if exps_exist == 1
disp('Exist!');
% a(i, 1) = exps_gen;
% a(i, 1) = eval([ exps '= exps_vector_vals(i, 1);' ]);
else
...
end
end
% exps_vector_name(j, 1) = cellstr(input('Var god och namnge exponenten [a,b.. & b<a] ', 's')); %
... does not like an empty input
if strcmp(const,'Ja')
disp(' ');
const_scalar = input('Vad är värdet på konstanten? '); % scalar with constant
else
const_scalar = 0;
end
%gen_vars = genvarname({ (vars_vector_name(:,1)) });
%gen_exps = genvarname({ (exps_vector_name(:,1)) });
%eval([ gen_vars '= vars_vector_vals(:,1);' ]); % doesn't like a cell array
%eval([ gen_exps '= exps_vector_vals(:,1);' ]); % doesn't like a cell array
y = zeros(vars_qty, 1);
% for k = 1:vars_qty
% y(k, 1) =
% end
答案 0 :(得分:1)
MATLAB的EXIST命令使用起来有点棘手,因为它检查了很多东西。以下是我写这个的方法:
userVarName = ...
if exist(userVarName, 'var') == 1 % Return value 1 indicates a variable.
varValue = eval(userVarName);
else
error('Variable "%s" does not exist.', userVarName);
end
修改的 看起来您的代码的相关部分需要像这样进行调整:
vars_name = ['A', num2str(j)];
if exist(vars_name, 'var') == 1
A(j, 1) = eval(vars_name);
end