Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2015, 19:24   #11
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Кстати, зачем вам точность ? У вас же N - число рядов, не? т.е. от 1 до N раз мы вычисляем ряды.
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 07.11.2015, 19:27   #12
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

n стремится к бесконечности,поэтому нужна точность
Вероника99 вне форума Ответить с цитированием
Старый 07.11.2015, 19:54   #13
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Вероника99 Посмотреть сообщение
n стремится к бесконечности,поэтому нужна точность
Если n стремится к бесконечности, вычислять нечего. В пределе всё выражение, как не считай, будет равно - бесконечности. При чём здесь точность? Точность в определении бесконечности?
Если n в знеменателе, в пределе - 0. Деление на 0, даёт бесконечность, В Компе, сообщение о переполнении. Ну-ну.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 07.11.2015 в 19:57.
Smitt&Wesson вне форума Ответить с цитированием
Старый 07.11.2015, 20:01   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы решал эту задачу таким кодом:
Код:
double ln2x(double x,int n){
	double q=1,pw=1/pow(x,2*n);
	double s=0.0;
	for(;n>0;n--){
		s+=q/(q+1);
		q+=2;
	}
	return log(x*2)-s*pw;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2015, 20:07   #15
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ну, в принципе, задал формулы в числителе и знаменателе, прикинул на бумаге так:

n=1:
1/(2*2) * 1/(x^2)

n=2;

3/(4*4) * 1 / (x^4)

проверял на тестах

2 2
3 2
4 2
5 2

как только откажетесь от точности и перейдете на более высокий уровень - дайте знать)

Код:

#include <iostream>
#include <math.h>


using namespace std;

float recursion(int n, float x)
{

    if(n==0) return 0;

    float chislitel  = (1.0*((2*n)-1));
    float znamenatel =((2*n)*(2*n)*(pow(x,(2*n))));

    float a = chislitel/znamenatel;

    cout<<a<<endl;

    return a+recursion(n-1,x);
}


int main()
{

    float x;
    int n;
    cout<<"Print N X: ";
    cin>>n>>x;
    cout<<endl<<"ITOG: "<<log(2*x) -  recursion(n,x);
    return 0;
}
з.ы.: любитель скобок))
from dark to light)

Последний раз редактировалось Алексей_2012; 07.11.2015 в 20:11.
Алексей_2012 вне форума Ответить с цитированием
Старый 07.11.2015, 20:18   #16
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Вероника99. Ща Вам наши спецы наговорят. Прежде всего, как я уже сказал, для n = бесконечности, решения нет. Определитесь с интервалом. В ином случае, решение будет через интегрирование с неопределёнными интегралами. К программированию, эта хрень не имеет ни какого отношения. Увы, но компы умеют решать только определённые интегралы. И уравнения с ограниченными точностью разрядной сетки (можно и с длинной арифметикой, но это к Utkin-у. Он больше в этом вопросе разбирается).
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 07.11.2015, 20:19   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

На калькуляторе правильно 1.32. Проверил прогой
Цитата:
для n = бесконечности, решения нет
При чем здесь это? У ТС оценка точности, если не самой суммы, то членов ряда без всякой бесконечности. Последовательность сходящаяся.

ЗЫ

Вычислять можно и нужно без всяких вложенных циклов. Проверил на делфи
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Eps,x,y,a,b,s: Double;
    i: Integer;
begin
  Eps:=0.1;
  x:=2; a:=1; b:=1; s:=ln(2*x); y:=x*x; i:=1;
  while a>Eps do begin
    b:=b*(2*i-1)/2/i;
    a:=b/2/i/y;
    s:=s-a;
    Inc(i);
  end;
  Memo1.Lines.Add(FloatToStr(s));
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 07.11.2015 в 21:01.
Аватар вне форума Ответить с цитированием
Старый 07.11.2015, 23:49   #18
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Я не понимаю,почему точность не имеет отношения к этому отношения. Насколько я понимаю: найти сумму до определенной точности,означает искать сумму ряда до тех пор,пока его член не будет не станет меньше заданной точности,т.е когда это будет достигнуто-прекратить искать сумму.
Аватар,не совсем понимаю код делфи,но постаралась перевести на си и не вышло ,не понимаю эти деления в "а" и "b"
Код:
int n2=1; //переменная n в соответсвии с формулой

	double s=0.0,a2=1.0,b2=1.0,c2=1.0,a=1.0,y; //sum для хранения суммы ряда, а- один член ряда
	y=x*x;
	s=log(2*x);
	double result2=0.0;
	 int i=1;
while (abs(a2)>eps);
 {
	 b2=(b2*(2*i-1)/2)/i;
/* a=((b2/2)/i)/y;
	 s=s-a;
	 i++;*/
}
Вероника99 вне форума Ответить с цитированием
Старый 07.11.2015, 23:56   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
найти сумму до определенной точности,означает искать сумму ряда до тех пор,пока его член не будет не станет меньше заданной точности,т.е когда это будет достигнуто-прекратить искать сумму.
Это абсолютно справедливо для знакопеременного сходящегося ряда. Для знакопостоянного не так, там все сложнее. Но для студенческих задач вполне нормально и вполне сойдет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.11.2015, 00:02   #20
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Вероника99 Посмотреть сообщение
Я не понимаю,почему точность не имеет отношения к этому отношения. Насколько я понимаю: найти сумму до определенной точности,означает искать сумму ряда до тех пор,пока его член не будет не станет меньше заданной точности,т.е когда это будет достигнуто-прекратить искать сумму.
Аватар,не совсем понимаю код делфи,но постаралась перевести на си и не вышло ,не понимаю эти деления в "а" и "b"
Код:
int n2=1; //переменная n в соответсвии с формулой

	double s=0.0,a2=1.0,b2=1.0,c2=1.0,a=1.0,y; //sum для хранения суммы ряда, а- один член ряда
	y=x*x;
	s=log(2*x);
	double result2=0.0;
	 int i=1;
while (abs(a2)>eps);
 {
	 b2=(b2*(2*i-1)/2)/i;
/* a=((b2/2)/i)/y;
	 s=s-a;
	 i++;*/
}
Код не полный. Где вычисляется или задаётся eps? Если он не декларирован, компиль выдаст ошибку. И вообще, судя по приведённым формулам, Ваш код абсолютно не верен.
Прежде всего, в формулах не указано условие выхода. С бесконечностью, задача не имеет решения, выше, объяснил почему. В вашем примере - бесконечный цикл. Вы проверяете выход из цикла как abs(a2)>eps. На самом деле, вычисляете а (зафлешен). В итоге, ничего не вычисляете.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 08.11.2015 в 00:12.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для заданного ряда найти сумму N элементов ряда havapeymaK Помощь студентам 7 18.08.2015 09:18
Не считает количество членов ряда Tatyana64 Помощь студентам 2 06.11.2012 11:14
считает не правильно rapgamer Помощь студентам 3 15.09.2010 14:23
Не правильно считает сумму чисел, которые находятся в файле. TheWanderer Общие вопросы C/C++ 6 17.04.2009 18:43
Найти сумму ряда с точностью e, если дан общий член этого ряда JiLiYa Общие вопросы C/C++ 2 18.02.2009 11:11