GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Branch dev (ec2832)
by t
03:09
created

SMAT   A

Complexity

Total Complexity 28

Size/Duplication

Total Lines 258
Duplicated Lines 0 %

Test Coverage

Coverage 61.9%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 49
c 1
b 0
f 0
dl 0
loc 258
ccs 39
cts 63
cp 0.619
rs 10
wmc 28

16 Methods

Rating   Name   Duplication   Size   Complexity  
A subtotal() 0 2 1
A sum() 0 4 2
A sumsq() 0 6 2
A sqrtpi() 0 3 1
A sumx2py2() 0 8 2
A sumxmy2() 0 8 2
A sec() 0 3 1
A sqrt() 0 3 1
A sinh() 0 3 1
A seriessum() 0 8 2
A sin() 0 3 1
A sumproduct() 0 13 4
A sumx2my2() 0 8 2
A sequence() 0 10 3
A sign() 0 3 2
A sech() 0 3 1
1
<?php
2
/**
3
 * Trait MathAndTrigonometry-S
4
 *
5
 * @link https://www.icy2003.com/
6
 * @author icy2003 <[email protected]>
7
 * @copyright Copyright (c) 2017, icy2003
8
 */
9
namespace icy2003\php\icomponents\excel\mathAndTrigonometry;
10
11
/**
12
 * MathAndTrigonometry-S
13
 */
