【问题标题】:How to use lsqcurvefit to fit a rational function?如何使用 lsqcurvefit 拟合有理函数?
【发布时间】: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


【解决方案1】:

变量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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2016-08-03
    相关资源
    最近更新 更多