2017-07-04 3 views
1

以下に示すように、紙から抽出したデータセットに暗黙の方程式を当てようとしています。1つのフィッティングパラメータを使用してデータセットに暗黙の方程式をフィッティングする方法MATLAB

image from paper

データセットが半径、Rのギャップを横切って、粒子濃度、phiを含んでいます。 phiおよびRのデータを以下に示します。

phi(Ri) = phi(1); 
Ri = R(1); 
n = 2; 
phiM = 0.68 
Kc/Ku = fitting parameters. 
R = [4.47 4.59 4.69 4.81 4.92 5.02 5.13 5.24 5.35 5.46 5.57 5.68]; 
phi = [0.569 0.570 0.573 0.576 0.578 0.581 0.585 0.589 0.593 0.595 0.598 0.602]; 

提供されたデータセットに式16を当てはめようとしています。私はphiが方程式の両辺にあるデータの集合に方程式を適合させる方法について完全な喪失に瀕しています。前に式にデータを当てはめました。しかし、それは常に明示的でした(y = f(x))。

曲線フィッティングツールボックスにフィッティング式を入力しようとするたびに、式の両辺にyを設定することはできません。カーブフィッティングツールを使用できないこれらのタイプの式ではどうすればよいですか?

どのように私がこのようなフィッティングについての動きを学ぶことができるかについての助けや指導は非常に高く評価されます。

+1

は、関数 'fminsearch'を見てください。この関数は 'norm(yc-yr)'と一緒に使うことができます。ここで、ycは関数からのyの計算値、yrはフィットしたい値です。基本的に非線形最小二乗法を実行します。 –

答えて

1

は、あなたの質問に与えられたとして、あなたの既知の変数を定義することによって開始するのをしてみましょう:

% Known parameters 
R = [4.47 4.59 4.69 4.81 4.92 5.02 5.13 5.24 5.35 5.46 5.57 5.68]; 
phi = [0.569 0.570 0.573 0.576 0.578 0.581 0.585 0.589 0.593 0.595 0.598 0.602]; 
phi_Ri = phi(1); Ri = R(1); 
n = 2;   phiM = 0.68; 

今、あなたの関数を定義しますが、我々はゼロに等しい式を置くことができるように左側を引きます。この関数は、xパラメータ(R)、yパラメータ(phi)、および唯一不明のkk(16)のKu/Kcとして定義されます。

F = @(x,y,kk) ((x/Ri).^2).*((1-phi_Ri/phiM)./(1-y/phiM)).^(n*(1-kk)) - (y/phi_Ri); 

今、私たちは「最良の」値を見つけるために、kkのためのいくつかの初期の推測で、fminsearchを使用することができます。この場合、私はFのノルムをとって、の距離と計算されたxyの間の座標と、与えられた値がRphiの間であることを意味しています。関数Fは0に等しくなければならないので、最小化するのが理にかなっています!

紙における右側の図に類似している。この例では
% Min search based on norm, with initial guess KuKcMin = 1 
KuKcMin = fminsearch(@(KuKc) norm(F(R,phi,KuKc)), 1); 

KuKcMin = 1.6735のでKcを/クー= 1/1.6735 = 0.5975。

暗黙の関数をプロットするためにezplotを使用する必要があります。また、元の点をプロットします。

ezplot(@(x,y)F(x,y,KuKcMin), [4.2,6,0.56,0.61]); % 4-element array is axes limits 
hold on; 
plot(R,phi,'o'); 
xlabel('R'); ylabel('\phi'); title(''); 

出力:

output

あなたはプロットと機能Fは、上記論文でプロットを再現するパラメータnphiMKuKcMinを変更することにより、正しく動作しているかどうかを確認することができます

output 2


編集:軸はezplotへの入力として渡された範囲

見えであるだけでなく、どのような全体の描画範囲です。あなたの新しいデータは古い限界内にないので、我々は適応しなければなりません!

phi = [0.285 0.285 0.293 0.298 0.299 0.303 0.309 0.310 0.310 0.312 0.315 0.317 0.318 0.318 0.321 0.321 0.321 0.324 0.327 0.325 0.326 0.332 0.335 0.333 0.336]; 
R = [4.190 4.365 4.540 4.714 4.889 5.063 5.238 5.413 5.587 5.762 5.937 6.111 6.286 6.460 6.635 6.810 6.984 7.159 7.333 7.508 7.683 7.857 8.032 8.206 8.381]; 
phi_Ri = phi(1); Ri = R(1); n = 2; phiM = 0.68; 
F = @(x,y,kk) ((x/Ri).^2).*((1-phi_Ri/phiM)./(1-y/phiM)).^(n*(1-kk)) - (y/phi_Ri); 
KuKcMin = fminsearch(@(KuKc) norm(F(R,phi,KuKc)), 1); 
% NOTE: change the ezplot <-- axes limits --> 
ezplot(@(x,y)F(x,y,KuKcMin), [4.18,8.4,0.28,0.34]); % 4-element array is axes limits 
hold on; plot(R,phi,'o'); xlabel('R'); ylabel('\phi'); title(''); 

コードをより汎用的にするために、あなたは常にあなたのデータと同じ範囲にわたりezplotを使用することができます。パディングや丸めを追加することができます。

ezplot(@(x,y)F(x,y,KuKcMin), [min(R),max(R),min(phi),max(phi)]); 

出力:

output 3

+0

こんにちはWolfie、あなたのすべてのおかげで多くのおかげです。 Ku/Kcの値を変更する方法を理解するのにはしばらく時間がかかりました。 私は、関数がx = 6.23付近でプロットを制限するように見える理由を知っていますか? 「r」が大きい別の用紙からデータのセットを当てはめてみたので、私は尋ねます。しかし、6.23でデータフィッティングが中断しているようだ。 大変お手伝いしてくれてありがとうございます。 –

+0

私が今作業しているデータを完全に忘れてしまった。あなたがすばやく見ることができれば、本当に感謝します。 R = [4.190 \t 4.365 \t 4.540 \t 4.714 \t 4.889 \t 5.063 \t 5.238 \t 5.413 \t 5.587 \t 5.762 \t 5.937 \t 6.111 \t 6.286 \t 6.460 \t 6.635 \t 6.810 \t 6.984 \t 7.159 \t 7.333 \t 7.508 \t 7.683 \t 7.857 \t 8.032 \t 8.206 \t 8.381]; ファイ= [0.310 \t 0.310 \t 0.312 \t 0.315 \t 0.317 0.303 \t 0.309 \t \t 0.298 \t 0.299 \t 0.285 \t 0.285 \t 0.293。318 \t 0.318 \t 0.321 \t 0.321 \t 0.321 \t 0.324 \t 0.327 \t 0.325 \t 0.326 \t 0.332 \t 0.335 \t 0.333 \t 0.336]。 –

+0

こんにちはWolfie、多くのありがとう。それも問題かもしれないと思って限界を取り除こうとしました。私は限界を延長しなければならなかったようだ。どうもありがとう。 –

関連する問題