繁体   English   中英

如何使用lsqcurvefit拟合有理函数?

[英]How to use lsqcurvefit to fit a rational function?

我想使用MATLAB中的曲线拟合技术来拟合有理函数。

我正在尝试使用lsqcurvefit来再现一个有理函数M ,该函数接受5个输入,数据从精确函数C输出。 我想我快要获得剧情了。 但是,当我使用lsqcurvefit ,我不断收到错误消息:

LSQCURVEFIT要求以下输入的数据类型为double:'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

变量C应该以双精度数组形式输入,以便该函数获得输入范围并在计算中使用它。

% Exact Function C(k)- Bessel Function
C0 = (0.5*((1i*k+0.135).* (1i*k+0.651)))./((1i*k+0.0965).* (1i*k+0.4555));

x参数可以作为具有4个值的数组输入。

M = @(x,k)(0.5*((1i*k+x(1)).* (1i*k+x(2))))./((1i*k+x(3)).* (1i*k+x(4)));

x0应该有4个值。

x0 = [1,1,1,1]; 
%Find best fit curve
x = lsqcurvefit(M,x0,k,C0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM