PHP實(shí)現(xiàn)的方程求解示例分析
本文實(shí)例講述了PHP實(shí)現(xiàn)的方程求解。分享給大家供大家參考,具體如下:
一、需求
1. 給出一個(gè)平均值X,反過(guò)來(lái)求出來(lái),得到這個(gè)平均值X的三個(gè)數(shù)X1 ,X2, X3,最大值與最小值的差值要小于0.4(X1-X3都是保留1位小數(shù)的數(shù))
2. 這三個(gè)數(shù)X1, X2, X3代表了三組數(shù)。滿(mǎn)足下面的公式: X1 = [(m1 - m2)/(m1 - m0) ] * 100 (@1);
m0, m1, m2三個(gè)數(shù)的邊界條件如下:
1)48<m0<51
2)0.45<m1 - m1<0.55
3)m1, m2, m3 都是4位的正小數(shù)
二、實(shí)現(xiàn)
根據(jù)需求,我想到了使用兩個(gè)函數(shù)來(lái)進(jìn)行處理。
1)一個(gè)是已知平均數(shù),求得到這個(gè)平均數(shù)滿(mǎn)足條件的三個(gè)數(shù)的函數(shù) createX()
2) 一個(gè)是已知X,求滿(mǎn)足公式 (@1)和邊界條件的三個(gè)小數(shù) m0, m1, m2
下面是具體的代碼實(shí)現(xiàn),不足之處請(qǐng)指出
<?php
//運(yùn)行echo "開(kāi)始運(yùn)行 \n";
run();
echo "運(yùn)行結(jié)束 \n";
function run()
{/*{{{*/$data = array(40.9, 40.5, 44.3, 47.8, 48.5, 42.1, 46.2);
$res = array();
foreach($dataas$key)
{/*{{{*/echo "處理 {$key}\n";
$resX = createX($key);
foreach($resXas$keyX)
{
$keyStr = (string)$key;
$keyXStr = (string)$keyX;
$res[$keyStr][$keyXStr] = createParams4M($keyX);
}
}/*}}}*/error_log(print_r($res,true)."\n", 3, '/tmp/result.log');
var_dump(99999,$res);exit;
return$res;
}/*}}}*///1.產(chǎn)生平均數(shù)function createX($ave)
{/*{{{*/$sum = 3*($ave * 1000);
$x1 = $x2 = $x3 = 0;
$rand4X1X2 = rand(0, 300);
//$x2 > $x1 > $x3;for($i=0; $i< $ave * 1000 + 550; $i++)
{
$x2 = $i;
$x1 = $x2 - $rand4X1X2;
$x3 = $sum -($x1 + $x2);
$positive = $x1 > 0 && $x2 > 0 && $x3 > 0;
$flag = ($x2- $x3 < 400 && $x2 - $x3 > 200);
if($positive && $flag)
{
//echo "捕捉到\n";$roundX1 = round($x1/1000, 1);
$roundX2 = round($x2/1000, 1);
$roundX3 = round($x3/1000, 1);
$res = array($roundX1, $roundX2, $roundX3);
$flag = $roundX1 != $roundX2
&& $roundX3 != $roundX2
&& $roundX3 != $roundX1;
if($flag)
{
//echo "捕捉到\n";return$res;
}
}
}
echo "Fail 未捕捉到\n";
returnarray($x1, $x2, $x3);
}/*}}}*///2.產(chǎn)生平均數(shù)function createParams4M($aveX)
{/*{{{*/$begin = 48000;
$end = 51000;
$m0 = $m1 = $m2 = 0;
$rand4M1M2 = rand(450, 550);
$m0 = rand($begin, $end);
$m1 = $m0 + $rand4M1M2;
$m2 = $m1 - (($m1 - $m0)*$aveX/100);
//echo "捕捉到\n";returnarray(round($m0/1000, 4), round($m1/1000, 4), round($m2/1000, 4));
}/*}}}*/?>
三、遇到的問(wèn)題和不足之處
1. 【數(shù)組key值不能相同】開(kāi)始遇到的是 得到的平均數(shù)的原始三個(gè)值有可能有相同的,但是數(shù)組中的key是不能相同的,于是做了處理。
同時(shí),key值做了 string的轉(zhuǎn)化
2. 【小數(shù)處理】還有就是 因?yàn)樯婕暗氖?4位的小數(shù),循環(huán)遍歷,滿(mǎn)足條件輸出不方便,就 乘以1000擴(kuò)大倍數(shù),最后再除以1000還原。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《php操作office文檔技巧總結(jié)(包括word,excel,access,ppt)》、《PHP數(shù)組(Array)操作技巧大全》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php正則表達(dá)式用法總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- Java實(shí)現(xiàn)解數(shù)獨(dú)的小程序
- JavaScript遍歷求解數(shù)獨(dú)問(wèn)題的主要思路小結(jié)
- python實(shí)現(xiàn)數(shù)獨(dú)算法實(shí)例
- Go語(yǔ)言實(shí)現(xiàn)的最簡(jiǎn)單數(shù)獨(dú)解法
- c++遞歸解數(shù)獨(dú)方法示例
- JQuery開(kāi)發(fā)的數(shù)獨(dú)游戲代碼
- PHP經(jīng)典算法集錦【經(jīng)典收藏】
- php編寫(xiě)的抽獎(jiǎng)程序中獎(jiǎng)概率算法
- php 大數(shù)據(jù)量及海量數(shù)據(jù)處理算法總結(jié)
- 適用于抽獎(jiǎng)程序、隨機(jī)廣告的PHP概率算法實(shí)例
- php中最簡(jiǎn)單的字符串匹配算法
- php數(shù)字轉(zhuǎn)漢字代碼(算法)
- PHP實(shí)現(xiàn)的數(shù)獨(dú)求解問(wèn)題示例
相關(guān)文章
Mysql的Root密碼忘記,查看或修改的解決方法(圖文介紹)
本篇文章是對(duì)關(guān)于Mysql中的Root密碼忘記,查看或修改的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP數(shù)字前補(bǔ)0的自帶函數(shù)sprintf 和number_format的用法(詳解)
下面小編就為大家?guī)?lái)一篇PHP數(shù)字前補(bǔ)0的自帶函數(shù)sprintf 和number_format的用法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
PHP容易被忽略而出錯(cuò)陷阱 數(shù)字與字符串比較
數(shù)字與字符串比較時(shí), 先嘗試將字符串轉(zhuǎn)換為數(shù)字, 再比較, 一個(gè)不能轉(zhuǎn)換為數(shù)字的字符串, 轉(zhuǎn)換結(jié)果為0, 故, 與0比較總返回 true2011-11-11
PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之類(lèi)與反射API詳解
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之類(lèi)與反射API,結(jié)合實(shí)例形式較為詳細(xì)的分析了類(lèi)的驗(yàn)證、檢查、傳參及反射API等概念與操作技巧,需要的朋友可以參考下2016-12-12
php+pdo實(shí)現(xiàn)的購(gòu)物車(chē)類(lèi)完整示例
這篇文章主要介紹了php+pdo實(shí)現(xiàn)的購(gòu)物車(chē)類(lèi),結(jié)合完整實(shí)例形式分析了PHP結(jié)合pdo操作數(shù)據(jù)庫(kù)讀寫(xiě)實(shí)現(xiàn)購(gòu)物車(chē)功能相關(guān)實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2020-01-01
php實(shí)現(xiàn)的mysqldb讀寫(xiě)分離操作類(lèi)示例
這篇文章主要介紹了php實(shí)現(xiàn)的mysqldb讀寫(xiě)分離操作類(lèi),結(jié)合實(shí)例形式分析了php針對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)分離操作實(shí)現(xiàn)技巧,并給出了該封裝類(lèi)的具體使用方法,需要的朋友可以參考下2017-02-02

