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 回答