Программа, вычисляющая криволинейный интеграл второго рода.
http://www.support17.com/component/content/136.html?task=view - в самом низу страницы решение), а она считает неправильно. Помогите найти ошибку. Суть программы - сначала сводим к обычному определенному интегралу, затем считаем определенный методом Гаусса. Вот код:
Здравствуйте. Написал программу для решения криволинейного интеграла второго рода (
Код:
<?php
$b = 1; //верхний предел по переменной интегрирования
$a = 0; ///нижний предел по переменной интегрирования
function dx($x, $y, $z) //выражение dx
{
return pow($x, 3);
}
function dy($x, $y, $z) //выражение dy
{
return 2*$x*pow($y, 2);
}
function dz($x, $y, $z) //выражение dz
{
return -3*pow($z, 2);
}
function x($t) //выражения в фигурной скобке в задании
{
return 1-$t;
}
function y($t)
{
return 2-3*$t;
}
function z($t)
{
return -2+2*$t;
}
function dif_dx($x, $y, $z) //взятие производных по нужным переменным
{
$h = 0.001;
return (dx($x+$h, $y, $z) - dx($x, $y, $z)) / $h;
}
function dif_dy($x, $y, $z)
{
$h = 0.001;
return (dy($x, $y+$h, $z) - dy($x, $y, $z)) / $h;
}
function dif_dz($x, $y, $z)
{
$h = 0.001;
return (dz($x, $y, $z+$h) - dz($x, $y, $z)) / $h;
}
function func_integr($t) //сведение к определенному интегралу
{
$x=x($t);
$y=y($t);
$z=z($t);
return dx($x, $y, $z)*dif_dx($x, $y, $z)+dy($x, $y, $z)*dif_dy($x, $y, $z)+dz($x, $y, $z)*dif_dz($x, $y, $z); //Здесь нужно перечислить таким же образом все квадраты дифференциалов по функциям
}
{//вычисляем определенный интеграл методом Гаусса
$n=10;
$I=0;
for ($i = 0; $i < $n; $i++)
{
$r=$a+($i*($b-$a)/$n);
$l=$a+(($i+1)*($b-$a)/$n);
$I_=(func_integr((($l+$r)/2)-(($r-$l)/sqrt(12)))+func_integr((($l+$r)/2)-(($r-$l)/sqrt(12))))*($r-$l)/2;
$I+=abs($I_);
}
$res=$I;
}
echo ("Result: $res");
?>
$b = 1; //верхний предел по переменной интегрирования
$a = 0; ///нижний предел по переменной интегрирования
function dx($x, $y, $z) //выражение dx
{
return pow($x, 3);
}
function dy($x, $y, $z) //выражение dy
{
return 2*$x*pow($y, 2);
}
function dz($x, $y, $z) //выражение dz
{
return -3*pow($z, 2);
}
function x($t) //выражения в фигурной скобке в задании
{
return 1-$t;
}
function y($t)
{
return 2-3*$t;
}
function z($t)
{
return -2+2*$t;
}
function dif_dx($x, $y, $z) //взятие производных по нужным переменным
{
$h = 0.001;
return (dx($x+$h, $y, $z) - dx($x, $y, $z)) / $h;
}
function dif_dy($x, $y, $z)
{
$h = 0.001;
return (dy($x, $y+$h, $z) - dy($x, $y, $z)) / $h;
}
function dif_dz($x, $y, $z)
{
$h = 0.001;
return (dz($x, $y, $z+$h) - dz($x, $y, $z)) / $h;
}
function func_integr($t) //сведение к определенному интегралу
{
$x=x($t);
$y=y($t);
$z=z($t);
return dx($x, $y, $z)*dif_dx($x, $y, $z)+dy($x, $y, $z)*dif_dy($x, $y, $z)+dz($x, $y, $z)*dif_dz($x, $y, $z); //Здесь нужно перечислить таким же образом все квадраты дифференциалов по функциям
}
{//вычисляем определенный интеграл методом Гаусса
$n=10;
$I=0;
for ($i = 0; $i < $n; $i++)
{
$r=$a+($i*($b-$a)/$n);
$l=$a+(($i+1)*($b-$a)/$n);
$I_=(func_integr((($l+$r)/2)-(($r-$l)/sqrt(12)))+func_integr((($l+$r)/2)-(($r-$l)/sqrt(12))))*($r-$l)/2;
$I+=abs($I_);
}
$res=$I;
}
echo ("Result: $res");
?>