做一套養殖過程管理的系統,有養殖環境資料採集功能,硬體不到位,需要給相關ld演示,要求資料盡量真實。這就需要模擬生成一天的溫度資料。
解決方案1:
指定範圍隨機數溫度生成
結果就是這樣了。。。太假。。。
解決方案2:
**連續隨機數生成:
$wd_arr = array(); // 溫度效果也不盡如人意。。。//-------------溫度--------------
// 生成連續的溫度隨機數
$wd_start = 21.6;
$max_wd = 22.6; //最高溫度22.6
$min_wd = 7.1; // 最低溫度7.1
$start_offset_wd = 5*60*2; // 從5點開始
$wd_diff = $max_wd - $min_wd; // 溫度差
$wd_change_prob = 0.1; // 溫度變化概率
// 模擬一天的氣溫,2880為每半分鐘採集一次
$wd_arr[$start_offset_wd] = $min_wd;
$wd_inte1 = getrandfw( (14-5)*60*2, $wd_diff ); // 第一段的區間
$wd_inte2 = getrandfw( (21-14)*60*2, $wd_diff * 0.9 ); // 第二段的區間
$wd_inte3 = getrandfw( (24-21 + 5)*60*2, $wd_diff * 0.1 ); // 第三段的區間
// 模擬生成資料
for($i=1; $i<=24*60*2; $i++)
// 公升溫
$rd = 0;
if($is_change)
$wd_arr[$start_offset_wd + $i] = $wd_arr[$start_offset_wd + $i - 1] + $rd;
} else if ( ($start_offset_wd + $i > 14*60*2) && ($start_offset_wd + $i < 21*60*2) )
// 降溫
$rd = 0;
if($is_change)
$wd_arr[$start_offset_wd + $i] = $wd_arr[$start_offset_wd + $i - 1] - $rd;
} else
$index = $start_offset_wd + $i;
$index > 24*60*2 ? $index-=(24*60*2+1) : $index=$index;
// 降溫
$rd = 0;
if($is_change)
// 大於2880
$index = $start_offset_wd + $i;
$index > 24*60*2 ? $index-=(24*60*2+1) : $index=$index;
//echo $index." --- ";
$index != 0 ? $wd_arr[$index] = $wd_arr[$index-1] - $rd : $wd_arr[$index] = $wd_arr[24*60*2] - $rd;
//echo $wd_arr[$index]."
"; //$wd_arr[$index] = $wd_arr[$index-1] + $rd;
}date_default_timezone_set('prc');
for($i=0; $i<24*60*2; $i++ )
/* * 根據溫度差和時間範圍確定變化率和範圍
* @ 時間差
* @ 溫度差
* */
function getrandfw($time_diff, $wd_diff)
解決方案3:
使用真實離散溫度 -》 生成平滑曲線 -》 生成秒級資料
第一步:去中國天氣網找當地附近一天的真實溫度資料,可惜只有24小時,溫度值還是整數。。。還是整數。。。還是整數。。。
第二步:輸入到excel中,適當的手工和修改一下小數點後的資料,模擬畫個圖,基本真實吧。
第三步:在excel中,將0、1、2、替換成一天的秒數,為了連續,將首位從1開始
第四步,安裝此函式繪圖神器,origin pro,將excel中的資料粘至次神器中,選中a b列並畫直線。
第五步:根據曲線,生成,每秒的資料。(拿箭頭工具選中曲線,然後操作一下選單)
要生成86400個點,如圖:
此時又出現兩列新的資料,這兩列資料就是我們要的每秒的溫度值。
將新生成的這兩列數,粘如excel中,round一下,繪圖,和原圖一致,但得到了精確到秒的一天的溫度資料。
問題:得到的溫度曲線還是有點太「光滑了」,使用隨機數波動一下效果也不靠譜。
哪位有更好的模擬方法、精確的模擬演算法、更真實的模擬結果 或者 直接有精確到秒的溫度資料 更或者,直接有我這個問題的解決方案,可以給在下指點一二。
續:使用中又發現一利器,資料點隨意拖動啊!!!太實用了!!!
MYSQL 比前一天高的溫度
給定乙個weather表,編寫乙個 sql 查詢,來查詢與之前 昨天的 日期相比溫度更高的所有日期的 id。例如,根據上述給定的weather 返回如下 id 解法一 使用to days to days date select w1.id from weather w1,weather w2 whe...
打卡第一天 模擬退火
找個地方幫自己mark一下 打卡 我昨天計畫在今天看遺傳演算法,但是翻開黃書發現,現代優化演算法這一章節裡,模擬退火排在遺傳的前面。所以今天就先學模擬退火了。在這之前要提一下什麼是現代優化演算法,這個問題會涉及到複雜度 什麼是nph問題 區域性最優與全劇最優,我把查的資料都整理到了一起,在截圖裡面。...
一天一小步 我學C 入門精典 第一天
我看 入門精典第三版 之第一天 學c 也有一段時間了,但是一直都是渾渾噩噩的學,從沒有對自己學的東西做過系統的總結,因此感覺自己總是在乙個台階上上不去,除了經驗外,那就是學習能力了.所以我希望想做好程式設計師首先要做要學會的就是學會學習.我的學習方式就是一步乙個腳印,爭取能反學過的東西牢牢的掌握.下...