最小二乘法的应用(2015A题A题太阳影子定位)

零、相关简介

数学建模在解决实际问题中发挥着重要作用,2015年A题“太阳影子定位”便是一个典型的应用案例。本题主要研究的是如何根据太阳的位置和物体的影子来确定物体的空间位置

在现实世界中,确定一个物体的确切位置是许多领域如导航、考古、建筑和地理信息系统中的关键问题。传统的全球定位系统在某些环境下可能不可靠或不可用,而利用太阳影子定位则提供了一个有趣的替代方案。该方法基于日影测量法,这是一种古老的技术,通过观察太阳的位置和物体产生的影子来推断物体的位置。

首先,理解太阳的运动对解决这一问题至关重要。太阳在天空中的运动呈现出一定的规律性,按照一定的纬度和日期,太阳的高度角和方位角在一天中的变化是可以预测的。这些角度信息直接影响着物体影子的方向和长度。因此,在建模时首先要建立一个关于太阳运动模型,这通常涉及到天文学的基础知识,如太阳的赤纬、时角等概念。

接下来,建立一个影子生成模型。当太阳光照射到物体时,根据物体的形状和太阳光的入射角,会在与光源相反的方向产生影子。这个模型需要考虑到物体的形状和尺寸,因为这些因素会影响影子的形状和长度。在此步骤中,几何知识被广泛应用于模拟影子的形成。

确定了太阳的位置和影子后,接下来的步骤是通过建立数学模型来解决实际的定位问题。这通常涉及到一系列的几何计算和代数方程。例如,可以通过建立光线与物体相交的方程来确定影子的起点,通过分析影子的方向和长度,可以得出物体相对于光源的位置。

然而,仅凭影子信息通常不足以唯一确定一个物体在三维空间中的位置,因为不同位置的物体在特定时刻可能产生相似的影子。因此,通常需要一系列时间点上的影子数据,或者结合其他信息,如物体的高度、周围环境等,来辅助定位。

在解决问题的过程中,数学建模扮演了中心角色。它不仅要求参与者具备较强的数学和物理知识,还需要能够将理论知识应用于解决实际问题。此外,计算机编程能力也非常重要,因为往往需要编写程序来进行复杂的计算和模拟。

综上所述,太阳影子定位问题是一个多学科交叉的问题,它不仅涉及到数学、物理学和天文学知识,还要求能够有效地利用计算机工具。通过数学建模方法解决这一问题,不仅能够增强理论与实践的结合,还能够促进学生综合运用所学知识解决复杂问题的能力。这种以问题为导向的学习方式,对于培养学生的创新思维和实际操作能力具有重要意义。

一、题目回顾(第二问为例)

题:

根据某固定直杆在水平地面上的太阳影子顶点坐标数据,建立数学模型确定直杆所处的地点。将你们的模型应用于附件1的影子顶点坐标数据,给出若干个可能的地点。

二、题目数据:

北京时间x坐标(米)y坐标(米)
14:421.03650.4973
14:451.06990.5029
14:481.10380.5085
14:511.13830.5142
14:541.17320.5198
14:571.20870.5255
15:001.24480.5311
15:031.28150.5368
15:061.31890.5426
15:091.35680.5483
15:121.39550.5541
15:151.43490.5598
15:181.47510.5657
15:211.5160.5715
15:241.55770.5774
15:271.60030.5833
15:301.64380.5892
15:331.68820.5952
15:361.73370.6013
15:391.78010.6074
15:421.82770.6135

三、问题分析

由附件数据可知,真实的影长 L ′ = x 2 + y 2 L' = \sqrt{x^2 + y^2} L=x2+y2
得到时间影长列表:

北京时间影长
14:421.1496
14:451.1822
14:481.2153
14:511.2491
14:541.2832
14:571.3180
15:001.3534
15:031.3894
15:061.4262
15:091.4634
15:121.5015
15:151.5402
15:181.5799
15:211.6201
15:241.6613
15:271.7033
15:301.7462
15:331.7901
15:361.8350
15:391.8809
15:421.9279

