写一个完整可运行的Matlab代码,计算某经纬度一天的太阳高度角和方位角,并将计算结果写入Excel文件
时间: 2024-02-23 07:59:09 浏览: 114
以下是一个计算某经纬度一天的太阳高度角和方位角,并将计算结果写入Excel文件的Matlab代码:
```
clc;
clear all;
close all;
% 地球半径
R = 6371;
% 经纬度
lat = 31.23; % 纬度
lon = 121.47; % 经度
% 时间
date = datetime('now','TimeZone','local','Format','yyyy-MM-dd');
yr = year(date);
mon = month(date);
day = day(date);
% 一天的时间范围
t = linspace(0,24,24*60);
% 计算太阳位置和高度角、方位角
for i = 1:length(t)
[az, el] = sun_position(yr, mon, day, t(i), lat, lon, R);
azimuth(i) = az;
elevation(i) = el;
h(i) = 90 - el; % 太阳高度角
A(i) = az; % 太阳方位角
end
% 将结果写入Excel文件
filename = 'sun_position.xlsx';
sheet = 'Sheet1';
xlswrite(filename, {'Time', 'Azimuth', 'Elevation', 'Height', 'Direction'}, sheet, 'A1:E1');
time = date + hours(t);
xlswrite(filename, [time.', azimuth.', elevation.', h.', A.'], sheet, 'A2');
% 绘制太阳高度角和方位角图像
figure
subplot(2,1,1)
plot(t,h)
title('太阳高度角')
xlabel('时间(小时)')
ylabel('高度角(度)')
ylim([0,90])
subplot(2,1,2)
plot(t,A)
title('太阳方位角')
xlabel('时间(小时)')
ylabel('方位角(度)')
ylim([0,360])
function [az, el] = sun_position(yr, mon, day, hr, lat, lon, R)
% 计算儒略日
J2000 = 2451545;
J = J2000 + (datenum(yr,mon,day)-datenum(2000,1,1)) + (hr-12)/24;
% 计算黄道坐标
T = (J - 2451545)/36525;
L = 280.460 + 36000.772*T;
M = 357.528 + 35999.050*T;
lambda = L + 1.915*sin(deg2rad(M)) + 0.020*sin(2*deg2rad(M));
epsilon = 23.439 - 0.013*T;
alpha = atan2(cos(deg2rad(epsilon))*sin(deg2rad(lambda)), cos(deg2rad(lambda)));
delta = asin(sin(deg2rad(epsilon))*sin(deg2rad(lambda)));
% 计算赤道坐标
GMST = mod(280.46061837 + 360.98564736629*(J-2451545), 360);
H = mod(GMST + lon, 360);
alpha = rad2deg(alpha);
delta = rad2deg(delta);
H = H*15;
[x, y, z] = sph2cart(deg2rad(H), deg2rad(delta), R);
[x1, y1, z1] = sph2cart(deg2rad(lat), deg2rad(90), R);
[x2, y2, z2] = sph2cart(deg2rad(alpha), deg2rad(90-delta), R);
x3 = x2-x1;
y3 = y2-y1;
z3 = z2-z1;
[az, el, r] = cart2sph(x3, y3, z3);
az = rad2deg(az);
el = rad2deg(el);
end
```
这个代码在计算太阳高度角和方位角的同时,将每个时刻的结果写入了一个名为 "sun_position.xlsx" 的Excel文件中。主函数使用 `xlswrite` 函数将结果写入Excel文件中,同时使用 `linspace` 函数生成一天的时间范围,并遍历这个范围,计算每个时刻的太阳高度角和方位角,并绘制出图像。
阅读全文