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在线生成ico文件的代码
Oct 09 PHP
PHP扩展编写点滴 技巧收集
Mar 09 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
php curl的深入解析
Jun 02 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
十大使用PHP框架的理由
Sep 26 PHP
php使用pear_smtp发送邮件
Apr 15 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 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实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
php正则修正符用法实例详解
2016/12/29 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Django URL传递参数的方法总结
2016/08/28 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
Python循环实现n的全排列功能
2019/09/16 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
Python是怎样处理json模块的
2020/07/16 Python
轻松制作精彩视频:Animoto
2018/09/19 全球购物
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
机械制造毕业生求职信
2014/03/03 职场文书
报关报检委托书
2014/04/08 职场文书
年度评优评先方案
2014/06/03 职场文书
医学生求职信
2014/07/01 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
篮球赛新闻稿
2015/07/17 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书