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 导出数据到淘宝助手CSV的方法分享
Feb 27 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
Mar 27 PHP
php通过排列组合实现1到9数字相加都等于20的方法
Aug 03 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
WordPress中用于获取文章作者与分类信息的方法整理
Dec 17 PHP
php 如何获取文件的后缀名
Jun 05 PHP
PHP多进程编程实例详解
Jul 19 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 PHP
Yii框架连表查询操作示例
Sep 06 PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 PHP
thinkphp框架类库扩展操作示例
Nov 26 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
php的ajax简单实例
2014/02/27 PHP
php获取系统变量方法小结
2015/05/29 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
JS判定是否原生方法
2013/07/22 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
python获取当前日期和时间的方法
2015/04/30 Python
深入解析Python中的WSGI接口
2015/05/11 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
总裁秘书岗位职责
2013/12/04 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
总经理任命书
2014/03/29 职场文书
国家励志奖学金个人先进事迹材料
2014/05/04 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript
Fluentd搭建日志收集服务
2022/09/23 Servers