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 相关文章推荐
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
php获得url参数中具有&amp;的值的方法
Mar 05 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 PHP
TP3.2框架分页相关实现方法分析
Jun 03 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
PHP5 安装方法
2006/10/09 PHP
我的论坛源代码(一)
2006/10/09 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
2013/07/01 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
Python 12306抢火车票脚本
2018/02/07 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
Canvas波浪花环的示例代码
2020/08/21 HTML / CSS
Foot Locker英国官网:美国知名运动产品零售商
2019/02/21 全球购物
经典c++面试题三
2015/07/08 面试题
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
项目经理的岗位职责
2013/11/23 职场文书
新年爱情寄语
2014/04/08 职场文书
运动会的口号
2014/06/09 职场文书
新闻人物通讯稿
2014/10/09 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang
MySQL update set 和 and的区别
2021/05/08 MySQL