14
trait SMAT
15
{
16
    /**
17
     * 返回角度的正割值
18
     *
19
     * - 定义:sec(x) = 1 / cos(x),{ x | x ≠ k*π + π/2,k ∈ Z }
20
     *
21
     * @param double $number 必需。 Number 为需要对其进行正割的角度 (以弧度为单位)
22
     *
23
     * @return double
24
     */
25 1
    public static function sec($number)
26
    {
27 1
        return 1 / cos($number);
28
    }
29
30
    /**
31
     * 返回角度的双曲正割值
32
     *
33
     * - y = sech(x) = 1 / cosh(x) = 2 / (e^x + e^(-x))
34
     *
35
     * @param double $number 必需。 Number 为对应所需双曲正割值的角度,以弧度表示
36
     *
37
     * @return double
38
     */
39 1
    public static function sech($number)
40
    {
41 1
        return 1 / self::cosh($number);
42
    }
43
44
    /**
45
     * 返回基于以下公式的幂级数之和
46
     *
47
     * - Series(x, n, m, a) = a1 * x^n + a2 * x^(n + m) + a3 * x^(n + 2*m) + ... + ai * x^(n + (i - 1)*m)
48
     *
49
     * @param double $x 必需。 幂级数的输入值
50
     * @param double $n 必需。 x 的首项乘幂
51
     * @param double $m 必需。 级数中每一项的乘幂 n 的步长增加值
52
     * @param array $coefficients 必需。 与 x 的每个连续乘幂相乘的一组系数。 coefficients 中的值的数量决定了幂级数中的项数
53
     *
54
     * @return double
55
     */
56 1
    public static function seriessum($x, $n, $m, $coefficients)
57
    {
58 1
        $c = count($coefficients);
59 1
        $sum = 0;
60 1
        for ($i = 0; $i < $c; $i++) {
61 1
            $sum += $coefficients[$i] * pow($x, $n + $i * $m);
62
        }
63 1
        return $sum;
64
    }
65
66
    /**
67
     * 可在数组中生成一系列连续数字
68
     *
69
     * @param integer $row 要返回的行数
70
     * @param integer $col 要返回的列数
71
     * @param double $start 序列中第一个数字
72
     * @param double $step 数组中每个连续值递增的值
73
     *
74
     * @return array
75
     */
76 1
    public static function sequence($row, $col, $start = 1, $step = 1)
77
    {
78 1
        $array = [];
79 1
        $k = 1;
80 1
        for ($i = 0; $i < $row; $i++) {
81 1
            for ($j = 0; $j < $col; $j++) {
82 1
                $array[$i][$j] = $start + ($k++ - 1) * $step;
83
            }
84
        }
85 1
        return $array;
86
    }
87
88
    /**
89
     * 确定数字的符号。 如果数字为正数,则返回 1;如果数字为 0,则返回零 (0);如果数字为负数,则返回 -1
90
     *
91
     * @param double $number 必需。 任意实数
92
     *
93
     * @return integer
94
     */
95 4
    public static function sign($number)
96
    {
97 4
        return 0 == $number ? 0 : $number / abs($number);
98
    }
99
100
    /**
101
     * 返回已知角度的正弦
102
     *
103
     * @param double $number 必需。 需要求正弦的角度,以弧度表示
104
     *
105
     * @return double
106
     */
107 1
    public static function sin($number)
108
    {
109 1
        return sin($number);
110
    }
111
112
    /**
113
     * 返回数字的双曲正弦
114
     *
115
     * - y = sinh(x) = (e^x - e^(-x)) / 2;
116
     *
117
     * @param double $number 必需。 任意实数
118
     *
119
     * @return double
120
     */
121 1
    public static function sinh($number)
122
    {
123 1
        return sinh($number);
124
    }
125
126
    /**
127
     * 返回正的平方根
128
     *
129
     * @param double $number 必需。 要计算其平方根的数字
130
     *
131
     * @return double
132
     */
133 1
    public static function sqrt($number)
134
    {
135 1
        return sqrt($number);
136
    }
137
138
    /**
139
     * 返回某数与 pi 的乘积的平方根
140
     *
141
     * @param double $number 必需。 与 pi 相乘的数
142
     *
143
     * @return double
144
     */
145 1
    public static function sqrtpi($number)
146
    {
147 1
        return sqrt($number * pi());
148
    }
149
150
    /**
151
     * 返回列表或数据库中的分类汇总
152
     *
153
     * @todo
154
     *
155
     * @return void
156
     */
157
    public static function subtotal()
158
    {
159
160
    }
161
162
    /**
163
     * 可将值相加
164
     *
165
     * @param double|array $number1 要相加的第一个数字
166
     *
167
     * @return double
168
     */
169 1
    public static function sum($number1)
170
    {
171 1
        $numbers = is_array($number1) ? $number1 : func_get_args();
172 1
        return array_sum($numbers);
173
    }
174
175
    /**
176
     * 在给定的几组数组中,将数组间对应的元素相乘,并返回乘积之和
177
     *
178
     * - 注:office 页面的例子结果应该是 17.58 而不是 21.60
179
     *
180
     * @param array $arrays 必需。 其相应元素需要进行相乘并求和的第一个数组参数
181
     *
182
     * @return double
183
     */
184 1
    public static function sumproduct($arrays)
185
    {
186 1
        $arr = [];
187 1
        foreach ($arrays as $array) {
188 1
            $count = count($array);
189 1
            for ($i = 0; $i < $count; $i++) {
190 1
                empty($arr[$i]) && $arr[$i] = [];
191 1
                array_push($arr[$i], $array[$i]);
192
            }
193
        }
194
        return array_sum(array_map(function ($rows) {
195 1
            return array_product($rows);
196 1
        }, $arr));
197
    }
198
199
    /**
200
     * 返回参数的平方和
201
     *
202
     * @param double $number1 Number1 是必需的,后续数字是可选的
203
     *
204
     * @return double
205
     */
206
    public static function sumsq($number1)
207
    {
208
        $numbers = is_array($number1) ? $number1 : func_get_args();
209
        return array_sum(array_map(function ($num) {
210
            return $num * $num;
211
        }, $numbers));
212
    }
213
214
    /**
215
     * 返回两数组中对应数值的平方差之和
216
     *
217
     * - y = ∑(x^2 - y^2)
218
     *
219
     * @param array $arrayX 必需。 第一个数组或数值区域
220
     * @param array $arrayY 必需。 第二个数组或数值区域
221
     *
222
     * @return double
223
     */
224
    public static function sumx2my2($arrayX, $arrayY)
225
    {
226
        $count = count($arrayX);
227
        $sum = 0;
228
        for ($i = 0; $i < $count; $i++) {
229
            $sum += pow($arrayX[$i], 2) - pow($arrayY[$i], 2);
230
        }
231
        return $sum;
232
    }
233
234
    /**
235
     * 返回两数组中对应数值的平方和之和
236
     *
237
     * - y = ∑(x^2 + y^2)
238
     *
239
     * @param array $arrayX 必需。 第一个数组或数值区域
240
     * @param array $arrayY 必需。 第二个数组或数值区域
241
     *
242
     * @return double
243
     */
244
    public static function sumx2py2($arrayX, $arrayY)
245
    {
246
        $count = count($arrayX);
247
        $sum = 0;
248
        for ($i = 0; $i < $count; $i++) {
249
            $sum += pow($arrayX[$i], 2) + pow($arrayY[$i], 2);
250
        }
251
        return $sum;
252
    }
253
254
    /**
255
     * 返回两数组中对应数值之差的平方和
256
     *
257
     * - y = ∑(x - y)^2
258
     *
259
     * @param array $arrayX 必需。 第一个数组或数值区域
260
     * @param array $arrayY 必需。 第二个数组或数值区域
261
     *
262
     * @return double
263
     */
264
    public static function sumxmy2($arrayX, $arrayY)
265
    {
266
        $count = count($arrayX);
267
        $sum = 0;
268
        for ($i = 0; $i < $count; $i++) {
269
            $sum += pow($arrayX[$i] - $arrayY[$i], 2);
270
        }
271
        return $sum;
272
    }
273
}
274