2016-09-22 95 views
1

一起使用我想寫一個簡單的腳本,請求方程作爲輸入,並且我喜歡用此函數多次計算而不總是請求用戶輸入。MATLAB公式作爲用戶輸入與

我當前的腳本定義了f作爲函數句柄並執行了2次函數,所以我總是要求一個新的等式,這是不可取的。

f = @(x) input('f(x) = '); 
a = f(2); % requests user input 
b = f(3); % requests user input again 

它應該看起來更像這樣(不工作)。

func = input('f(x) = '); 
f = @(x) func; 
a = f(2); 
b = f(3); 

而這裏沒有用戶輸入來了解我想要達到的目標。

f = @(x) x^2; 
a = f(2); 
b = f(3); 

我想我找到了符號數學工具箱一個解決方案,但我沒有這個插件,所以我不能使用/測試。

有沒有另一種解決方案?

回答

4

這裏沒有必要使用符號數學工具箱。您仍然可以使用input。請記住,input的默認方法是直接接受輸入,並根據MATLAB規則將輸入分配爲變量,其中輸入假定爲語法正確。這不是你想要的。你會希望使用's'選項作爲第二個參數把輸入的字符串然後使用str2func將字符串轉換成一個匿名函數:

func = input('f(x) = ', 's'); 
f = str2func(['@(x) ' func]); 
a = f(2); 
b = f(3); 

注意到,我不得不以連接@(x)匿名函數字符串與您提供的輸入函數input

示例執行

比方說,我想創建一個功能方塊輸入的每一個元素:

>> func = input('f(x) = ', 's'); 
f(x) = x.^2 
>> f = str2func(['@(x) ' func]) 

f = 

    @(x)x.^2 

>> a = f(2) 

a = 

    4 

>> b = f(3) 

b = 

    9 

請特別注意,我假定該函數將元素方面方各要素在輸入中。指數運算符前面的.運算符(即^)非常重要。