2013-04-04 2 views
-1

У меня есть различное количество коэффициентов между двумя уравнениями, которые мне нужно сравнить. т.е:Вычисление процентной разницы между уравнениями

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

Эти коэффициенты могут быть от 0-> инф.

Мне нужно сравнить каждое уравнение с тем, которое было до него, и вернуть процентную разницу между этими двумя уравнениями. У меня есть значения для X, Y и коэффициенты для каждого из уравнений, которые мне нужны, чтобы найти процентную разницу для.

Я мог бы принять стандартную процентную разницу между двумя известными значениями Y и рассчитать процентную разницу, но поскольку это полиномы, разница процентов всегда будет меняться.

Я мог бы также взять круг с заданным радиусом и найти угол каждого пересечения уравнений с этой окружностью относительно оси X, чтобы найти степень, которая могла бы быть скоррелирована с процентом с эквивалентом 90 градусов до 100% изменения между уравнениями. Тем не менее, я не был бы уверен, что это будет точно, поскольку все, что находится за пределами круга, будет иметь потенциально разную процентную разницу.

Это будет написано на Perl.

+2

Очень трудно понять, что вы получаете в. Каков более широкий контекст здесь? Чего вы пытаетесь достичь? – YXD

+0

с точки зрения кода, что вы пробовали? – imran

+3

Я не думаю, что OP знает формулу для процентного изменения. О человечество! Изменение процента всегда (после - раньше)/раньше. т. е. '(f (x_1) - f (x_0))/f (x_0)' в вашем случае. * SIGH * –

ответ

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 становится функциональным языком, hah – gaussblurinc

Смежные вопросы