2012-07-19 54 views
2

我有XY數據的2列中的data.txt這樣的:定義函數作爲x的內插,Y數據

0 0 
1 1 
2 4 
3 9 
4 16 
5 25 

現在我要定義一個函數f(x),其中x是第一列和f(x)是第二列,然後可以打印這個功能的價值,像這樣:

f(2) 

應該給我4

如何實現這一目標?

回答

3

假設你想爲你作爲參考的那些之間的數字一定的返回值,可以使用線性插值:

function y= linearLut(x) 
     xl = [0 1 2 3 4 5]; 
     yl = [0 1 4 9 16 25]; 
     y = interp1(xl,yl,x); 
    end 

功能的更寬泛的版本可能是:

function y= linearLut(xl,yl,x) 
     y = interp1(xl,yl,x); 
    end 

然後您可以使用匿名函數創建特定實例:

f = @(x)(linearLut([0 1 2 3 4],[0 1 4 9 16],x)); 
    f(4); 
+0

上面一個是何許我想要的東西,但是當我嘗試它時,它給了我一個錯誤: ||的操作數。和&&操作符必須可以轉換爲邏輯標量值。 interp錯誤(第44行) if l <1 || r <1 ||截止點<= 0 || cutl> 1 error2> linearlut(line 10) y = interp(xl,yl,x); test2(第3行)中的錯誤 linearlut(1) – Eddy 2012-07-19 10:55:04

+0

如果我嘗試通用版本 – Eddy 2012-07-19 10:57:05

+0

Aha,也會發生同樣的錯誤,通過用'interp1'替換'interp'來修復它。更新答案,我會將其標記爲已接受,謝謝 – Eddy 2012-07-19 11:06:04

0

您可以使用textread()導入文件,然後使用find以選擇正確的行。

從我腦袋未經測試的和:

function y = findinfile(x) 
    m = textread(data.txt) 
    ind = find(m(:,1)==x) 
    y = m(ind,2) 
end 
0

如果你只需要在陣列(無插值)中找到正確的值,你可以使用:

function out=ff(b) 
    a = [0 1 2 3 4 5 ; 3 4 5 6 7 8]'; 
    [c,d]=find(a(:,1)==b); 
    out = a(c,2); 
相關問題