[已解决] 怎样将输出的参数自动输入呢?

[复制链接]
上仙河神 发表于 2021-12-3 10:59:05
clc,clear
syms t
x = [0, 16.595, 27.677, 37.98, 48.586]'; % , 0.015
dx = [1.6595, 0.5541, 0.34343, 0.35353, 0.38817]'; %, 0.087
f = fittype('B/(A+2*x)+C*exp(-x/L)','independent','x','coefficients',{'A','B','C','L'});
[cfun, rsquare]=fit(x,dx,f); %根据自定义拟合函数f来拟合数据x,dx
xi=0:0.001:90;
dxi=cfun(xi);
plot(x,dx,'r*',xi,dxi,'b-');
ode=diff(x,t)==B/(A+2*x)+C*exp(-x/L);
cond=[x(0)==0,x(10)==16.595,x(30)==27.677,x(60)==37.89,x(90)==48.586,x(120)==60.231];
x(t)=dsolve(ode,cond)

以上是代码,前一步(1-9)行我打算拟合曲线,随后通过拟合得到的A,B,C,L四个参数带入到微分方程中求解微分方程,想了解一下应该如何操作呢?直接这样放代码就会一直报错,不识别A,B,C,L四个参数。

最佳答案


WarnerChang 发表于 2021-12-3 11:09:33
ode=diff(x,t)==B/(A+2*x)+C*exp(-x/L);
改为:
ode=diff(x,t)==cfun.B/(cfun.A+2*x)+cfun.C*exp(-x/cfun.L);
回复此楼

2 条回复


WarnerChang 发表于 2021-12-3 11:09:33
ode=diff(x,t)==B/(A+2*x)+C*exp(-x/L);
改为:
ode=diff(x,t)==cfun.B/(cfun.A+2*x)+cfun.C*exp(-x/cfun.L);
回复此楼

上仙河神 发表于 2021-12-3 11:19:43
WarnerChang 发表于 2021-12-3 11:09
ode=diff(x,t)==B/(A+2*x)+C*exp(-x/L);
改为:
ode=diff(x,t)==cfun.B/(cfun.A+2*x)+cfun.C*exp(-x/cfun.L ...

非常有效的指导,感谢您
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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