MatLab - Inputdlg

时间:2014-10-25 15:55:23

标签: matlab matlab-guide

我试图用plot和inputdlg来获取图形。但是,我尝试的越多,我就越困惑:/

另外,我必须找到问题的答案:

  1. 如何在自己的情节中显示每个功能?
  2. 如何正确显示水平轴值?
  3. 这就是我试图写的:

    function Function2()
    
       while 1
    
          prompt={'Fonksiyonunuzu Giriniz:'};
          name='Grafik Çizici';
    
          func=inputdlg(prompt,name);
    
          if  isempty(func)==1
    
             prompt={'Are you sure, press y or n:'};
             a=inputdlg(prompt);
    
             if 'y' ;
                break;
             end
    
          else 
             plot(func)
    
          end
       end
    end
    

    提前感谢您的帮助和建议:)

1 个答案:

答案 0 :(得分:1)

首先,从the documentation for inputdlg开始,输出是一个单元格数组,因此您需要index it properly。例如if a{1} == 'y'

第二件事,如果我正确地解释了这个程序的目的,你将需要决定你希望输入函数的形式。如果您假设用户将输入函数字符串作为anonymous function提供,则事情会稍微容易一些。否则,您需要为func变量创建一个解析器,以正确设置要评估和绘制的函数。拥有符号也使它非常简单但我没有它所以我无法构建和测试示例。

话虽如此,我将假设输入是一个匿名函数:

function plotanonymous()

% Prompt for function to plot
funcprompt = 'Input Anonymous Function to Plot:';
funcprompttitle = 'This is a popup';
func_str = inputdlg(funcprompt, funcprompttitle); % My input will be @(x) x.^2

% Add input validation here
func_anon = str2func(func_str{1}); % Convert function from string to anonymous function

% Prompt for evaluation limits
limitprompt = {'Input Lower Limit'; 'Input Upper Limit'; 'Input Spacing Interval'};
limitprompttitle = 'This is a popup';
evallimits_str = inputdlg(limitprompt, limitprompttitle);

% Add input validation here
% Set up data to plot
evallimits_dbl = str2double(evallimits_str); % Convert to double
x = evallimits_dbl(1):evallimits_dbl(3):evallimits_dbl(2); % Set up x data
y = func_anon(x); % Evaluate input function for input x


% Plot data
% Create a handles structure so we can easily modify properties
h.myfig = figure;
h.myplot = plot(x,y);
end

现在我们需要讨论输入验证。你的例子似乎已经开始考虑这个了,但我认为它的功能并不像你想要的那样。如上所述,如果输入为空,则询问您是否确定。如果是,你试图突破while循环,如果没有你继续并绘制函数。我将try/catch loopstr2func调用一起使用,为用户提供另一个输入有效函数的机会。您还可以将用户置于while循环中,直到提供有效的输入功能。

再试一次,回答更多问题。