PHP实现的方程求解示例分析


Posted in PHP onNovember 11, 2016

本文实例讲述了PHP实现的方程求解。分享给大家供大家参考,具体如下:

一、需求

1. 给出一个平均值X,反过来求出来,得到这个平均值X的三个数X1 ,X2, X3,最大值与最小值的差值要小于0.4(X1-X3都是保留1位小数的数)
2. 这三个数X1, X2, X3代表了三组数。满足下面的公式: X1 = [(m1 - m2)/(m1 - m0) ] * 100 (@1);

m0, m1, m2三个数的边界条件如下:

1)48<m0<51
2)0.45<m1 - m1<0.55
3)m1, m2, m3 都是4位的正小数

二、实现

根据需求,我想到了使用两个函数来进行处理。

1)一个是已知平均数,求得到这个平均数满足条件的三个数的函数 createX()

2) 一个是已知X,求满足公式 (@1)和边界条件的三个小数 m0, m1, m2

下面是具体的代码实现,不足之处请指出

<?php
//运行echo "开始运行 \n";
run();
echo "运行结束 \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.产生平均数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.产生平均数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));
}/*}}}*/?>

三、遇到的问题和不足之处

1. 【数组key值不能相同】开始遇到的是 得到的平均数的原始三个值有可能有相同的,但是数组中的key是不能相同的,于是做了处理。

同时,key值做了 string的转化

2. 【小数处理】还有就是 因为涉及的是 4位的小数,循环遍历,满足条件输出不方便,就 乘以1000扩大倍数,最后再除以1000还原。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
Linux下将excel数据导入到mssql数据库中的方法
Feb 08 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
PHP常用的缓存技术汇总
May 05 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 PHP
PHP使用静态方法的几个注意事项
Sep 16 PHP
基于PHP实现商品成交时发送短信功能
May 11 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 PHP
php5.3后静态绑定用法详解
Nov 11 #PHP
php基于curl实现的股票信息查询类实例
Nov 11 #PHP
PHP中STDCLASS用法实例分析
Nov 11 #PHP
php遍历替换目录下文件指定内容的方法
Nov 10 #PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 #PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 #PHP
Linux平台php命令行程序处理管道数据的方法
Nov 10 #PHP
You might like
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
php实现文件下载更能介绍
2012/11/23 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
理清apply(),call()的区别和关系
2011/08/14 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
js for终止循环 跳出多层循环
2018/10/04 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
Python入门之modf()方法的使用
2015/05/15 Python
python中使用序列的方法
2015/08/03 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
怎样让char类型的东西转换成int类型
2013/12/09 面试题
员工试用期考核自我鉴定
2014/04/13 职场文书
2014年路政工作总结
2014/12/10 职场文书
优秀教师个人材料
2014/12/15 职场文书
安全承诺书
2015/01/19 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
2016年安全月活动总结
2016/04/06 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技