2016-09-23 9 views
0

カーブと方程式にはあまり合わない複数の配列がありますが、それらを多くの値で解く必要があります。私はそれをプロットするときに簡略化されていますが、実際のものはさらに多くのポイントを持っています:plot
y = 22のために解決したいと思います。あなたが見ることができるように、これには3つの解決策がありますが、私は最も左のものだけが必要です。 リニアは大丈夫​​ですが、私はむしろ私たちに非線形の方法を使います。MATLAB解法配列

私が見つけた唯一の方法は、点の集合に方程式を当てはめてその方程式を解くことですが、方程式は正確に配列を正確に近似することはできません。

+0

あなたが与えることができますあなたのデータがどのように見えるのか? (グラフではなく数値形式)。 –

+0

非常に正確ではない場合は、複数の方程式に適合することができます(?)とそれぞれを解く –

+0

simulinkを使用してyが22に近いときにxをキャプチャできますが、25アレイそれはそれぞれ12のy値のために解かれる必要がありますか? – Bart

答えて

0

この実装では一次補間を使用しています。精度を高め、適切であると思われる場合は、別の次数推定に同様の戦略を使用できます。 dataを想定し

は列が増加またはxの値を減少させることによってソートされ、最初の列にx値と第二中y値を持つデータを含むあなたの配列の名前であり、そしてあなたは、値で、すべてのデータを探していました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 

これはサンセリフコンパイラ書かれていたが、ロジックがオクターブで試験した(つまり、そこに変数名のわずかなタイプミスだが、数学が正しいかどう申し訳ありません)