由建模分析知道:

影长与五个变量有关,分别是太阳高度角杆高时间当地经度当地纬度。影长由太阳高度角决定,而太阳高度角由杆高时间当地经度当地纬度决定,由此我们采用控制变量法,分别分析这三个参数与影长的关系。

代码:

完整代码 https://github.com/yan-fanyu/CUMCM-Paper-And-SourceCode
clc;
clear;

% Φ -> A   纬度
% δ -> F   太阳赤道纬度夹角
% ω -> C   太阳时角
%  h -> Oh  太阳高度角
% λ -> D   经度

dB = [0.4555 	0.4409 	0.4247 	0.4136 	0.3986 	0.3919 	0.3777 	0.3656 	0.3582 	0.3481 	0.3438 	0.3305 	0.3264 	0.3169 	0.3120 	0.3069 	0.2987 	0.2928 	0.2876 	0.2853 	];

dLs = [1.1496 	1.1822 	1.2153 	1.2491 	1.2832 	1.3180 	1.3534 	1.3894 	1.4262 	1.4634 	1.5015 	1.5402 	1.5799 	1.6201 	1.6613 	1.7033 	1.7462 	1.7901 	1.8350 	1.8809 	1.9279 ];

% 418日是一年的第 108 天
n = 108;

% 太阳赤纬夹角(度)
C = 23.45*sin(2*pi*(284+n)/365);

% 太阳时
B = 2*pi*(n -81)/364;
E = 9.87*sin(2*B) - 7.53*cos(B) - 1.5*sin(B); 

Jm = 120;

hour = [14	14	14	14	14	14	15	15	15	15	15	15	15	15	15	15	15	15	15	15	15];
minutes = [42	45	48	51	54	57	0	3	6	9	12	15	18	21	24	27	30	33	36	39	42];

value1 = 0;
value2 = 0;

min = 100000000;

j = 1;

X = [];
Y = [];

MinArr = ones(12,5);
dFsArr = [];

LsArr = [];

DD = ones(12, 20);

LsArrr = ones(12, 21);
% 杆长
for L = 0:0.1:3
    % 纬度
    for W = 15:0.1:25
        % 经度
        for J = 105:0.1:115
            % 时间
            for i = 1:1:21
                
                T0 = hour(i) + minutes(i)/60;
                Ts = T0 + E/60 + (J - Jm)/15;
            
                % 太阳时角(度)
                S = 15*(Ts - 12);

                % 太阳高度角
                Oh = asin(sin(W*pi/180)*sin(C.*pi/180) + cos(W*pi/180)*cos(C*pi/180)*cos(S*pi/180));

                % 太阳方位角
                if(S <0)
                    Fs = acos(  (sin(C*pi/180) - sin(Oh)*sin(W*pi/180)) / (cos(Oh)*cos(W*pi/180)));
                    FsArr(i) = Fs;
                else
                    Fs = 2*pi - acos(  (sin(C*pi/180) - sin(Oh)*sin(W*pi/180)) / (cos(Oh)*cos(W*pi/180)));
                    FsArr(i) = Fs;
                end
                
                if(i >= 2)
                    value1 = value1 + (  FsArr(i-1) - FsArr(i) - dB(i - 1) )^2;
                    dFsArr(i-1) = FsArr(i-1) - FsArr(i);
                end
                
                % 影长 Ls
                Ls = L / tan(Oh);
                
                LsArr(i) = Ls;
                
                value2 = value2 + (Ls - dLs(i))^2;


                i = i +1;
                
            end
            
            value = value1/20*value2/21;
            %if(value < min)
                %min = value;
                %MinArr = [L W J]
            %end
            
            if (value < 0.0000003)
                X(j) = j;
                j
                Y(j) = value;
                LsArrr(j, :) = LsArr;
                DD(j, :) = dFsArr*180/pi;
                MinArr(j , 1:5) = [j L W J value];
                j = j+1;
            end
            
            value1 = 0;
            value2 = 0;
            value = 0;
            
               
        end
    end
end

plot(X, Y,'*');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦是远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值