Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Рекурсивные функции в С++

Автор: matic 28.04.2007 21:10

Условие задачи:

Вычислить функцию y=ln(x), разложенную в степенной ряд, с заданной степенью точности.

Помогите пожалуйства. Заранее благодарю.

Автор: Fanat 29.04.2007 14:58

Цитата(matic @ 28.04.2007 18:10) *

Условие задачи:

Вычислить функцию y=ln(x), разложенную в степенной ряд, с заданной степенью точности.

Помогите пожалуйства. Заранее благодарю.
Вот что получилось. Модуль числа (х-1) должен быть меньше 1. То есть х вводим от 0 до 2.
Всё работает. Сверял с Matcad, только вот точность с результатами Matcada совпадает если в программе взять точность выше. Может где-нибудь есть помарки.

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>
#include<stdlib.h>

double F(int n,float x,double log1,float eps)
{
if (fabs(pow(-1,n-1)*pow(x-1,n)/n) < eps ) return log1;
log1+=(pow(-1,n-1)*pow(x-1,n)/n);
log1=F(n+1,x,log1,eps);
return log1;
}

int main()
{
clrscr();
float x,eps;
cout<<"X?"<<endl;
cin>>x;
cout<<"EPS?"<<endl;
cin>>eps;
double log=F(1,x,0,eps);
cout<<log;
getche();
return 0;
}

Автор: Fanat 29.04.2007 17:04

Цитата(Fanat @ 29.04.2007 11:58) *
Вот что получилось. Модуль числа (х-1) должен быть меньше 1. То есть х вводим от 0 до 2.
Всё работает. Сверял с Matcad, только вот точность с результатами Matcada совпадает если в программе взять точность выше. Может где-нибудь есть помарки.
if (fabs(pow(-1,n-1)*pow(x-1,n)/n) < eps ) return log1+(pow(-1,n-1)*pow(x-1,n)/n);


Вот так должно быть правильно, хотя проверить не могу щас.

Автор: matic 5.05.2007 16:31

Благодарю, выручил меня...
А можешь написать математически как, к примеру раскладывается в степенной ряд функция ln(x)
при x=2 и степенью точности 1...?

Автор: Fanat 8.05.2007 23:38

Цитата(matic @ 5.05.2007 13:31) *
Благодарю, выручил меня...
А можешь написать математически как, к примеру раскладывается в степенной ряд функция ln(x)
при x=2 и степенью точности 1...?
Вопрос не совсем понятен. И скорее всего его надо задать в математике.
А вот дополненная программа, которая подсчитает логарифм любого числа с заданной точностью.
..........
int T=1;
cout<<"X?"<<endl;
cin>>x;
while (x>2)
{
T=2*T;
x=sqrt(x);
}
cout<<"EPS?"<<endl;
cin>>eps;
double log=T*F(1,x,0,eps);
..........

Автор: Гость 9.05.2007 0:23

Цитата
Сверял с Matcad, только вот точность с результатами Matcada совпадает если в программе взять точность выше.

а можешь прикрепить исходник для маткада где ты проверял?

Автор: Fanat 9.05.2007 1:45

Цитата(Гость @ 8.05.2007 21:23) *

а можешь прикрепить исходник для маткада где ты проверял?


В смысле?..нажал ln(x)=ответ...или тебе весь маткад?.. smile.gif

Автор: matic 9.05.2007 2:17

а причем тогда тут заданная точность?

Автор: Fanat 9.05.2007 2:36

Цитата(matic @ 8.05.2007 23:17) *

а причем тогда тут заданная точность?


У тебя задание такое...поиск логарифма с заданной точностью...то есть не все цифры верные...

Автор: matic 9.05.2007 14:05

ну я знаю что задание такое...
Просто ты говаришь, что в маткаде написать ln(x), а где тут указываеться заданная точность?
Я просто не могу понять как ты на мактаке проверял...
Прикрепи исходник для маткада где ты проверял с расширением xmcd.

Автор: Fanat 9.05.2007 16:39

Цитата(matic @ 9.05.2007 11:05) *

ну я знаю что задание такое...
Просто ты говаришь, что в маткаде написать ln(x), а где тут указываеться заданная точность?
Я просто не могу понять как ты на мактаке проверял...
Прикрепи исходник для маткада где ты проверял с расширением xmcd.


Точночть-TOL:=точность...
Кол-во цифр после запятой-Format-Result-Number of decimal places...

Что то не получаеться прикрепить исходник...но я думаю и так понятно всё будет...