搜索内容 搜索用户

# [已解决] 复数函数参数拟合一直失败，求指教！

 本帖最后由 植物饮料王老吉 于 2022-1-9 15:53 编辑 疑问：要用实验测得的复数数据去拟合固定复数函数的参数。函数比较复杂，涉及到伽马函数和高斯超几何函数，一共有十个参数。我写的代码如下： clear clc %读取数据w[0.00100000000000000;0.00215430000000000;0.00464140000000000;0.0100000000000000;0.0215440000000000;0.0464160000000000;0.100000001000000;0.215440005000000;0.464170009000000;1;2.15459990500000;4.64169979100000;10;20;40;70;110;222.220001200000;446.679992700000;1000;2238.69995100000;4466.79980500000;5000]; C=[4.40083300000000e-11 + 3.29280700000000e-13i;4.39838800000000e-11 + 8.86414000000000e-15i;4.39894000000000e-11 - 1.20494300000000e-14i;4.39926300000000e-11 - 1.37935400000000e-14i;4.39893800000000e-11 - 6.52385800000000e-15i;4.39895300000000e-11 - 1.04508800000000e-14i;4.39955800000000e-11 - 7.90188300000000e-15i;4.40031100000000e-11 - 6.97153100000000e-15i;4.40020400000000e-11 - 6.20998500000000e-15i;4.40022800000000e-11 - 5.71088600000000e-15i;4.40005500000000e-11 - 6.08615600000000e-15i;4.40035400000000e-11 - 6.26090500000000e-15i;4.40046200000000e-11 - 6.58770000000000e-15i;4.40016400000000e-11 - 6.87137200000000e-15i;4.39997400000000e-11 - 5.89220300000000e-15i;4.39983300000000e-11 - 7.05362300000000e-15i;4.39966700000000e-11 - 7.47371300000000e-15i;4.39937800000000e-11 - 9.46569300000000e-15i;4.39848200000000e-11 - 1.11108600000000e-14i;4.39856000000000e-11 - 1.49281000000000e-14i;4.39814700000000e-11 - 1.64368300000000e-14i;4.39943800000000e-11 - 2.23867200000000e-14i;4.39990300000000e-11 - 2.38846200000000e-14i]; uData = [real(C) imag(C)]; %设置参数初值 beta0=[0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]; %设置参数范围 lb=[0 0 0 0 0 0 0 0 0 0]; ub=[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000]; %%最小二乘拟合 [x,resnorm]= lsqcurvefit(@funcgamagauss, beta0,w,uData,lb,ub); function gamagauss1=funcgamagauss(beta0,w) %传递参数变量beta和自变量w j01=beta0(1); n1=beta0(2); m=beta0(3); Wp=beta0(4); j02=beta0(5); n2=beta0(6); p=beta0(7); Wc=beta0(8); Cwq=beta0(9); G=beta0(10); gamagauss =(0.29598E-10*(j01*gamma(1-n1)/m*gamma(1+m-n1)/(gamma(2-n1)*gamma(m))*(1+1i*w/Wp).^(n1-1).*hypergeom([1-n1,1-m],2-n1,(1+1i*w/Wp).^-1))+0.29598E-10*(j02*gamma(1-n2-p)/(gamma(1-n2)*gamma(1-p))*(1+1i*w/Wc).^(n2-1).*hypergeom([1-n2,1+p],2-n2,(1+1i*w/Wc).^-1))+Cwq-1i*G./w); gamagauss1 = [real(gamagauss) imag(gamagauss)]; end 错误的提示如图示，希望大家不吝赐教，感谢！

TouAkira 发表于 2022-1-8 23:06:58
 ①你的代码没法运行，缺少对 w 的赋值 ②命令行明确告诉你了，你的初值不行，代入进去算不出有效的函数值，这一般是计算过程中分母为零导致的，自己回去检查

3 条回复

## 倒序浏览

TouAkira 发表于 2022-1-8 23:06:58
 ①你的代码没法运行，缺少对 w 的赋值 ②命令行明确告诉你了，你的初值不行，代入进去算不出有效的函数值，这一般是计算过程中分母为零导致的，自己回去检查

 TouAkira 发表于 2022-1-8 23:06 ①你的代码没法运行，缺少对 w 的赋值 ②命令行明确告诉你了，你的初值不行，代入进去算不出有效的函数值， ... 好的，谢谢大佬！w是有数据的，我忘粘了，不好意思

## RE: 复数函数参数拟合一直失败，求指教！

 TouAkira 发表于 2022-1-8 23:06 ①你的代码没法运行，缺少对 w 的赋值 ②命令行明确告诉你了，你的初值不行，代入进去算不出有效的函数值， ... 谢谢你的帮助，我的代码已经能跑通了。其中的参数有十个，较多，基本都有明确的范围。但是改变参数的初值对终值的影响并不大，（有的参数改了初值然而终值不变），最离谱的是对于另一组x.y值，相同的参数初值得到的参数终值是一样的。请问这种情况是我的代码写的有问题还是我初值选取的不好呢？
 您需要登录后才可以回帖 登录 | 注册 本版积分规则 回帖后跳转到最后一页