Php 粘度矩阵的多边形矩阵计算

Php 粘度矩阵的多边形矩阵计算,php,Php,我正在写一个程序,它需要不同温度下的不同气体粘度值。我所掌握的数据如下。我是php编程新手。谁能告诉我背后的逻辑。这样我就可以通过程序在任何需要的温度下获得粘度。谢谢 Data for viscosity calculation (dyn. visc. [Ns/m² = kg/ms]; Source: VDI Wärmeatlas Temp. [°C] 0 100 200 300 400

我正在写一个程序,它需要不同温度下的不同气体粘度值。我所掌握的数据如下。我是php编程新手。谁能告诉我背后的逻辑。这样我就可以通过程序在任何需要的温度下获得粘度。谢谢

Data for viscosity calculation (dyn. visc. [Ns/m² = kg/ms]; Source: VDI Wärmeatlas                      
Temp. [°C]  0     100        200             300         400         500

CO2 1,37E-05    1,82E-05    2,22E-05    2,59E-05    2,93E-05    3,24E-05

O2  1,92E-05    2,43E-05    2,88E-05    3,29E-05    3,67E-05    4,03E-05

H2O 9,00E-06    1,25E-05    1,61E-05    1,97E-05    2,33E-05    2,69E-05

N2  1,66E-05    2,09E-05    2,47E-05    2,82E-05    3,14E-05    3,42E-05

您可以轻松地将数据放入Excel中。下面是显示结果的曲线图,以及二阶多项式:


我终于得到了正确的答案。如果有人需要它,我会把它贴在这里:

class baseViscosityCalc {

    public $arViscosity = array(
        array(0, 1.37e-05, 1.92e-05, 9.00e-06, 1.66e-05),
        array(100, 1.82e-05, 2.43e-05, 1.25e-05, 2.09e-05),
        array(200, 2.22e-05, 2.88e-05, 1.61e-05, 2.47e-05),
        array(300, 2.59e-05, 3.29e-05, 1.97e-05, 2.82e-05),
        array(400, 2.93e-05, 3.67e-05, 2.33e-05, 3.14e-05),
        array(500, 3.24e-05, 4.03e-05, 2.69e-05, 3.42e-05)
    );

    public function getViscosityData($DCat) {

        $arValue = array(
            'Temperature' => 0.0,
            'CO2' => 0.0,
            'O2' => 0.0,
            'H2O' => 0.0,
            'N2' => 0.0
        );

        for ($i = 0; $i < count($this->arViscosity); $i++) {
            $arValue['Temperature'] = $DCat;
            if ($DCat < $this->arViscosity[0][0]) {
                $arValue['CO2'] = $this->arViscosity[0][1];
                $arValue['O2'] = $this->arViscosity[0][2];

                $arValue['H2O'] = $this->arViscosity[0][3];
                $arValue['N2'] = $this->arViscosity[0][4];
                break;
            }
            if ($DCat > $this->arViscosity[count($this->arViscosity) - 1][0]) {
                $arValue['CO2'] = $this->arViscosity[count($this->arViscosity) - 1][1];
                $arValue['O2'] = $this->arViscosity[count($this->arViscosity) - 1][2];

                $arValue['H2O'] = $this->arViscosity[count($this->arViscosity) - 1][3];
                $arValue['N2'] = $this->arViscosity[count($this->arViscosity) - 1][4];
                breaK;
            }

            if ($DCat > $this->arViscosity[$i][0] && $DCat < $this->arViscosity[$i + 1][0]) {

                $factor = ($DCat - $this->arViscosity[$i][0]) / ($this->arViscosity[$i + 1][0] - $this->arViscosity[$i][0]);
                $arValue['CO2'] = $factor * ($this->arViscosity[$i + 1][1] - $this->arViscosity[$i][1]) + $this->arViscosity[$i][1];
                $arValue['O2'] = $factor * ($this->arViscosity[$i + 1][2] - $this->arViscosity[$i][2]) + $this->arViscosity[$i][2];
                $arValue['H2O'] = $factor * ($this->arViscosity[$i + 1][3] - $this->arViscosity[$i][3]) + $this->arViscosity[$i][3];
                $arValue['N2'] = $factor * ($this->arViscosity[$i + 1][4] - $this->arViscosity[$i][4]) + $this->arViscosity[$i][4];
                break;
            }
        }
        return $arValue;
    }
}
class baseViscosityCalc{
public$ark=数组(
阵列(0,1.37e-05,1.92e-05,9.00e-06,1.66e-05),
阵列(100,1.82e-05,2.43e-05,1.25e-05,2.09e-05),
阵列(200,2.22e-05,2.88e-05,1.61e-05,2.47e-05),
阵列(300,2.59e-05,3.29e-05,1.97e-05,2.82e-05),
阵列(400,2.93e-05,3.67e-05,2.33e-05,3.14e-05),
阵列(500,3.24e-05,4.03e-05,2.69e-05,3.42e-05)
);
公共函数getViscosityData($DCat){
$arValue=array(
“温度”=>0.0,
‘CO2’=>0.0,
“O2”=>0.0,
‘H2O’=>0.0,
“N2”=>0.0
);
对于($i=0;$iar粘滞);$i++){
$arValue['Temperature']=$DCat;
如果($DCat<$this->arc[0][0]){
$arValue['CO2']=$this->arValue[0][1];
$arValue['O2']=$this->arValue[0][2];
$arValue['H2O']=$this->arValue[0][3];
$arValue['N2']=$this->arValue[0][4];
打破
}
如果($DCat>$this->ar粘性[计数($this->ar粘性)-1][0]){
$arValue['CO2']=$this->arvisicy[count($this->arvisicy)-1][1];
$arValue['O2']=$this->arvisicy[count($this->arvisicy)-1][2];
$arValue['H2O']=$this->arvisicy[count($this->arvisicy)-1][3];
$arValue['N2']=$this->arvisicy[count($this->arvisicy)-1][4];
打破
}
如果($DCat>$this->arvisicy[$i][0]&&$DCat<$this->arvisicy[$i+1][0]){
$factor=($DCat-$this->arvisicy[$i][0])/($this->arvisicy[$i+1][0]-$this->arvisicy[$i][0]);
$arValue['CO2']=$factor*($this->arvisicy[$i+1][1]-$this->arvisicy[$i][1])+$this->arvisicy[$i][1];
$arValue['O2']=$factor*($this->ar粘滞[$i+1][2]-$this->ar粘滞[$i][2])+$this->ar粘滞[$i][2];
$arValue['H2O']=$factor*($this->arvisicy[$i+1][3]-$this->arvisicy[$i][3])+$this->arvisicy[$i][3];
$arValue['N2']=$factor*($this->ar粘滞[$i+1][4]-$this->ar粘滞[$i][4])+$this->ar粘滞[$i][4];
打破
}
}
返回$arValue;
}
}

我的建议是,使用最小二乘法拟合粘度=c0+c1*T+c2*T^3+..的曲线,每种气体对应一条曲线,然后在以气体为关键的位置绘制地图或关联数组。我仍然不确定如何解决它。你能详细说明一下吗?或者给我举个代码的例子。我也无法在互联网上找到任何与之相关的东西。请指导我做进一步的研究。不,我不能/不会为你解决它。从一条CO2曲线开始:你能用温度作为自变量,粘度作为因变量来绘制你的六个点吗?如果是,它看起来像一条直线还是有一些曲率?你能用谷歌搜索最小二乘拟合吗?可以用Excel完成。谢谢你的建议。我已经实现了最小二乘拟合,并且正在得到结果。虽然曲线不是一条直线,所以它的答案有一点变化。我刚刚为你们发布了四条曲线,包括拟合方程。现在应该很容易了。