2013-11-22 227 views
0

我需要Interp1(來自matlab的線性方法)的幫助。 問題如下:在matlab中計算線性插值時的範圍問題

我有一個向量,函數值爲fx。

f = @(xq)interp1(x, fx, xq); 
[~, x_t] = ode45(@(t,x)f(x), [0 1], 2); 

哪裏值XQ來自:

fx = 1.0e+03 * 

2.0500 
-0.0005 
-0.0005 
-0.0004 
-0.0003 
-0.0004 
-0.0005 
-0.0005 
-0.0006 
-0.0007 
-0.0008 
-0.0008 
-0.0009 
-0.0010 
-0.0011 
-0.0011 
-0.0012 
-0.0013 
-0.0013 
-0.0014 
-0.0015 
-0.0015 
-0.0016 
-0.0016 
-0.0017 
-0.0018 
-0.0018 
-0.0019 
-0.0019 
-0.0020 
-0.0020 
-0.0021 
-0.0022 
-0.0022 
-0.0023 
-0.0023 
-0.0024 
-0.0024 
-0.0025 
-0.0025 
-0.0026 
-0.0027 
-0.0027 
-0.0028 
-0.0028 
-0.0029 
-0.0029 
-0.0030 
-0.0030 
-0.0031 
-0.0031 
-0.0032 
-0.0032 
-0.0033 
-0.0033 
-0.0034 
-0.0034 
-0.0035 
-0.0035 
-0.0036 
-0.0036 
-0.0037 
-0.0037 
-0.0038 
-0.0038 
-0.0038 
-0.0039 
-0.0039 
-0.0040 
-0.0040 
-0.0041 
-0.0041 
-0.0042 
-0.0042 
-0.0043 
-0.0043 
-0.0043 
-0.0044 
-0.0044 
-0.0045 
-0.0045 
-0.0046 
-0.0046 
-0.0046 
-0.0047 
-0.0047 
-0.0048 
-0.0048 
-0.0048 
-0.0049 
-0.0049 
-0.0050 
-0.0050 
-0.0050 
-0.0051 
-0.0051 
-0.0051 
-0.0052 
-0.0052 
-0.0053 
-0.0053 
-0.0053 
-0.0054 
-0.0054 
-0.0054 
-0.0055 
-0.0055 
-0.0055 
-0.0056 
-0.0056 
-0.0056 
-0.0057 
-0.0057 
-0.0057 
-0.0057 
-0.0058 
-0.0058 
-0.0058 
-0.0059 
-0.0059 
-0.0059 
-0.0059 
-0.0060 
-0.0060 
-0.0060 
-0.0060 
-0.0061 
-0.0061 
-0.0061 
-0.0061 
-0.0062 
-0.0062 
-0.0062 
-0.0062 
-0.0062 
-0.0063 
-0.0063 
-0.0063 
-0.0063 
-0.0063 
-0.0063 
-0.0064 
-0.0064 
-0.0064 
-0.0064 
-0.0064 
-0.0064 
-0.0064 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0065 
-0.0064 
-0.0064 
-0.0064 
-0.0064 
-0.0064 
-0.0064 
-0.0064 
-0.0063 
-0.0063 
-0.0063 
-0.0063 
-0.0062 
-0.0062 
-0.0062 
-0.0062 
-0.0061 
-0.0061 
-0.0061 
-0.0061 
-0.0060 
-0.0060 
-0.0060 
-0.0059 
-0.0059 
-0.0059 
-0.0058 
-0.0058 
-0.0058 
-0.0057 
-0.0057 
-0.0056 
-0.0056 
-0.0055 
-0.0055 
-0.0054 
-0.0054 
-0.0053 
-0.0053 
-0.0052 
-0.0052 
-0.0051 
-0.0051 
-0.0050 
-0.0050 
-0.0049 
-0.0048 
-0.0048 
-0.0047 
-0.0047 
-0.0046 
-0.0045 
-0.0045 
-0.0044 
-0.0043 
-0.0042 
-0.0042 
-0.0041 
-0.0040 
-0.0039 
-0.0038 
-0.0038 
-0.0037 
-0.0036 
-0.0035 
-0.0034 
-0.0033 
-0.0032 
-0.0031 
-0.0030 
-0.0030 
-0.0029 
-0.0028 
-0.0027 
-0.0025 
-0.0024 
-0.0023 
-0.0022 
-0.0021 
-0.0020 
-0.0019 
-0.0018 
-0.0017 
-0.0015 
-0.0014 
-0.0013 
-0.0012 
-0.0010 
-0.0009 
-0.0008 
-0.0006 
-0.0005 
-0.0004 
-0.0002 
-0.0001 
0.0000 
0.0002 
0.0003 
0.0005 
0.0006 
0.0008 
0.0009 
0.0011 
0.0013 
0.0014 
0.0016 
0.0018 
0.0019 
0.0021 
0.0023 
0.0024 
0.0026 
0.0028 
0.0030 
0.0032 
0.0034 
0.0035 
0.0037 
0.0039 
0.0041 
0.0043 
0.0045 
0.0047 
0.0049 
0.0052 
0.0054 
0.0056 
0.0058 
0.0060 
0.0063 
0.0065 
0.0067 
0.0069 
0.0072 
0.0074 
0.0077 
0.0079 
0.0081 
0.0084 
0.0086 
0.0089 
0.0092 
0.0094 
0.0097 
0.0100 
0.0102 
0.0105 
0.0108 
0.0111 
0.0113 
0.0116 
0.0119 
0.0122 
0.0125 
0.0128 
0.0131 
0.0134 
0.0137 
0.0140 
0.0144 
0.0147 
0.0150 
0.0153 
0.0157 
0.0160 
0.0163 
0.0167 
0.0170 
0.0174 
0.0177 
0.0181 
0.0185 
0.0188 
0.0192 
0.0196 
0.0199 
0.0203 
0.0207 
0.0211 
0.0215 
0.0219 
0.0223 
0.0227 
0.0231 
0.0235 
0.0239 
0.0244 
0.0248 
0.0252 
0.0257 
0.0261 
0.0266 
0.0270 
0.0275 
0.0279 
0.0284 
0.0289 
0.0293 
0.0298 
0.0303 
0.0308 
0.0313 
0.0318 
0.0323 
0.0328 
0.0333 
0.0338 
0.0343 
0.0349 
0.0354 
0.0359 
0.0365 
0.0370 
0.0376 
0.0381 
0.0387 
0.0393 
0.0398 
0.0404 
0.0410 
0.0416 
0.0422 
0.0428 
0.0434 
0.0440 
0.0447 
0.0453 
0.0459 
0.0466 
0.0472 
0.0479 
0.0485 
0.0492 
0.0499 
0.0505 
0.0512 
0.0519 
0.0526 
0.0533 
0.0540 
0.0547 
0.0554 
0.0562 
0.0569 
0.0576 
0.0584 
0.0591 
0.0599 
0.0607 
0.0615 
0.0622 
0.0630 
0.0638 
0.0646 
0.0654 
0.0663 
0.0671 
0.0679 
0.0688 
0.0696 
0.0705 
0.0713 
0.0722 
0.0731 
0.0740 
0.0749 
0.0758 
0.0767 
0.0776 
0.0785 
0.0794 
0.0804 
0.0813 

