我试图用plot和inputdlg来获取图形。但是,我尝试的越多,我就越困惑:/
另外,我必须找到问题的答案:
这就是我试图写的:
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
提前感谢您的帮助和建议:)
答案 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 loop与str2func
调用一起使用,为用户提供另一个输入有效函数的机会。您还可以将用户置于while
循环中,直到提供有效的输入功能。
再试一次,回答更多问题。