【发布时间】:2018-06-12 21:18:47
【问题描述】:
我想使用 MATLAB 中的曲线拟合技术来拟合有理函数。
我正在尝试使用 lsqcurvefit 重现一个有理函数 M,它需要 5 个输入,数据从精确函数 C 输出。我想我已经接近获得情节了;但是,当我使用lsqcurvefit 时,我不断收到错误消息:
LSQCURVEFIT 要求以下输入为双精度数据类型:'YDATA'。
下面是我的代码:
% Define range for k
k= linspace(1E-10,1.5,100);
% Exact Function C(k)
C= @(k)(0.5*((1i*k+0.135).* (1i*k+0.651)))./((1i*k+0.0965).* (1i*k+0.4555));
% Cget function used to extract real and imaginary numbers and stacks the result
Cget= @(k)[real(C(k)); imag(C(k))];
%Call function Cget(k) to get stacked real and imaginary values
realimag =Cget(k);
% Create an initial guess
x0=[1,1];
% Define parameters
a1=0.2; a2=0.7; b1=0.1; b2=0.5;
% Define approximated function
M= @(a1,a2,b1,b2,k)(0.5*((1i*k+a1).* (1i*k+a2)))./((1i*k+b1).* (1i*k+b2));
Mget1= @(a1,a2,b1,b2,k)[real(M(a1,a2,b1,b2,k)); imag(M(a1,a2,b1,b2,k))];
T=Mget1(a1,a2,b1,b2,k);
%Find best fit curve
x=lsqcurvefit(M,x0,k,C)
给定确切的功能C,我如何才能重现M?
【问题讨论】:
-
YData 在你的情况下是
C。应该是double。你有它作为一个匿名函数。 -
双倍是什么意思?这是我不明白的部分......
-
双数据类型
-
@SardarUsama 你有什么建议可以解决这个问题吗?
-
如果有人回答,请不要删除您的问题。我知道系统允许你(在某些情况下),但它被认为对努力回答的人很粗鲁。如果您不想再让您的帐户与此帖子相关联,您可以填写联系表格,然后版主可以断开它。
标签: matlab curve-fitting