微分方程式:

x'=dx/dt=a*0.0321*(b-x)-d*x-dy/dt,

y'= dy/dt=0.25*p1*exp(-p1*t)*x ,

四个待求参数:a、b、d、p1

t、x、y数据见下面:

//0 0 0  //这是初值

0,0,0,

0.1,0.486966799,0.048018378,

0.167,1.6657,0.05823,

0.2,0.860306078,0.060834243,

0.3,1.156255213,0.064254733,

0.4,1.390856542,0.065167644,

0.5,1.67518,0.06638,

0.6,1.724247244,0.065476325,

0.7,1.841108525,0.065493681,

0.8,1.93374543,0.065498314,

0.9,2.007179471,0.06549955,

1,1.92438,0.05641,

1.1,2.111536196,0.065499968,

1.2,2.148115682,0.065499991,

1.3,2.177112544,0.065499998,

1.4,2.200098596,0.065499999,

1.5,2.218319829,0.0655,

1.6,2.232763952,0.0655,

1.7,2.244213928,0.0655,

1.8,2.253290418,0.0655,

1.9,2.260485427,0.0655,

2,2.16156,0.07359,

2.1,2.270710216,0.0655,

2.2,2.274294246,0.0655,

2.3,2.277135335,0.0655,

2.4,2.27938749,0.0655,

2.5,2.281172792,0.0655,

2.6,2.282588016,0.0655,

2.7,2.283709875,0.0655,

2.8,2.284599183,0.0655,

2.9,2.285304144,0.0655,

3,2.44976,0.15449,

3.1,2.286305961,0.0655,

3.2,2.286657121,0.0655,

3.3,2.286935489,0.0655,

3.4,2.287156153,0.0655,

3.5,2.287331076,0.0655,

3.6,2.287469738,0.0655,

3.7,2.287579657,0.0655,

3.8,2.287666791,0.0655,

3.9,2.287735862,0.0655,

4,2.287790616,0.0655,

4.1,2.287834019,0.0655,

4.2,2.287868426,0.0655,

4.3,2.2878957,0.0655,

4.4,2.287917321,0.0655,

4.5,2.287934459,0.0655,

4.6,2.287948045,0.0655,

4.7,2.287958815,0.0655,

4.8,2.287967352,0.0655

用MATLAB拟合不了,在本版搜索到一个帖子,用forcal写,但是不太会

我的Forcal代码如下:

