簡體   English   中英

反轉 2D --> 2D 非線性 function

[英]Invert a 2D --> 2D non-linear function

如果這是在這里寫問題的一種不尋常的方式,我很抱歉,因為它的 scope 似乎很大(對我來說)。 我很高興被引導到已經完成我需要的預定義包,確實我希望(應該?)我的問題有一個標准化的解決方案。 我想知道那里是否有任何幫助? 我還在通過我正在做的一個項目學習Python,我覺得我在某些方面有點弱......

好的,這里是:我想在 python 中反轉 2D --> 2D function,但我的努力都沒有成功。

假設我在(非線性)方程組中有兩個關系,所以

a = f(x,y)

b = g(x,y)

其中 f 和 g 都是連續且可逆的,並且 x 和 y 具有一定的預定義矩形域。 a 和 b 也有自己的矩形域,但與 x 和 y 不同。

關於 f 和 g 的一些額外信息:其中一個函數將是線性的,我們稱之為 f。 因此,a = f(x,y) = q x + p y + r(其中 q、p 和 r 是已知常數)。 在 Python 術語中,我猜你會寫 a[ i, j ] = q x[ i ] + p y[ j ]。 另一個 function,g,沒有解析表達式,但看起來類似於 k sin(x) + l sin(y),因為 x 和 y 在 0 和 pi/2 之間。

此外,我希望制作 3D 表面 plot 的整體“母功能”,將 a 和 b 設為 arguments。 調用母親 function M,我們得到 M = M(a,b) = M(f(x,y),g(x,y))。 到目前為止,一切都很好。

問題的本質是我需要首先在“母網格”上選擇一對(a,b),然后找到產生這個特定(a,b)的對應對(x,y)。 但是, f 和 g 沒有任何分析上的“簡單”逆,我需要在數字上找到這些。

所以基本問題是, “給定 a[ i ] 和 b[ j ] 作為兩個排序列表,並給定用於獲取 a 和 b 的 x[ ii ] 和 y [ jj ],我如何找到兩個逆函數 x = inv1 (a,b) 和 y = inv2 (a,b)?"

PS。 我已經嘗試了通過首先選擇(x,y)對,計算暫定(A,B)對,然后將其插入到預定義的(a,b)網格中的“廉價方法”我可以。 然而,由於(x,y)網格和(a,b)網格(相當)不同,相應的“擬合錯誤”總是使最終結果呈現鋸齒狀和混亂(我有一個控制場景,我知道什么在做我自己的案例之前,最終結果應該是這樣的)。 這是因為如果有意義的話,我實際上是在將 A 和 B 的值強制到 position (a,b) 處的 M function 的高度上。 我已經嘗試對此進行平均和平滑“作弊”,但它仍然無法通過 imo。 因此,我真的需要先選擇一個 (a,b) 對,然后再找到相關的 (x,y) 對。

注意:M 函數中的一些參數直接取決於 x 和 y,因此需要知道 x 和 y 的確切值。

感謝您的附加信息。 我認為您可以直接解決此問題,然后再進行分析。

從你的最終結果開始(a, b)

首先解決a以找到您的 xy 線,例如:

a = qx + py + r
y = (qx + r - a) / -p

既然你說它是單調遞增的,為了簡單起見,我只是求解y

接下來,使用跨x的簡單二進制搜索將其插入您的非分析g

def invert(a, b):
    def get_y(x):
        return (Q * x + R - a) / -P
    
    def g_constrained(x):
        return g(x, func(x))

    x = binary_search(g_constrained, b, min_x, max_x, guess_x)
    y = get_y(x)
    return x, y

請注意,您的 function 通常不能保證有一個單一的解決方案,考慮一個看起來像弧的g平面解決方案,因為f是一條線,您可以有兩個交點。 您需要決定如何處理這些信息。


以前的擔憂

我懷疑您聲稱a = f(x,y)是連續且可逆的。

簡而言之:如果您的 function z = f(x, y)沒有與平面z = K相交於每個K的一個點,則它不是 invertible

一個詳細的例子:

考慮一些點,以及它周圍的 4 個點——為了方便起見,這里我使用(0,0)和單位長度。

z = f(0,0)

a = f(-1,0)
b = f(1,0)

p = f(0,-1)
q = f(0,1)

如果f提供一個標量值(或任何x < yy < z暗示x < z的值),那么我們就有問題了。

由於f是連續且可逆的,因此a < z < bb < z < a ,對於pq也是如此。 所以f-inv(z+)會將 map 轉換為兩個不同的值,一個在(-1, 0) -> (1, 0)行上,一個在(0, -1) -> (0, 1)行上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM