matlab复数曲线拟合,lsqcurvefit拟合结果为复数

在利用lsqcurvefit拟合的时候,结果为复数,该如何处理啊,请各位帮忙指点,谢谢。

函数如下:

F=(1/a(3))*log((xdata-a(1))/a(2));

xdata=[0.1115        0.1296        0.1373        0.0479        0.0805        0.2471        0.1343        0.1374        0.081        0.2002        0.2097        0.1599        0.1672        0.1462        0.0953        0.2724        0.1592        0.1101        0.3872        0.3636        0.2448        0.2723        0.2834        0.1731        0.1267        0.269        0.2062        0.189        0.1597        0.2125        0.2263        0.1906        0.1508        0.1001        0.1299        0.0832        0.1429        0.125        0.1453        0.1795        0.1117        0.224        0.1565        0.1405        0.1186        0.1022        0.0471        0.0566        0.0902        0.0928        0.0633        0.1396        0.1377        0.0972

ydata=[2.3636        1.9532        1.4644        2.2588        1.2472        1.3984        1.3424        1.5188        2.04        0.9012        1.9876        1.8112        1.4568        1.6352        2.2992        2.2424        1.0076        1.5868        1.3424        1.444        1.2724        1.23        1.1708        1.406        1.7036        1.7836        1.9828        1.4312        1.6816        1.9804        1.9956        1.7588        1.7568        1.4052        1.4244        1.7836        1.4448        1.7336        1.48        1.1524        1.6908        2.2236        1.7244        1.9692        2.248        1.6464        1.8808        1.1412        1.9496        0.87025        2.1448        1.3304        1.7464        1.7112

拟合出来的结果均为复数,该如何修正啊

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中的lsqcurvefit函数可以用来进行曲线。该函数的调用格式为: ```matlab [x,resnorm,residual,exitflag,output,lambda,jacobian] = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options) ``` 其中,各参数的含义如下: - `fun`: 自定义的函数句柄,用于计算曲线与实际数据之间的误差。 - `x0`: 参数的初始值。 - `xdata`: 自变量数据。 - `ydata`: 因变量数据。 - `lb`和`ub`: 参数的下限和上限。 - `options`: 用于指定优化算法的选项。 函数的返回值包括: - `x`: 参数的最优值。 - `resnorm`: 残差平方和。 - `residual`: 残差向量。 - `exitflag`: 表示优化是否收敛的标志。 - `output`: 优化过程的输出信息。 - `lambda`: 拉格朗日乘子。 - `jacobian`: 残差向量的雅可比矩阵。 下面以一个示例说明如何使用lsqcurvefit进行曲线。 假设有如下数据: ```matlab x = [0.1 0.2 0.4 0.6 0.9 1.3 1.5 1.7 1.8 2.0]; y = [0.75 1.25 1.45 1.35 0.95 0.35 -0.15 -0.35 -0.45 -0.5]; ``` 我们要用一个指数函数这些数据,函数形式为: ```matlab f(x) = a*exp(b*x) ``` 其中,`a`和`b`是参数。 首先,我们需要定义函数句柄: ```matlab fun = @(x,xdata) x(1)*exp(x(2)*xdata); ``` 然后,设置初始值和参数范围: ```matlab x0 = [1 -1]; lb = [-Inf -Inf]; ub = [Inf Inf]; ``` 调用lsqcurvefit进行: ```matlab [x,resnorm,residual,exitflag,output,lambda,jacobian] = lsqcurvefit(fun,x0,x,y,lb,ub); ``` 最后,可视化结果: ```matlab plot(x,y,'o'); hold on; xdata = 0:0.01:2.1; plot(xdata,fun(x,xdata)); ``` 通过调节参数范围和优化选项,我们可以得到更好的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值