Разложить в ряд Тейлора arccos(x) - C (СИ)
Формулировка задачи:
Здравствуйте, помогите переделать программу. У меня есть код, вычисляющий значение arcsin(x) с помощью ряда Тейлора. Как переделать ее под arccox(x) ? Не могу разобраться, помогите. Вычисляет ли эта программа значение в функции в заданной точке?
#include <stdio.h>
#include <conio.h>
#include <math.h>
double f(double x, double eps)
{
double v, sum = x;
long n = 1;
double fn = pow(x,3)/2.0;
while(eps < fabs(fn))
{
sum += fn;
n += 1;
fn *= n*pow((2*n + 1),2)*pow(x,2);
fn /= 1.0*(n + 1)*(2*n + 3)*(2*n - 1);
}
return sum;
}
int main()
{
char sign[] = " ";
double x, fx, dx = 0, xn = 0, xk = 0, eps = 0;
printf("Enter xn : ");scanf("%lf",&xn);
printf("Enter xk : ");scanf("%lf",&xk);
printf("Enter dx : ");scanf("%lf",&dx);
printf("Enter eps: ");scanf("%lf",&eps);
printf("|-----------------------------------|\n");
printf("| x | f(x) | asin |(sin-f)/f|\n");
printf("|-----------------------------------|\n");
for(x = xn; x <= xk; x += dx)
{
fx = f(x,eps);
if(x < 0)
sign[0] = '\0';
else
sign[0] = ' ';
printf("|%s%.4f |%s%.4f |%s%.4f|%s%.4f |\n",
sign,x,sign,fx,sign,asin(fx),sign,(sin(x) != 0 ? fabs(sin(x) - fx)/sin(x) : 0));
}
printf("|-----------------------------------|\n");
printf("Press any key to continue\n");
getch();
return 0;
}Решение задачи: «Разложить в ряд Тейлора arccos(x)»
textual
Листинг программы
typedef struct{
double re;
double im;
} complex;
void showComplex(complex c)
{
if((c.re == 0.0) && (c.im == 0.0)){
printf("0");}
else if((c.re != 0.0) && (c.im == 0.0)){
printf("%lf", c.re);}
else if((c.re == 0.0) && (c.im != 0.0)){
printf("%lfi", c.im);}
else if(c.im < 0){
printf("%lf%lfi", c.re, c.im);}
else{
printf("%lf+%lfi", c.re, c.im);}
}
complex Arccos(complex z)
{
complex c;
double A, B;
A=sqrt((z.re+1)*(z.re+1)+z.im*z.im)/2 +
sqrt((z.re-1)*(z.re-1)+z.im*z.im)/2;
B=sqrt((z.re+1)*(z.re+1)+z.im*z.im)/2 -
sqrt((z.re-1)*(z.re-1)+z.im*z.im)/2;
c.re=acos(B);
c.im=-log(A+sqrt(A*A-1));
return c;
}
Объяснение кода листинга программы
- В данном коде используется структура complex для представления комплексных чисел.
- Функция showComplex выводит представление комплексного числа в виде строки.
- Если вещественная и мнимая части равны нулю, выводится
0. - Если вещественная часть не равна нулю, а мнимая равна нулю, выводится вещественная часть.
- Если вещественная часть равна нулю, а мнимая часть не равна нулю, выводится мнимая часть.
- Если мнимая часть отрицательна, выводится вещеская и мнимая части в формате
реальное число + мнимое числоi. - Если мнимая часть положительна или равна нулю, выводится вещеская и мнимая части в формате
реальное число + мнимое числоi. - Функция Arccos вычисляет арккосинус комплексного числа z.
- Для этого функция сначала вычисляет значения A и B.
- Значение A вычисляется как квадратный корень из суммы квадратов вещественной и мнимой частей комплексного числа z, деленного на 2, и квадратного корня из разности квадратов вещественной и мнимой частей комплексного числа z, деленного на 2.
- Значение B вычисляется как квадратный корень из разности квадратов вещественной и мнимой частей комплексного числа z, деленного на 2, и квадратного корня из суммы квадратов вещественной и мнимой частей комплексного числа z, деленного на 2.
- Арккосинус вещественной части B вычисляется с помощью функции acos.
- Арккосинус мнимой части вычисляется с помощью функции log, используя значение A и B.
- Результат сохраняется в структуре complex с именем c.
- Вещественная часть результата вычисляется с помощью функции acos, а мнимая часть вычисляется с помощью функции log.
- Результат возвращается из функции Arccos.