我有一个复杂的功能,我想要适应一些真实的数据。该功能的形式为:
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的新人。
感谢。
答案 0 :(得分:1)
要在您的函数上运行lsqcurvefit,您可以先创建一个名为f.m的文件,其中包含:
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')