は、あなたの質問に与えられたとして、あなたの既知の変数を定義することによって開始するのをしてみましょう:
% 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
のノルムをとって、の距離と計算されたx
とy
の間の座標と、与えられた値がR
とphi
の間であることを意味しています。関数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](https://i.stack.imgur.com/R381s.png)
あなたはプロットと機能F
は、上記論文でプロットを再現するパラメータn
、phiM
とKuKcMin
を変更することにより、正しく動作しているかどうかを確認することができます
![output 2](https://i.stack.imgur.com/6TjR1.png)
編集:軸は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](https://i.stack.imgur.com/WVyPQ.png)
は、関数 'fminsearch'を見てください。この関数は 'norm(yc-yr)'と一緒に使うことができます。ここで、ycは関数からのyの計算値、yrはフィットしたい値です。基本的に非線形最小二乗法を実行します。 –