MATLAB |如何使用存在的结果?

时间:2014-01-24 12:43:13

标签: matlab

我正在做一个基本的MATLAB在线课程,在最后一个作业的一部分,我需要“根据用户输入从表达式创建折线图”。

我的解释是用户应该能够输入表达式f(x)= ...,例如:

3x^2+3x+c
  • 我已经成功编写了代码,要求用户提供变量数量(x:s之前的数字)和指数以及是否存在常量。
  • 此外,我的代码然后根据用户输入(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

1 个答案:

答案 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