[已解决] 复数函数参数拟合一直失败,求指教!

[复制链接]
植物饮料王老吉 发表于 2022-1-8 16:50:03
本帖最后由 植物饮料王老吉 于 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 的赋值
②命令行明确告诉你了,你的初值不行,代入进去算不出有效的函数值,这一般是计算过程中分母为零导致的,自己回去检查
回复此楼

植物饮料王老吉 发表于 2022-1-9 10:51:04
TouAkira 发表于 2022-1-8 23:06
①你的代码没法运行,缺少对 w 的赋值
②命令行明确告诉你了,你的初值不行,代入进去算不出有效的函数值, ...

好的,谢谢大佬!w是有数据的,我忘粘了,不好意思

植物饮料王老吉 发表于 2022-1-13 20:01:58

RE: 复数函数参数拟合一直失败,求指教!

TouAkira 发表于 2022-1-8 23:06
①你的代码没法运行,缺少对 w 的赋值
②命令行明确告诉你了,你的初值不行,代入进去算不出有效的函数值, ...

谢谢你的帮助,我的代码已经能跑通了。其中的参数有十个,较多,基本都有明确的范围。但是改变参数的初值对终值的影响并不大,(有的参数改了初值然而终值不变),最离谱的是对于另一组x.y值,相同的参数初值得到的参数终值是一样的。请问这种情况是我的代码写的有问题还是我初值选取的不好呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表