|
|
|
| Помогите реализовать функции tgx, sinx разложением в ряд Маклорена, стандартные функции sinx, cosx заложенные в языке нельзя?
Как реализовать на PHP, помогите пожалуйста?
В универе дали такое задание, нужно построить графики на PHP, и эти функции чтобы работали
но сам его реализовать не могу .... | |
|
|
|
|
|
|
|
для: asked86
(13.02.2010 в 17:57)
| | вот поглядите
http://softtime.ru/forum/read.php?id_forum=2&id_theme=70294
Там несовсем тот ряд, но как считается - видно | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 20:05)
| | Помогите реализовать данный ряд на PHP: S=x^3/3 - x^5/15 +...+(-1)^n+1 * (x^2n+1)/4n^2-1
У меня не получается, $e=0.000000001...... Это ряд Маклорена для tg | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 10:57)
| | показывайте код.
Поправим.
И сперва перепишите формулу суммы так, чтобы она соответствовала действительности. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 11:08)
| | S=x^3/3 + x^5/15 -...+(-1)^n+1 * (x^2n+1)/4n^2-1
Условие не могу задать, это ряд Маклорена для tg?
$e = 0.000001;.
$x = вводим
$S = 0;
$a = $x;
$n = 1;
while (?) {
$a =$a * $x * $x;
$S = $S + $a/(4 * $n * $n - 1);
$a = $a * -1;
$n++;
}
|
| |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 11:15)
| | Это то, что Вы, не пытаясь вникнуть, слямзили с поста Fractured#
А по поводу этой строки. S=x^3/3 + x^5/15 -...+(-1)^n+1 * (x^2n+1)/4n^2-1
Как у Вас обозначено умножение?
какой приоритет операций?
Резюме. В каждой строке видно, что Вам чихать на эту задачу.
Просто интересно, почему тогда должно "не чихать" нам - отвечающим? | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 11:23)
| | ->Это то, что Вы, не пытаясь вникнуть, слямзили с поста Fractured#
Не "слямзил" я посмотрел как там они задачу эту решали, и мне интересно стало что такая подобная задача когда то решалась. И взял отрывок кода оттуда. Чтобы колесо 100 раз не придумывать, и сейчас очень сильно интересно какое условие поставить чтобы программа заработала? Поймите меня правильно, мне интересно как можно ее реализовать/
->Просто интересно, почему тогда должно "не чихать" нам - отвечающим?
Поймите правильно меня, мне тяжеловать разбираться, с математикой есть проблемы. Я математику серьезно начал изучать 2 месяца назад. Все что успел пройти это дошел до тригонометрии 10 класса по учебнику Мордковича. Просто пока моих знаний здесь не хватает, поэтому и задал вопрос. А вообще решить эту задачу охото. Если Вам не сложно помогите разобраться, буду благодарен?
S=x^3/3 + x^5/15 -...+(-1)^n+1 * (x^2*n+1)/4*n^2-1 | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 11:34)
| | x^2*n+1
Расставьте скобки в этом выражении
Собственно, условие очень простое.
Чтобы предыдущий результат отличался от последующего не более чем на эпсилон.
До некоторой степени можно будет ожидать, что не более чем станет и до точного значения.
На самом деле, всё несколько хитрее, но тогда (оценка погрешности, предел интеграла ошибки и т.д.) начнется уже настоящая математика, а не простейшая арифметика. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 12:02)
| | Извините, тут что - то не правильно или что?
А как условие записать можно, просто в рядах не рублю вообще?
Чтобы предыдущий результат отличался от последующего не более чем на эпсилон. А в цикле этот результат у меня $S если я правильно понимаю да.
$e = 0.000001;.
$x = вводим
$S = 0;
$a = $x;
$n = 1;
while () {
$a =$a * $x * $x;
$S = $S + $a/(4 * $n * $n - 1);
$a = $a * -1;
$n++;
}
|
| |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 12:44)
| | Если хотите, могу показать Вам, как синус сделать.
С ним как-то более однозначно. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 14:03)
| | Ну я не против, если можете то я только за!!!
А условие и у тангенса там одинаковое же будет или нет? | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 14:15)
| | Для тангенса Вы все еще не можете изобразить формулу суммирования.
Плюс к тому, то что Вы пытаетесь изобразить идет вразрез с рядом Маклорена тангенса - посмотреть его можете в той же википедии. Ряд там определен через число Белла, вычислять которые хотя и возможно, но как-то лениво.
В конце концов имея синус, остальное вычисляется влет через него. Надо лишь помнить об отрезке, на котором ряд сходится. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 14:48)
| | А как синус вычисляется, у Вас есть решение?
в принципе если будет синус, можно найти и косинус, а потом записать tgx=sinx/cosx | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 14:55)
| |
<?php
$e = 0.000001; $S = $a = $x = 3.1415926/6; $n = 1;
do{
$n+=2;
$a *= (- $x*$x)/(($n-1)*$n);
$S += $a;
}while( abs($a) > $e );
echo $S;
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 14:57)
| | Это ведь функция для вычисления синуса? Что - то вместо n ввожу допустим 30 он мне не тот результат выдает. А в калькуляторе синус 30 равен 0.5 | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 16:02)
| | у меня в примере как раз и показано вычисление угла 30 градусов.
n менять не следует.
Следует вспомнить, в чем измеряют углы. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 16:06)
| | Извини, все правильно вычисляет!
Я проверил потом отлично работает! Спасибо большое.
Можно спросить, а если tgx вычислять то так правильно:
$x= 3.1415926/4;
$e = 0.000001;
$S = 0;
$a = $x;
$n = 1;
do
{
$a = $a * $x * $x;
$S = $S + $a/(4 * $n * $n - 1);
$a = $a * -1;
$n++;
} while (abs($a)>$e);
echo "".$S;
|
tg45 равен единице. А в этом коде вычисляет ни так, в чем проблема? | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 16:58)
| | > tg45 равен единице
Может наконец стоит понять, что "тангенс сорока пяти" и "тангенс сорока пяти градусов" -- вещи абсолютно разные? Это не зависит от того, что у тебя там в калькуляторе. | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 16:02)
| | > синус 30 равен 0.5
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Тень&
(14.02.2010 в 16:31)
| | проверь. и убедишься сам. | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 17:03)
| | Хватит лапшу вешать. Калькулятор чтоли трудно достать?
sin(30) приблизительно равен -0.988
tg(45) приблизительно равен 1.62
cos(a) = sin(a+Pi/2) | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 17:11)
| | Да нет все правильно, у меня прото в инженерном калькуляторе градусы стояли, а надо было радианы поставить. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 17:11)
| | А как можно представить tgx ну принцип понятен, вот допустим если раскладен на ряды то получается:
x+1/3*x^3+2/15*x^5+17/315*x^7+62/2835*x^9 +...+..
|
Как его можно записать в цикле? | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 17:35)
| | Да также примерно.
Только нужно сперва написать вычисление тех самых чисел Белла, через которые ряд тангенса определен. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 17:39)
| | Вот это по Тейлору в википедии формула есть:
x+1/3*x^3+2/15*x^5+17/315*x^7+62/2835*x^9 +...+..
|
Вот теперь в цикле не могу ее определить чтобы правильно вычисляла? | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 17:42)
| | там самое интересное в хвосте этой формулы, а не в середине. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 17:46)
| | Ну тогда чтобы не парится, можно ведь вычислить косинус. А поскольку у нас есть синус можно найти и тангенс. Ведь tgx=sinx/cosx
В общем я вот так реализацию косинуса сделал, но не правильно вычисляет:
$e = 0.000000001; $S = $a = $x = 3.1415926/6; $n = 0;
do{
$n+=2;
$a *= (- $x*$x)/($n*$n);
$S += $a;
}while( abs($a) > $e );
$res = 1 - $S;
echo "cos = ". $res;
|
| |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 17:55)
| | > $res = 1 - $S;
cosX = 1 - sinX ? Это какой-то неведомый мне прорыв в науке. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 18:00)
| | $res = 1 - $S;
Согласен, это лишнее я сам сейчас полез исправлять!
Но все равно результат не правильный выдает!. | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 18:04)
| | еще бы | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 18:05)
| | Trianon Видите у меня в условии задачи написано, нельзя использовать тригонометрические функции. Тут только тогда мне писать функцию для вычисления cosx надо.
Я ее написал, а она не работает. Вернее вычисляет не правильно.
$e = 0.000000001; $S = $a = $x = 3.1415926/6; $n = 0;
do{
$n+=2;
$a *= (- $x*$x)/($n*$n);
$S += $a;
}while( abs($a) > $e );
echo "cos = ". $S;
|
| |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 18:09)
| | вижу.
Вижу также и то, что Вы не разобрались, как этот, не такой уж сложный в сущности, цикл работает. Иначе бы написали всё корректно.
Хотя для того чтоб вычислить косинус через синус смещенного аргумента, даже и это не требуется.
От меня-то Вы что хотите?
Второго халявного примера не будет. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 18:05)
| | Вот косинус нашли. Теперь можно легко tgx=sinx/cosx
Проверьте так?
$e = 0.00000001; $S = $a = $x = 3.1415926/6; $n = 1;
do{
$n+=2;
$a *= (- $x*$x)/(($n-1)*$n);
$S += $a;
}while( abs($a) > $e );
echo $S."<br>";
$sin=$S
$cos = sqrt(1 - $S*$S);
$tgx= $sinx/$cosx;
echo "tgx = ".$tgx;
|
| |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 18:16)
| | для положительных косинусов - возможно. Для отрицательных - враки.
но Вы применили корень - его можно применять? | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 18:20)
| | ->но Вы применили корень - его можно применять?
А что, Вы считаете что это не правильно, во всяком случае положительные значения будут вычислены.
А если внутри корня взять по модулю а потом вычислить корень?
$cos = sqrt(abs(1 - $S*$S));
|
А там смотреть если $S отрицательное то поставим мнус после вычисления. | |
|
|
|
|
|
|
|
для: asked86
(14.02.2010 в 18:46)
| | >->но Вы применили корень - его можно применять?
>А что, Вы считаете что это не правильно,
При чем тут я.
sqrt - стандартная функция, а Вы сказали, что на них наложено табу.
По условиям задачи. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 18:50)
| | утомили Вы меня.
<?php
$e = 0.0000001; $S = $a = 1; $x = 3.1415926/3; $n = 0;
do{
$n+=2;
$a *= (- $x*$x)/(($n-1)*$n);
$S += $a;
}while( abs($a) > $e );
echo $S;
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 18:54)
| | Сейчас вычислил: просто как отношение сделал и все. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2010 в 17:39)
| | пардон.
Числа Бернулли, а не Белла. | |
|
|
|