当前位置: 首页 > news >正文

2015年国赛高教杯数学建模A题太阳影子定位解题全过程文档及程序

2015年国赛高教杯数学建模

A题 太阳影子定位

  技术就是通过分析视频中物体的太阳影子变化,确定视频拍摄的地点和日期的一种方法。
  1.建立影子长度变化的数学模型,分析影子长度关于各个参数的变化规律,并应用你们建立的模型画出2015年10月22日北京时间9:00-15:00之间天安门广场(北纬39度54分26秒,东经116度23分29秒)3米高的直杆的太阳影子长度的变化曲线。
  2.根据某固定直杆在水平地面上的太阳影子顶点坐标数据,建立数学模型确定直杆所处的地点。将你们的模型应用于附件1的影子顶点坐标数据,给出若干个可能的地点。
  3. 根据某固定直杆在水平地面上的太阳影子顶点坐标数据,建立数学模型确定直杆所处的地点和日期。将你们的模型分别应用于附件2和附件3的影子顶点坐标数据,给出若干个可能的地点与日期。
  4.附件4为一根直杆在太阳下的影子变化的视频,并且已通过某种方式估计出直杆的高度为2米。请建立确定视频拍摄地点的数学模型,并应用你们的模型给出若干个可能的拍摄地点。
如果拍摄日期未知,你能否根据视频确定出拍摄地点与日期?

整体求解过程概述(摘要)

  本文首先根据几何关系给出了直杆的太阳影子长度变化模型,进而通过“反问题”思维,借助直杆太阳影子变化建立数学优化模型推算出直杆的位置、日期等信息。最后,利用视频截屏技术和优化模型确定了视频的拍摄地点和拍摄日期。
  问题1,首先找到可以衡量影子长度变化的几个参数然后从三方面分析了太阳影子关于各参数长度变化的规律。我们发现影长不仅会随着太阳高度角增加而减小,而且还会受季节的影响。而后用MATLAB软件画出了附件1中直杆影长变化的曲线图。
  问题2,使用最小二乘近似法以及遗传算法建立了一个完整的优化模型,将杆长与直杆地理纬度作为变量参数,进行100次迭代,得出20组可能的解,通过合理性比较得出最可能地点在海南岛东部。
  问题3,在问题2优化模型的基础上,增加日期一个变量,利用与问题2相似的解法求得附件2可能的地点与日期为印度南部、2-3月份,附件3可能的地点与日期为越南东南部、8-9月份。
  问题4,利用截屏技术将视频每隔一分钟截一幅图,将截取的40张图片用MATLAB进行边缘处理得到坐标数据,利用相似变换将像素坐标转换为物理坐标。在日期已知情况下,建立最小二乘近似法模型,并使用模拟退火算法得到视频中可能的地点为呼和浩特市附近。在日期未知的情况下,增加变量日期,再利用此题的优化模型求解,确定了地点与日期。
  本文的亮点是,考虑到遗传算法自身有局部搜索能力差、存在未成熟收敛和随机游走等缺陷,先使用拟合的方法将直杆可能所在位置的地理经度确定,再运用遗传算法或者模拟退火算法求解模型。

模型假设:

  (1)假设太阳光为平行光,没有折射;
  (2)假设海拔高度常常可以忽略;
  (3)假设时区是东八区;

问题分析:

  问题1的分析
  问题1在太阳光是平行光的假设下,可以将此题看作一个简单的数学求解问题。该问题的关键在于找出各个参数与影长的联系。我们考虑到,物体在某一点的影子的形状(长度和位置)由太阳在天体中对地球上这一点的相对位置决定,而这个相对位置由当地的的地理纬度、季节(日、月)和时间(这里的时间准确来说指时刻)三个因素决定,由于问题1中我们只需考虑影子的长度,所以我们可以用地理纬度(𝜑)、太阳赤纬角(𝛿)、太阳高度角(ℎ)及时角(𝑡)等参数建立影子长度变化的数学模型,并分析影长关于它们几个参数的变化规律。 而后,利用上述建立好的模型及MATLAB软件,以北京时间9:00到15:00内的时刻为变量,编写程序就可以画出题目要求的时间段内杆子的影长变化曲线。
  问题2的分析
  问题2与问题3都是给出某固定直杆在水平地面上的太阳影子顶点坐标数据,要求是建立数学模型,给出若干个可能的地点或地点和日期,这是一种典型的“反问题”,即需要我们由果推因。首先利用已有数据进行二次函数拟合,基本确定直杆的地理经度,然后再采用有关“反问题”比较经典的做法——最小二乘近似法建立模型求解其他变量参数。其中,直杆长度也不确定,由于杆长不同所在的位置也可能不同,所以将杆长𝐻设置为变量参数之一。进而,用遗传算法的思想求解模型,可以得出直杆几个可能的位置。
  问题3的分析
  问题3与问题2比较,除了需要确定直杆所处的地点位置之外,同时需要确定拍摄日期,我们将问题二的最小二乘近似法模型稍加改进,增加参数日期(用积日𝑁来衡量),从而建立起一个三参数的优化模型,利用与问题2相似的算法可以得出直杆一些可能的位置与日期。
  问题4 的分析
  附件4视频较大,直接用MATLAB处理比较困难,所以我们需要对视频进行一些处理,然后再利用MATLAB软件导出直杆影子在像素坐标系下的坐标数据,利用坐标变换方法中的相似变换将像素坐标系转换为物理坐标系。在日期给定时,建立最小二乘近似法的优化模型,并首先考虑遗传算法,再用模拟退火算法改进,可以得出可能的地点。如果日期没有给定,建立的优化模型将是一个四参数问题,利用本题建立的优化模型将确定可能的地点与日期。

