2016-09-23 101 views
0

我有多個陣列,你不能完全擬合曲線/方程,但我確實需要解決它們的很多值。簡化它看起來像這樣當我繪製它,但真正的有很多點:plot
所以說,我想解決的y = 22,我會怎麼做?正如你所看到的,會有三種解決方案,但我只需要最左邊的一個。 線性沒問題,但我寧願使用非線性方法。MATLAB解決陣列

我發現的唯一方法是將方程擬合到一組點並求解該方程,但方程不能準確地近似陣列。

+0

你可以給一個你的數據是什麼樣子的樣本? (數字格式,不是圖表)。 –

+0

如果你要非常準確,你總是可以適應多個方程peicewise-ly(?)並解決每個問題 –

+0

我可以使用simulink,然後在y接近22時捕獲x,但是我將如何系統地使用25個陣列需要分別解決12個y值的問題? – Bart

回答

0

該實現使用一階插值 - 如果您想要更高的準確性並且感覺合適,可以對另一個階估計器使用類似的策略。

假設data是包含在第一列x值,並在第二y值數據的數組的名稱,列通過增加或減少x值排序,你想找到的值的所有數據y = 22;

searchPoint = 22; %search for all solutions where y = 22 
matchPoints = []; %matrix containing all values of x 
for ii = 1:length(data)-1 
    if (data(ii,2)>searchPoint)&&(data(ii+1,2)<searchPoint) 
     xMatch = data(ii,1)+(searchPoint-data(ii,2))*(data(ii+1,1)-data(ii,1))/(data(ii+1,2)-data(ii,2)); %Linear interpolation to solve for xMatch 
     matchPoints = [matchPoints xMatch]; 
    elseif (data(ii,2)<searchPoint)&&(data(ii+1,2)>searchPoint) 
     xMatch = data(ii,1)+(searchPoint-data(ii,2))*(data(ii+1,1)-data(ii,1))/(data(ii+1,2)-data(ii,2)); %Linear interpolation to solve for xMatch 
     matchPoints = [matchPoints xMatch]; 
    elseif (data(ii,2)==searchPoint) %check if data(ii,2) is equal 
     matchPoints = [matchPoints data(ii,1)]; 
    end 
end 

if(data(end,2)==searchPoint) %Since ii only goes to the rest of the data 
    matchPoints = [matchPoints data(end,1)]; 
end 

這是寫SANS編譯,但邏輯是在八度測試(換句話說,對不起,如果有變量名輕微錯字,但算算應該是正確的)