Итак, для моего математического класса нас попросили написать программу, которая выполняет и печатает метод Ньютона до тех пор, пока значения не сойдутся и у нас не будет корня для функции. Сначала я думал, что это будет легко. Это было до тех пор, пока я просто не смог получить значения, полученные в первый раз, для использования во второй раз. Мои знания языка базовые. Действительно простой, так что то, что вы собираетесь увидеть, может быть некрасивым.
#!usr/bin/perl
use PDL;
print "First guess? (this is x0)\n";
$xorig = <>;
do {
&fx;
} until ($fex == 0);
sub fx {
if ($xn == 0) {
$x = $xorig;
}
else {
$x = $xn;
}
print "What is the coefficient (for each factor) of your function?\n";
$fcx = <STDIN>;
push @coefficient_of_x, $fcx;
print "... times x to the (enter exponent, if no exponent, enter 1. if no x, enter 0)?\n";
$fex = <STDIN>;
push @exponent_x, $fex;
chomp ($fcx, $fex, $x, $xorig);
$factor = $fcx * ($x ** $fex);
push @fx, $factor;
}
my $fx = 0;
foreach my $variable (@fx) {
$fx = $variable + $fx #THIS PROVIDES A VALUE FOR THE GIVEN F(X) WITH A GIVEN X VALUE
}
print "f($x)=$fx\n";
do {
&fprimex;
} until ($fprimeex == 0);
sub fprimex {
if ($xn == 0) {
$x = $xorig;
}
else {
$x = $xn;
}
print "What is the coefficient (for each factor) of your derivative function?\n";
$fprimecx = <STDIN>;
push @coefficient_of_fpx, $fprimecx;
print "... times x to the (enter exponent, if no exponent, enter 1. if no x, enter 0)?\n";
$fprimeex = <STDIN>;
push @exponent_fpx, $fprimeex;
chomp ($fprimecx, $fprimeex, $x, $xorig);
$factorprime = $fprimecx * ($x ** $fprimeex);
push @fprimex, $factorprime;
}
$fprimex = 0;
foreach my $variableprime (@fprimex) {
$fprimex = $variableprime + $fprimex #THIS PROVIDES A VALUE FOR THE GIVEN F'(X) WITH THAT SAME X VALUE
}
print "f'($x)=$fprimex\n";
sub x0 {
$xn = $xorig - $fx / $fprimex; #THIS IS NEWTON'S METHOD EQUATION FOR THE FIRST TIME
push @newxn, $xn;
print "xn ia $xn\n";
}
&x0;
foreach $value (@exponent_x) {
$exponent_x = $xn ** $value;
push @part1, $exponent_x;
$part1 = @part1;
}
foreach $value2 (@coefficient_of_x) {
$part2 = $value2 * @part1;
push @final1, $part2;
}
print "@part1\n";
print "@final1\n";
По сути, что это такое, я сначала прошу первое предположение. Я использую это значение для определения коэффициентов и показателей степени f(x), чтобы получить значение f(x) в терминах заданного x. Я делаю это снова для f'(x). Затем я выполняю метод Ньютона в первый раз и получаю новое значение xn. Но мне трудно получить значения для f(xn) и f'(xn), а это означает, что я не могу получить x(n+1) и не могу продолжить метод Ньютона. Мне нужна помощь.