2013-08-17 35 views
0

我正在嘗試計算編輯文本框(edit1)的派生項,並在靜態文本框(text1)中顯示答案。但它只是顯示數字。我究竟做錯了什麼?MATLAB中的導數gui?

% --- Executes on button press in pushbutton1. 
function pushbutton1_Callback(hObject, eventdata, handles) 
% hObject handle to pushbutton1 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
x=-10:.1:10; 
equation = get(handles.edit1, 'String'); 
y = eval(equation); 
derive_func = diff(y); 
set(handles.text1, 'String', derive_func); 
plot(y); 

GUI Image - 正如你所看到的,它繪製的功能,但是,當它試圖區分有3條線路編號的回報:

回答

1

您所看到的重載函數的兩種不同用途之間的衝突diff。默認的內置使用是數字區分,並且您正在將該函數應用於數字變量y,以便您獲得數字輸出。

你似乎想要做的是使用diff從符號數學工具箱diplay 5*x^4並要求您告訴您要通過提供差異與正確的輸入,通常是一個字符串使用符號數學工具箱MATLAB。

我使用的是matlab R14,很多已在更新版本的sym工具箱中進行了更改,但以下內容對您適用。

str = 'x^5'; 
diff(str,'x') 

其中str是您想要象徵性地區分的表達式。請注意,在我的版本中,sym工具箱對符號x.^5不喜歡,並且更喜歡x^5,我不知道它如何在MuPad上工作,但是您可能必須找到一種解決方法,以確保您提供MuPad(或任何sym引擎你正在使用)它可以處理的字符串。對使用cdaddpath控制重載函數diff的版本

編輯

早些時候建議使用已被刪除。

+1

不要告訴人們他們需要cd到MATLAB工具箱目錄才能使用它!這是非常糟糕的編程風格。搜索路徑是有原因的。學會使用它。 – 2013-08-17 20:14:13

+0

@woodchips一些澄清會很好:您建議的替代方案是什麼。我嘗試了str2fun使用函數的完整路徑,但是在我的系統中,它並沒有像我鏈接到的答案中那樣工作。 –

+0

你需要學習在matlab中使用路徑。因此,pathtool,addpath,rmpath,savepath等 – 2013-08-17 20:51:25