我與計算插值如下之前,已經有了x軸

x = [0.00111:0.0111:5]; 

我有一些幫助的值?

解決這個ODE後,我得到了一些NaN值。我不懂爲什麼。我相信我的fx值和x值是正確的,或者可能不是?fx的值是固定的,所以我正在多次更改x的值,但沒有任何外觀。

爲什麼我會得到NaN值,我該如何解決這個問題?它在範圍之外?

我知道這不是對你們中許多人來說最有趣也是最具挑戰性的問題,但我真的很感謝你們的幫助! :)

預先感謝您!

我ODE45插值後的函數f後的結果:

x_t = 
2.0000 
1.8696 
1.7382 
1.6081 
1.4810 
1.3584 
1.2412 
1.1304 
1.0262 
0.9290 
0.8388 
0.7555 
0.6788 
0.6084 
0.5440 
0.4853 
0.4319 
0.3834 
0.3395 
0.2999 
0.2643 
0.2323 
0.2038 
0.1784 
0.1559 
0.1360 
0.1186 
0.1035 
0.0903 
0.0788 
0.0688 
0.0601 
0.0523 
0.0452 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 
    NaN 

回答

1

所以,你不必有你的插補功能手柄。 xq是要插入f值的x值。因此,舉例來說,如果你有這樣的:

