2011-02-12 58 views
2

點函數f我有值多項式內插在使用Java

x = 0 => y = 0 
x = 1 => y = 1 
x = 3 => y = 27 
x = 4 => y = 64 

我想用JAVA創建函數x^3創建一個多項式函數。程序應該創建函數並顯示它,如果我給出任何值,它應該計算插值。我創建了一個只使用Aitken生成值的函數,但它不產生函數,而且很難理解如何執行該函數。因爲我不知道如何把X值作爲X在Java程序中。

+0

「我創建了一個只產生值的函數......」 - 這是什麼意思?這是否意味着你有係數? 「程序應該創建該功能並顯示它。」 - 這是什麼意思?你的程序需要繪製它? – anon 2011-02-12 04:06:52

+0

不,我需要的是由java函數生成的函數x^3。所以程序的輸出是x^3 – 2011-02-12 04:43:52

+0

我的程序輸入是double xi [] = {-15,0,15,30,};雙fi [] = {-0。24913878,0,0.221456693,0.415231299};任何數組。所以程序應該產生相關的多項式函數。 – 2011-02-12 04:50:32

回答

0

我具有值x = 0 => Y = 0,X = 1 => Y = 1×= 2 => Y = 27 X = 3 => Y = 64

這是一個奇數的方式來列表點。

太糟糕了,他們不是y = x^3的一部分。它們是:

(x,y)= {(0,0),(1,1),(2,8),(3,27),(4,64),(5,125)。 ..}

更新:

我會用不同的方式說出你的問題。你的「示例」一組點是不正確的和誤導的。這聽起來像是你真的在說:「我有一組隨意的點,我想爲它們裝上一個功能。」

如果您知道您需要的函數形式,則問題僅僅是計算未知係數。如果你有多少點可以解決他們(如果有解決方案)。如果你有更多的分數比係數,你可以做最小二乘擬合。

但是,這一切都取決於事先知道你想要什麼功能。

要求計算機爲您找出最佳形式和係數值是一項艱鉅的任務。

你當然可以在點之間使用拉格朗日插值,但它仍然可能不是告訴你什麼是「最好」的函數來表示你的點。它採用多項式形式,所以在其他函數中混合不是該方法的一部分。它可以給你一個非常好的代表sin(x),但它不會出來告訴你,正弦函數比多項式近似更容易理解。

1

假設你有4對(x,y)點。考慮方程a0 + a1 * x + a2 * x^2 + a3 * x^3 = y。放4對(x,y),你有4個線性方程組成4個變量。使用矩陣解算器或編寫自己的解決方案(a0 ... a3)。現在你可以有一個方法內插(double x){return a0 * x + a1 * x * x + a2 * x^2 + a3 * x^3; }。希望有所幫助。

2

我和你有同樣的問題,最後得到了解決辦法。 只需看看Apache commons數學API。您可以使用拉格朗日或牛頓法來計算每個多項式的係數。

您可以下載API here的.jar文件和文檔here