Matlab实现热带气旋不同风期的风速转换
生活随笔
收集整理的這篇文章主要介紹了
Matlab实现热带气旋不同风期的风速转换
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
IBTrACS [點(diǎn)擊跳轉(zhuǎn)] 中的熱帶氣旋風(fēng)速來(lái)源于各個(gè)機(jī)構(gòu),風(fēng)速并不統(tǒng)一;根據(jù)WMO出版的《熱帶氣旋不同平均風(fēng)期之間的轉(zhuǎn)換指引》(《Guidelines for Converting between Various Wind Averaging Periods in Tropical Cyclone Conditions》),這里將各類風(fēng)速通知轉(zhuǎn)換成10min平均風(fēng)速,轉(zhuǎn)換關(guān)系和參考代碼如下:
%% clc; clear;%% fullpath = mfilename('fullpath'); [path, name] = fileparts(fullpath);xlsxfile = strcat(path, '/ibtracs.since1980.list.v04r00.xlsx');%% [A, T, R] = xlsread(xlsxfile);%% SID = R(3 : size(R, 1), 1); A = A(2 : size(A, 1), :); WMO_WIND = A(:, 10); LANDFALL = A(:, 15); WMO_AGENCY = R(3 : size(R, 1), 13);USA_WIND = A(:, 23); % 1-minute wind speeds TOKYO_WIND = A(:, 45); % Maximum sustained wind speed [10-min averaging period] CMA_WIND = A(:, 57); % Two-minute mean maximum sustained wind HKO_WIND = A(:, 62); NEWDELHI_WIND = A(:, 67); % 3-minute REUNION_WIND = A(:, 75); % 10 minute BOM_WIND = A(:, 95); % 10-minute NADI_WIND = A(:, 120); % 10 minute WELLINGTON_WIND = A(:, 124); % 10-minute DS824_WIND = A(:, 129); TD9636_WIND = A(:, 134); TD9635_WIND = A(:, 138); NEUMANN_WIND = A(:, 144); MLC_WIND = A(:, 149);STORM_SPEED = A(:, 161); STORM_DIR = A(:, 162);%% % in land, V10 / V1 = 1 / 1.21 | at sea, V10 / V1 = 1 / 1.05 % in land, V10 / V2 = 1 / 1.12 | at sea, V10 / V2 = 1 / 1.02 % in land, V10 / V3 = 1 / 1.09 | at sea, V10 / V3 = 1 / 1.00USA_WIND10 = USA_WIND - USA_WIND; CMA_WIND10 = CMA_WIND - CMA_WIND; NEWDELHI_WIND10 = NEWDELHI_WIND - NEWDELHI_WIND;idx_sea = find(LANDFALL > 0); idx_land = find(LANDFALL == 0);% at sea USA_WIND10(idx_sea) = USA_WIND(idx_sea) / 1.05; % 1min to 10min CMA_WIND10(idx_sea) = CMA_WIND(idx_sea) / 1.02; % 2min to 10min NEWDELHI_WIND10(idx_sea) = NEWDELHI_WIND(idx_sea) / 1.00; % 3min to 10min% in land USA_WIND10(idx_land) = USA_WIND(idx_land) / 1.21; % 1min to 10min CMA_WIND10(idx_land) = CMA_WIND(idx_land) / 1.12; % 2min to 10min NEWDELHI_WIND10(idx_land) = NEWDELHI_WIND(idx_land) / 1.09; % 3min to 10min%% uniAGENCY = unique(WMO_AGENCY); codeAGENCY = zeros(size(WMO_AGENCY)); % codeAGENCY: USA_WIND10 idx_atcf -> 1 | idx_cphc -> 1 | idx_hurdat_atl -> 1 | idx_hurdat_epa -> 1 % codeAGENCY: BOM_WIND idx_bom -> 2 % codeAGENCY: NADI_WIND idx_nadi -> 3 % codeAGENCY: NEWDELHI_WIND10 idx_newdelhi -> 4 % codeAGENCY: REUNION_WIND idx_reunion -> 5 % codeAGENCY: TOKYO_WIND idx_tokyo -> 6 % codeAGENCY: WELLINGTON_WIND idx_wellington -> 7idx_atcf = find(strcmp(WMO_AGENCY, uniAGENCY(2))); idx_bom = find(strcmp(WMO_AGENCY, uniAGENCY(3))); idx_cphc = find(strcmp(WMO_AGENCY, uniAGENCY(4))); idx_hurdat_atl = find(strcmp(WMO_AGENCY, uniAGENCY(5))); idx_hurdat_epa = find(strcmp(WMO_AGENCY, uniAGENCY(6))); idx_nadi = find(strcmp(WMO_AGENCY, uniAGENCY(7))); idx_newdelhi = find(strcmp(WMO_AGENCY, uniAGENCY(8))); idx_reunion = find(strcmp(WMO_AGENCY, uniAGENCY(9))); idx_tokyo = find(strcmp(WMO_AGENCY, uniAGENCY(10))); idx_wellington = find(strcmp(WMO_AGENCY, uniAGENCY(11)));codeAGENCY([idx_atcf; idx_cphc; idx_hurdat_atl; idx_hurdat_epa]) = 1; codeAGENCY(idx_bom) = 2; codeAGENCY(idx_nadi) = 3; codeAGENCY(idx_newdelhi) = 4; codeAGENCY(idx_reunion) = 5; codeAGENCY(idx_tokyo) = 6; codeAGENCY(idx_wellington) = 7;%% for codi = 1 : 7idx_curcode = find(codeAGENCY == codi);curSID = unique(SID(idx_curcode));for curSIDi = 1 : size(curSID, 1)[codi curSIDi size(curSID, 1)]codeAGENCY(find(strcmp(SID, curSID(curSIDi)))) = codi;end end%% Vmax_10min = zeros(size(codeAGENCY)); Vmax_10min(find(codeAGENCY == 1)) = USA_WIND10(find(codeAGENCY == 1)); Vmax_10min(find(codeAGENCY == 2)) = BOM_WIND(find(codeAGENCY == 2)); Vmax_10min(find(codeAGENCY == 3)) = NADI_WIND(find(codeAGENCY == 3)); Vmax_10min(find(codeAGENCY == 4)) = NEWDELHI_WIND10(find(codeAGENCY == 4)); Vmax_10min(find(codeAGENCY == 5)) = REUNION_WIND(find(codeAGENCY == 5)); Vmax_10min(find(codeAGENCY == 6)) = TOKYO_WIND(find(codeAGENCY == 6)); Vmax_10min(find(codeAGENCY == 7)) = WELLINGTON_WIND(find(codeAGENCY == 7));%% % There are the values of codeAGENCY with 0 % Vmax_10min(codeAGENCY == 0) = mean(Vmax1, Vmax2, ..., VmaxN that have transed to V_10min) all_Vs = [TOKYO_WIND, REUNION_WIND, BOM_WIND, NADI_WIND, WELLINGTON_WIND, USA_WIND10, CMA_WIND10, NEWDELHI_WIND10]; all_V10min = mean(all_Vs, 2, 'omitnan'); % % OUT = [V10min, STORM_SPEED, STORM_DIR]; outVmax_10min = Vmax_10min; outVmax_10min(find(codeAGENCY == 0)) = all_V10min(find(codeAGENCY == 0)); outVmax_10min(find(outVmax_10min == 0)) = -1; outVmax_10min(isnan(outVmax_10min)) = -1;%% outpath = strcat(path, '\adj_V10min.since1980.xlsx'); xlswrite(outpath, num2cell(outVmax_10min));總結(jié)
以上是生活随笔為你收集整理的Matlab实现热带气旋不同风期的风速转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 韩语输入法快捷键
- 下一篇: python编码终极版