x = [1 2 3]; 
fx = [0 4 8]; 

再利用線性插值,爲x==1.5正確f2(即1.512(x值)之間的一半,所以我們得到2,因爲它是在04(fx值)之間的中間值)

但是我認爲你沒有正確使用ode45。你通過它的函數需要是一個微分方程,而不僅僅是一個插值。但是一堆觀察結果不是D.E.,如果有的話,它是D.E.的解決方案。所以我認爲你可能需要重新思考你的問題,或者更好地瞭解D.E.你試圖解決或發佈更多關於它的信息。

+0

嗨@丹我非常抱歉在我的問題給出的信息缺乏!我會盡力更好地解釋我的問題。 我的FX確實是一個ODE。 通常我們寫x_dot = f(x),但在我的情況下我沒有顯式的函數f(x)。我只是有函數值(這是fx)。 我有一個測試函數x_dot(這是明確給出)和測試解決方案。我找到了一個元模型(近似於x_dot的RHS)。這個元模型是我的fx,它是x的一個ODE和離散函數,我想解決這個問題。 我希望這能澄清你的問題。我很樂意提供更多的信息是必要的。 –

+0

又一次:D我沒有一堆點,我有作爲列向量給出的函數值。 –

+0

@SergioSarmiento你能夠(理論上)用手解決這個問題嗎?我不這麼認爲......我敢肯定,你需要在功能性表單中傳遞「f」才能傳遞給ode45 ......只是看看文檔中的例子。 – Dan

1

我可以回答你的第一個問題。這是從MATLAB文檔採取:

VQ = interp1(X,V,XQ)在 特定的查詢點使用線性內插,則返回1-d功能的內插值。向量x包含 採樣點,並且v包含相應的值v(x)。 向量xq包含查詢點的座標。

'xq'中的'q'代表「查詢」。你告訴MATLAB所有功能點(x, f(x)),然後讓它告訴你什麼功能將是x = xq

所以你的句柄函數f在說,「你給我一個xq,我會給你f(xq)盡我所能使用插值」。它包裝interp1,這樣它只需要1個參數而不是3個。

至於第二個問題(NaN),您可以做以下事項並告訴我們什麼是T是什麼?

[T, x_t] = ode45(@(t,x)f(x), [1,2], 2); 
+0

嗨@rangu謝謝你的回答。我已經添加了你要求的T值。任何線索爲什麼NaN出現? –

+0

糟糕;猜測我們不需要T.我最好的猜測是,因爲'f'只在範圍'x = [0.00111,5]'中定義,所以ode45可能會在該範圍內積分。對不起,我現在不能進一步幫助。 – rangu

0

我得到了我的問題的答案。 功能fx(我說的功能,甚至認爲我有一個載體,這是因爲我有函數值)只是一個近似的ODE我的右手邊,這正好如下:

x_dot = f(x) 

哪裏f可以是矢量或標量函數,它可以是線性或非線性ODE。

fx is ~= f(x) %an approximation to the originally function. 

該效果被稱爲的f(x)元模型。這意味着fx是真實模型的簡化模型。因爲當我插fx和解決ODE這個原因:

[~, x_t] = ode45(@(t,x)f(x), [0 1], 2); 

根據初始值,一些值將位於元模型的解決方案的領域內,在這種情況下,我會得到一個真正的價值爲x_t。如果某些值超出元模型定義的範圍,我將獲得NaN。上面發生的情況。儘管如此,這些值不在元模型的範圍之內,但不在實模型的範圍之外,這意味着解決方案已經存在,但超出了我的範圍! 非常感謝我得到的答案!