2013-04-04 64 views
-1

我需要比較兩個方程之間的係數數量。 即:計算方程之間的百分比差異

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

這些係數可以從0-> INF的任何地方。

我需要將每個方程與之前的方程進行比較,並返回這兩個方程之間的百分比差異。我有X,Y的值,以及我需要找到每個方程的百分比差的係數。

我可以採用兩個已知Y值之間的標準百分比差異來計算百分比差異,但由於這些是多項式,百分比差異總是會發生變化。

我也可以用一個設定的半徑取一個圓,找出每個方程相對於X軸與這個圓相交的角度,以便找到一個與90度相當的百分比相關的程度至100%之間的變化。但我不確定這是否準確,因爲圈外以外的任何內容都可能有不同的百分比差異。

這將用Perl編寫。

+2

很難理解你做了什麼。這裏更廣泛的背景是什麼?你想達到什麼目的? – YXD 2013-04-04 14:15:46

+0

在代碼方面,你有什麼嘗試? – imran 2013-04-04 14:16:59

+3

我不認爲OP知道百分比變化的公式。哦人性!百分比變化總是(之前)/之前。即在你的情況下'(f(x_1) - f(x_0))/ f(x_0)'。 * SIGH * – 2013-04-04 14:23:44

回答

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; 
    }; 
} 
+0

用'List :: Util' Perl變成了函數式語言,呵呵 – gaussblurinc 2013-04-04 16:51:36