模型的建立与求解整体论文缩略图

在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

function ObjV=fun(unit) 
load matlab data  
h=unit(:,1); 
b1=unit(:,2); 
time.year=2015; 
time.month=4; 
time.day=18; 
location.altitude = 0; 
time.UTC =8; time.hour = 14; 
time.min = 42; 
time.sec = 0; 
for j=1:length(unit) location.longitude = 110.25;  location.latitude  = b1(j);  for i=1:21 if time.min>60 
time.min=0; 
time.hour=time.hour+1; 
end 
a=sun_position(time,location); 
l2(i)=h(j)/tan((a.zenith)/180*pi); 
time.min=time.min+3;  
end 
a1=data(:,1); 
a2=data(:,2); 
l1=sqrt(a1.^2+a2.^2); 
l=0; 
for k=1:21 
l=l+(l1(k)-l2(k))^2; 
end 
ObjV(j)=l; 
end 
ObjV=ObjV'; 
run_genetic.m: 
clc;clear,close all; 
NVAR=2; 
NIND=40;  
MAXGEN=100; 
LIND=10;  
GGAP=0.9;  
trace=zeros(2,MAXGEN); 
FieldD=[  LIND LIND;     
0  
0;        
10  90;   
1  
1;         
0  
0;                               
1 1;         
1 1];          
Chrom=crtbp(NIND,LIND*NVAR);  
unit=bs2rv(Chrom,FieldD);  
ObjV=fun(unit);                           
for gen=1:MAXGEN 
FitnV=ranking(-ObjV); 
SelCh=select('sus',Chrom,FitnV,GGAP);  
SelCh=recombin('xovsp',SelCh,0.7); 
SelCh=mut(SelCh);  
unit=bs2rv(SelCh,FieldD);  
ObjVSel=fun(unit); 
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);  
[Y(gen),I(gen)]=min(ObjV);  
trace(1,gen)=min(ObjV);  
trace(2,gen)=sum(ObjV)/length(ObjV); 
end 
unit=bs2rv(Chrom,FieldD); 
figure 
plot(trace(1,1:gen),'b-o'); 
hold on 
plot(trace(2,1:gen),'r-o'); 
XY=unit(I(gen),:) 
Z=min(Y) 
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

相关文章:

  • OpenCV视频I/O(8)从视频源中读取一帧图像函数read()的使用
  • CDGA|数据治理:策略与价值的深度融合
  • CentOS 修改服务器登录密码的完整指南
  • 60.【C语言】内存函数(memset,memcmp函数)
  • 剖解环形链表1
  • 【nrm】npm 注册表管理器
  • STM32精确控制步进电机
  • 2025 年 IT 前景:机遇与挑战并存,人工智能和云计算成重点
  • Java面试:ArrayList 和 LinkedList 的区别是什么?谈谈你对ArrayList和LinkedList的理解
  • 基于深度学习的学情智能监测系统设计与实现(PYQT+YOLOv8+训练数据集+论文+部署文档)
  • we3.0里的钱包是什么?
  • 基于python+flask+mysql的音频信息隐藏系统
  • Llama 3.2 90B刚开源就被Molmo-72B全面击败!
  • SpringCloud入门
  • Java Web应用升级故障案例解析
  • 2017-08-04 前端日报
  • Android Studio:GIT提交项目到远程仓库
  • Angular Elements 及其运作原理
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • crontab执行失败的多种原因
  • Fundebug计费标准解释:事件数是如何定义的?
  • MQ框架的比较
  • React+TypeScript入门
  • text-decoration与color属性
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • Vim Clutch | 面向脚踏板编程……
  • vue 个人积累(使用工具,组件)
  • webpack入门学习手记(二)
  • web标准化(下)
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 入门级的git使用指北
  • 收藏好这篇,别再只说“数据劫持”了
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微服务框架lagom
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • scrapy中间件源码分析及常用中间件大全
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 容器镜像
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • (2)MFC+openGL单文档框架glFrame
  • (C#)一个最简单的链表类
  • (zt)最盛行的警世狂言(爆笑)
  • (多级缓存)多级缓存
  • (区间dp) (经典例题) 石子合并
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (一) storm的集群安装与配置
  • (转) 深度模型优化性能 调参
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET中两种OCR方式对比
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d