0

実際のデータに合わせたい複雑な関数があります。関数の形式は次のとおりです。

Y = -2*imag((A-B)/(A+2*B)) ...................(1)

どこ

「imag」は式の虚部を意味します
A = a - (b/X)*1i .................................(2)
B = c - (d/X)*1i ................. ....(3)

Y には、虚部と実部の両方があります。しかし、私の問題に関連するのは虚数部です。式 (1) を実際の実験データに当てはめて、a、b、c、および d の値を導き出すにはどうすればよいですか? 「lsqcurvefit」を使用しようとしましたが、入力したのと同じ開始値を返し続けます! 私は何か重要なものを逃したに違いないと確信しています。

私はまだMATLABに慣れていないので、回答をできるだけ単純化してください。

ありがとう。

4

1 に答える 1

1

関数で lsqcurvefit を実行するには、最初に以下を含む fm というファイルを作成します。

function Y = f(params,X)

a = params(1);
b = params(2);
c = params(3);
d = params(4);

A = a - ((b ./ X) .* 1i);
B = c - ((d ./ X) .* 1i);

Y = 2 .* imag((A - B)./(A + 2*B));

次に、この関数に対して lsqcurvefit を呼び出し、結果をプロットします。

startParams = [1, 2, 3, 4];
x = 1:100;
y = f(startParams, x);
fitParams = lsqcurvefit(@f, startParams+1, x, y)

yFit = f(fitParams, x);
plot(x, y, 'b*')
hold on
plot(X, yFit, 'r')
legend('data','fit')
于 2013-03-13T22:39:20.577 に答える