i: OutVector(p:k,i)= k=FCDLen(p),printff{"\r\n"},i=0,(i

{"\r\n"};    //输出一维数组

!using["XSLSF"]; //使用命名空间XSLSF

f(t,x,y,dx,dy::p1,p2,p3,p4)={ //函数定义,连分式法对微分方程组积分一步函数pbs1中要用到

dx=p1*0.0321*(p2-x)-p3*x-dy,

dy=0.25*p4*exp(-p4*t)*x

};

//用连分式法对微分方程组进行积分,获得理论值。

//t1,t2为积分的起点和终点。

//h,s为自动变量。

//模块变量:hf为函数f的句柄,要预先获得该句柄;Array为工作数组;step为积分步长;eps为积分精度。

t_i_2(hf,Array,step,eps,t1,t2,x_1,x_2:x1,x2,h,i)=    //用于计算目标函数

{

h=(t2-t1)/step,

{   pbs1[hf,t1,Array,h,eps],  //连分式法对微分方程组积分一步函数pbs1,hf为函数f的句柄

t1=t1+h

}.until[abs(t1-t2)

Array.getra(0,&x1,&x2),

(x1-x_1)^2+(x2-x_2)^2

};

//目标函数定义,自变量_p1,_p2,_p3,_p4为需要优化的参数,需要将这些参数传递给对应的模块变量p1,p2,p3,p4。

//模块变量:Array为工作数组;DataArray存放实验数据t,x,y;max为数组DataArray的列长度;a,b,d,p1为优化变量。

//用于优化

Opt0(_p1,_p2,_p3,_p4:t1,s,i:hf,Array,step,eps,max,p1,p2,p3,p4,DataArray)={

p1=_p1,p2=_p2,p3=_p3,p4=_p4,    //传递优化变量,函数f中要用到p1,p2,p3,p4

t1=0,Array.setra(0,0,0,0),//设置积分初值,通过模块变量传递,Array是一个数组

s=0,i=0,

(i

s=s+t_i_2[hf,Array,step,eps:&t1,DataArray.getra(i,0):DataArray.getra(i,1),DataArray.getra(i,2)],

i++

},

s

};

//验证函数定义

验证(_p1,_p2,_p3,_p4:t1,s1,s2,i:hf,Array,step,eps,max,p1,p2,p3,p4,DataArray)={

p1=_p1,p2=_p2,p3=_p3,p4=_p4,

t1=0,Array.setra(0,0,0),

i=0,printff{"\r\n  Time        实验数据x              计算x             实验数据y              计算y \r\n\r\n"},

i

t_i_2[hf,Array,step,eps:&t1,DataArray.getra(i,0):DataArray.getra(i,1),DataArray.getra(i,2)],

Array.getra(0,&s1,&s2),

printff{"{1,r,6.3}{2,r,22.16}{3,r,22.16}{4,r,22.16}{5,r,22.16}\r\n",DataArray.getra(i,0),DataArray.getra(i,1),s1,DataArray.getra(i,2),s2},

i++

}

};

main(:d1,u,v,x,_eps,k,xx,g,i,s1,s2:hf,Array,step,eps,max,DataArray)=

{

hf=HFor("f"),           //模块变量hf保存函数f的句柄,预先用函数HFor获得该句柄

step=0.01,eps=1e-7,    //积分步长step要合适,积分精度eps越小越精确,用于对微分方程组积分一步函数pbs1

max=50,

DataArray=new[rtoi(real_s),rtoi(max),rtoi(3),rtoi(EndType),

0,0,0,

0.1,0.486966799,0.048018378,

0.167,1.6657,0.05823,

0.2,0.860306078,0.060834243,

0.3,1.156255213,0.064254733,

0.4,1.390856542,0.065167644,

0.5,1.67518,0.06638,

0.6,1.724247244,0.065476325,

0.7,1.841108525,0.065493681,

0.8,1.93374543,0.065498314,

0.9,2.007179471,0.06549955,

1,1.92438,0.05641,

1.1,2.111536196,0.065499968,

1.2,2.148115682,0.065499991,

1.3,2.177112544,0.065499998,

1.4,2.200098596,0.065499999,

1.5,2.218319829,0.0655,

1.6,2.232763952,0.0655,

1.7,2.244213928,0.0655,

1.8,2.253290418,0.0655,

1.9,2.260485427,0.0655,

2,2.16156,0.07359,

2.1,2.270710216,0.0655,

2.2,2.274294246,0.0655,

2.3,2.277135335,0.0655,

2.4,2.27938749,0.0655,

2.5,2.281172792,0.0655,

2.6,2.282588016,0.0655,

2.7,2.283709875,0.0655,

2.8,2.284599183,0.0655,

2.9,2.285304144,0.0655,

3,2.44976,0.15449,

3.1,2.286305961,0.0655,

3.2,2.286657121,0.0655,

3.3,2.286935489,0.0655,

3.4,2.287156153,0.0655,

3.5,2.287331076,0.0655,

3.6,2.287469738,0.0655,

3.7,2.287579657,0.0655,

3.8,2.287666791,0.0655,

3.9,2.287735862,0.0655,

4,2.287790616,0.0655,

4.1,2.287834019,0.0655,

4.2,2.287868426,0.0655,

4.3,2.2878957,0.0655,

4.4,2.287917321,0.0655,

4.5,2.287934459,0.0655,

4.6,2.287948045,0.0655,

4.7,2.287958815,0.0655,

4.8,2.287967352,0.0655

],

Array=new[rtoi(real_s),rtoi(2*max)], //申请工作数组

x=new[rtoi(real_s),rtoi(3)],                 //申请工作数组

xx=new[rtoi(real_s),rtoi(2),rtoi(3)],        //申请工作数组

g=new[rtoi(real_s),rtoi(3)],                 //申请工作数组

_eps=1e-100, d1=1,u=1.6,v=0.4,k=800,           //变换d1、u、v进一步求解,k为允许的最大迭代次数

i=jsim[HFor("Opt0"),d1,u,v,x,_eps,k,xx,g],       //求n维极值的单形调优法

printff{"\r\n实际迭代次数={1,r}\r\n",i},     //输出实际迭代次数

OutVector[x],                                //输出最优参数值及目标函数终值

x.getra(0,&s1,&s2),

验证[s1,s2],

delete[x],delete[xx],delete[g],delete[Array],delete[DataArray] //销毁申请的对象

}

但是总是提示,验证[s1,s2],调用实数表达式时参数不匹配。

,请问该怎么改呢?新学中,谢谢帮助!

matlab 分式拟合,matlab 微分方程组的参数拟合相关推荐

  1. matlab中动力学方程,Matlab求动力学的微分方程组拟合

    !using["XSLSF"];                //使用命名空间XSLSF //函数定义,用于计算微分方程组中各方程右端函数值,连分式法对微分方程组积分一步函数pb ...

  2. matlab解无解析解微分方程组,数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解...

    <数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解>由会员分享,可在线阅读,更多相关<数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解(12页 ...

  3. ode45 matlab 出错,Matlab中ode45求解微分方程组出错。

    ode45解微分方程组,结果数量级居然为10e304,请各位帮忙看看啊. 问题为求解一个7自由度系统(两个移动5个转动)在初始位移激励下个自由度的的位移和加速度. 目标函数 function dq=E ...

  4. MATLAB中lsqnonlin多元,Matlab中lsqnonlin对常微分方程组进行参数拟合以后 怎样用nlparci查看参数的置信区间...

    我用fminsearch 进行了常微分方程组参数优化 现想知道参数置信区间 所以改用lsqnonlin进行单参数拟合 初值是我已经得到的优化结果 但是拟合显示local minimum 而且ci = ...

  5. 微分方程零解稳定性matlab,关于“复合”常系数线性微分方程组的稳定性

    心引言经济数学中价格体系的相对稳定性问题及工程技术中的滤波问题等,常涉及两个平_.._.少,~一_'_~二..,_'_.._._._._-._._面'一d必~一二__._一__-_衡位置牙=" ...

  6. matlab 微分方程组参数拟合,如何拟合微分方程组的参数?

    用5阶龙格-库塔法,结果如下, 常微分方程算法: 五阶龙格-库塔法(Fith Order Runge-Kutta Method) 优化算法: 通用全局优化法(UGO1) 计算结束原因: 达到收敛判定标 ...

  7. matlab:使用龙格库塔法求解微分方程组

    %书籍:常用数值算法及其matlab实现 %第10章 常微分方程初值问题的数值解法,例10.14使用 %四阶龙格库塔方法 function [t,z] = rk4symeq(fun, t0, tf, ...

  8. matlab 微分方程组参数拟合,Matlab 微分方程组参数拟合求助!

    //若长时间没有结果,在任意可接受输入的窗口,按Ctrl+Alt+q退出Forcal运行. !using["XSLSF","sys","io" ...

  9. matlab非线性参数拟合,matlab非线性参数拟合估计_很好的参考材料

    使用nlinfit.fminsearch在matlab中实现基于最小二乘法的 非线性参数拟合 (整理自网上资源) 最小二乘法在曲线拟合中比较普遍.拟合的模型主要有 1.直线型 2.多项式型 3.分数函 ...

最新文章

  1. 全面开启线上参会报名!CNCC线上与现场参会者共赴技术盛宴!
  2. 简单的python抢红包脚本-这个Python脚本牛逼了,秒抢红包就算了,还能无视撤回消息...
  3. mysql-修改root密码的方法
  4. java去掉字符串中前后空格函数_Java去除字符串中的空格
  5. 替换更改登陆页面logo与链接
  6. 黑马商城项目源代码_Python学习路线图--Python框架与项目
  7. kk6.0 服务器信息 端口,KK的服务器改了端口以后 为什么我进不去
  8. slitaz c语言开发环境,makefile和cmake的简单使用
  9. 遥感数据共享(一)珠海一号数据
  10. Lwip的udp编程
  11. python画矩形孔衍射振幅图_利用Python将图片中扭曲矩形的复原
  12. 为antd tree组件 在onSelect时获取额外数据
  13. openlayers实现地图显示功能
  14. WPF - 简单的UI框架
  15. 刷题记录:牛客NC16122郊区春游
  16. IO有Buffered IO 和 Direct IO
  17. 推荐几个浪尖收藏的大数据学习平台
  18. f2fs解析(十)nid 如何从nat_root中删除
  19. 01postman学习笔记记录
  20. 智能云网 解决方案白皮书

热门文章

  1. 每天小练笔10-小和尚挑水(回溯法)
  2. 网络营销广告的类型(CPC、CPM、CPA、CPS, CTR)
  3. 实验二 词频统计软件项目报告
  4. docker安装oracle19c
  5. 计算机画图设计前景色,画图的前景色和背景色
  6. scp 保留文件属组_scp 对拷文件夹 和 文件夹下的所有文件 对拷文件并重命名
  7. NiuKe_SH17分玩具题
  8. 网站建设推广的几个绝招
  9. html搜索栏背景透明,Win10秘籍:让Cortana搜索框“透明”给你看
  10. linux 挂载 SD 卡