计算方程之间的百分比差异

时间:2013-04-04 14:13:28

标签: perl math

我需要比较两个方程之间的系数不同。 即:

    Y = coef3*X^3 + coef2*X^2 + coef1*X + coef0

这些系数可以是0-> 0的任何值。 INF。

我需要将每个等式与之前的等式进行比较,并返回这两个等式之间的百分比差异。我有X,Y的值,以及我需要找到百分比差异的每个方程的系数。

我可以采用两个已知Y值之间的标准百分比差异并计算百分比差异,但由于这些是多项式,百分比差异将始终在变化。

我还可以采用一个具有设定半径的圆,并找到每个方程与该圆相对于X轴相交的角度,以便找到一个可与90度相等的百分比相关的度数。方程之间100%的变化。然而,我不确定这是否准确,因为圈外的任何东西都有可能不同的百分比差异。

这将用Perl编写。

1 个答案:

答案 0 :(得分:1)

我假设如果您上交以下内容,您的老师现在会得到帮助:

#!/usr/bin/env perl

use 5.012;
use strict;
use warnings;

use List::Util qw( sum );

my @f = map polynomial_maker(@$_), (
    [4, 2, 1], # 4x^2 + 2x + 1
    [10, undef, undef, undef, 1, 0], # 10x^5 + x
);

my @v = (1, 2, 3, 4);

for my $f (@f) {
    for my $i (1 .. $#v) {
        my $y0 = $f->($v[$i - 1]);
        my $y1 = $f->($v[$i]);
        printf "y0 = %.2f\ty1 = %.2f\t%% ch = %.2f\n",
            $y0,
            $y1,
            100 * (($y1 - $y0) / $y0)
        ;
    }
    say '-' x 80;
}

sub polynomial_maker {
    my @coeff = reverse @_;
    return sub {
        no warnings 'uninitialized';
        sum map $coeff[$_] * ($_[0]**$_), 0 .. $#coeff;
    };
}