美赛整理之带参数的常微分方程拟合问题研究
带参数的常微分方程拟合问题研究
- 一.问题的背景:
- 二.提出一个较为简单,但是很有代表性的一个问题:
- 三.求解的基本原理:
- 四.求解的基本算法:
- 1.利用matlabmatlabmatlab遗传算法求解出其最优误差函数值:
- 2.差分后用LINGOLINGOLINGO求解:
一.问题的背景:
一般我们平常学习到的拟合问题大部分都是已知了函数表达式后,对于函数表达式里的系数进行的拟合问题。大部分的教材上其实并没有见讲解该如何对不能求解出相关表达式的函数关系的参数拟合求解。而且LINGO也是没有现成的微分符号表达2阶微分。因此,我通过在网上查阅部分资料提出了自己的一些小想法,用来求解一般的较为复杂的微分方程拟合的问题,并且使得解有一定的精度。
二.提出一个较为简单,但是很有代表性的一个问题:
d2ydt2=ay,其中y(1)=0.909,y(1.1)=0.706\frac{d^2y}{dt^2}=ay, 其中y(1) = 0.909,y(1.1) = 0.706 dt2d2y=ay,其中y(1)=0.909,y(1.1)=0.706
其中,ttt每隔0.10.10.1个长度的数据如下:
yreal=[0909,0.706,0.363,0.079,−0.226,−0.474,−0.765,−1.183,−1.436,−1.573]y_{real} = [0909,0.706,0.363,0.079,-0.226,-0.474,-0.765,-1.183,-1.436,-1.573] yreal=[0909,0.706,0.363,0.079,−0.226,−0.474,−0.765,−1.183,−1.436,−1.573]
求:a^\hat{a}a^
解决这类问题首先是不能用matlabmatlabmatlab的odeodeode函数求解的,因为这是一个有222点初值的问题,在t=1t=1t=1时刻yyy的导数是不知道的。
三.求解的基本原理:
求解这个问题,而且包括更广放的一般的拟合问题,都要用到我们伟大的高斯老师的最小二乘法作为基本的工具。
mina∈R∑i=1n(ycalc(i)−yreal(i))2min_{a\in R}\sum_{i=1}^n(y_{calc}^{(i)}-y_{real}^{(i)})^2 mina∈Ri=1∑n(ycalc(i)−yreal(i))2
然而,要想求出计算值来实际上得先把这个微分问题转化为差分方程问题如下图:
h=0.1;t0=1;yt0=0.909,yt0+h=0.706yt+h+yt−h−2yth2=ayth = 0.1;t_0 = 1;y_{t_0} = 0.909,y_{t_0+h} = 0.706\\ \frac{y_{t+h}+y_{t-h}-2y_t}{h^2} = ay_t h=0.1;t0=1;yt0=0.909,yt0+h=0.706h2yt+h+yt−h−2yt=ayt
这样只要我们知道了aaa的大小就可以把每一点的yyy值算出来了。这样其实就转化成了一个求aaa值的无约束单目标优化问题, 目标函数就是我们的最小二乘函数。
四.求解的基本算法:
1.利用matlabmatlabmatlab遗传算法求解出其最优误差函数值:
我们利用matlabmatlabmatlab自带的现成的gagaga工具箱求解,基本的代码如下:
function err = obj_ode(a)
h = 0.1;
fun_ode = zeros(1,10);
real_value = [0.909 0.706 0.363 0.079 -0.226 -0.474 -0.765 -1.183 -1.436 -1.573];
fun_ode(1) = 0.909;
fun_ode(2) = 0.706;
for t = 3:10fun_ode(t) = (a*h^2+2)*fun_ode(t-1)-fun_ode(t-2);
end
err = sum((fun_ode-real_value).^2);
end
上面的函数是为了求出aaa值固定时候的误差大小,也就是我们的最小二乘函数,现在要使得这个函数最小,就应该在主函数里用遗传算法来求解:
clc,clear;
real_value = [0.909 0.706 0.363 0.079 -0.226 -0.474 -0.765 -1.183 -1.436 -1.573];
[a,error_value] = ga(@obj_ode,1);
f = @(t,u)[u(2);a*u(1)^2];
y_init = [0.909;(0.706-0.909)/0.1];
[u,y] = ode45(f,1:0.1:1.9,y_init);
plot(1:0.1:1.9,y(:,1),'r-',1:0.1:1.9,real_value,'b-');
xlabel('自变量t');
ylabel('因变量y');
legend('计算值','真实值');
fprintf('a的值是:%f',a);
fprintf('最小误差的值是:%f',error_value);
求出来最后的拟合曲线如下:
求出来的aaa是−8.13-8.13−8.13,误差在0.490.490.49左右。但是从曲线上看貌似到最后误差变得有点大了。
2.差分后用LINGOLINGOLINGO求解:
model:
sets:
time/1..100/:t,y;!100等分点;
num/1..10/:y_real,y_calc;
endsets
data:
y_real=0.909 0.706 0.363 0.079 -0.226 -0.474 -0.765 -1.183 -1.436 -1.573;!实际值;
enddata
CALC:
h = 0.01;!步长;
y(1) = 0.909;
y(11) = 0.706;
endcalc
min = @sum(num:(y_real-y_calc)^2);
@for(time(i)|i#gt#2:y(i)=(a*h^2+2)*y(i-1)-y(i-2));!差分关系;
@for(num(i):y_calc(i) = y(10*(i-1)+1));!映射关系;
@free(a);
end
最后求出的结果如下:
求出的aaa是8.438.438.43,很明显示LINGOLINGOLINGO收敛到了局部最优解。没有得到我们想要的全局最优解。在这方面,遗传算法要比LINGOLINGOLINGO强上一些。
其实也可以尝试以下用4阶龙格库塔法编写LINGOLINGOLINGO求解,有尝试过的小伙伴可以自己比较一下结果哦!
美赛整理之带参数的常微分方程拟合问题研究相关推荐
- 美赛整理之Matlab的工程数学计算学习笔记(高等数学)
美赛整理之Matlab的工程数学计算学习笔记(高等数学) 1.极限的定义和判别: 2.绘制特殊曲面 3.求两个空间曲面的交线 4.定积分的计算 5.多重积分的计算 1.截面法: 2.定义法 (1)先画 ...
- 美赛整理之理想直流伺服电机的simulink仿真优化
理想直流电机的simulink仿真优化 目录 理想直流电机的simulink仿真优化 一.simulink背景: 二.直流伺服电机的背景: 三.直流伺服电机的工作原理: 1.直流伺服电机的闭环控制原理 ...
- 美赛整理之偏微分方程的数值求解(一)
两点边值问题的GalerKin方法 1.问题的提出 2.求解方法(试函数法) 3.方法的改进 4.代码实现 1.问题的提出 考虑一个定义在[a,b][a,b][a,b]上的二阶常微分方程边值问题: ...
- 美赛整理之投影寻踪模型及其求解
投影寻踪模型 1.模型的简介和应用 2.基本步骤: 3.遗传算法求解模型的优化问题 1.用MatlabMatlabMatlab的gagaga工具箱求解: 2.遗传算法求解: 3.LINGOLINGOL ...
- 美赛整理之遗传算法优化BP神经网络的齿轮故障诊断问题
遗传算法优化BP神经网络的齿轮故障诊断问题 一.问题的提出 二.问题的分析 三.结果显示 一.问题的提出 二.问题的分析 这里给出了9组15维的向量,我们的目的就是要根据这9组数据来建立一个BP神 ...
- 美赛整理之Matlab读取全球海洋温度数据并显示干货
Matlab读取全球海洋温度数据并显示干货 Matlab读取全球海洋温度数据并显示干货 Matlab读取全球海洋温度数据并显示干货 一.nc文件的读取 二.画出从1981到2000年的全球温度海洋变化 ...
- 本地HTML文件 带参数方案
笔者在APL(抽象编程语言)平台中, 已经完成把 APL平台的APIs桥接到 javascript中. 因此目前写 本地的HTML页面有两种方式: 1. 通过本地的Web服务器方式: apl ...
- dojo引用html模板,深入浅出dojo/request-本地HTML文件 带参数方案-遮罩层《一》_169IT.COM...
笔者在APL(抽象编程语言)平台中, 已经完成把 APL平台的APIs桥接到 javascript中. 因此目前写 本地的HTML页面有两种方式: 1. 通过本地的Web服务器方式: apl ...
- 一文带你了解数学建模竞赛鼻祖——美赛!
说到数学建模比赛很难不提到美国大学生建模竞赛,也就是美赛,本篇来给大家说说美赛的那点事! 一.介绍 美国大学生数学建模竞赛(MCM/ICM)由美国数学及其应用联合会主办,是最高的国际性数学建模竞赛,也 ...
最新文章
- android 自定义 listView
- 20181204-1 每周例行报告
- web前端入门学习 css(8)(新增语义化标签、video/audio、新增input类型、新增表单属性、属性选择器、结构伪类选择器、伪元素选择器、css3盒子模型、模糊、calc函数、过渡
- CSP-S集训刷题记录
- 图片裁剪和异步上传插件--一步到位(记录)
- Protobuf介绍及简单使用(上)
- 凭什么程序员工资那么高?
- 解决ubuntu上在androidstudio中启动emulator闪退的问题(1)
- 修改echarts 3D柱状图柱子大小(粗细)的方法
- Epub,Mobi,Azw3电子书格式的区别,windows上有什么好用的epub阅读器
- ActiveMQ 下载和安装
- 为什么说“懒”是程序员应有的美德?
- 深圳免费旅游景点大全|深圳旅游攻略(下)
- linux bigendian未定义,big endian与little endian
- 嵌入式系统开发笔记2:Linux的主流发行版本
- 微信公众号wx.getlocation
- 【转载】深入浅出的讲解傅里叶变换
- Mac air苹果笔记本安装Win10双系统教程(绝对能成功,超详细!)[转]
- 解决uni-uploadFile上传图片丢失后缀名的问题
- Java之父求职被嫌年纪大:程序员只能吃青春饭?
热门文章
- 引入Hub再生的最短帧长及主机之间距离的最大值计算
- latex 版本控制:TexStudio/Texmaker/... + git(smartGit)
- OpenCV中Mat,图像二维指针和CxImage类的转换
- 对于一万条数据量使用Oracle游标,存储过程,一般查询的速度的对比
- YJX_rxjh_21_3.2.3
- 二维码扫描ZXing简化
- c# asp.net RangeValidator(范围验证)控件(11)
- 手机丢了如何损失最小
- 开启我的segmentfault之旅
- 《SEM长尾搜索营销策略解密》一一2.9 长尾,寻找蓝海的最好方式