Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сумма Matlab, Кто знает С++ мож объя на нем они похожи 
:(
    Опции темы
len4ixa
Дата 3.4.2009, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Твоя лучшая фантазия
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Вот такая простенькая задачка, а мя глючит. Нужно вычислить эту сумму с заданной точностью (суммировать, пока модуль отношение текущего слагаемого к уже текущей части суммы превосходит значение точности). Для знатоков С++: в матлабе есть встроенная функция нахождения факториала, можно не мутить факториал с помощью цикла. 

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  __.jpg 3,13 Kb
--------------------
Кому интересно быть модером на бесплатнои хостинге (но не ломать его) и сделать из него хотя бы что-то, похожее на "нормальное", тому Сюда.Сайт брата: kras.24ss.ru. Регимся. 
PM MAIL   Вверх
popovda
Дата 3.4.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 9.6.2006
Где: Москва

Репутация: 5
Всего: 6



Голубчик! Если Вы здесь будите вычислять факториал в лоб, вы k>20 не посчитаете. Давайте-ка посмотрим на ряд:

типичная экспонента, итак, каждый член ряда имеет вид a[k] = (x^k)/k! или, выражая k+1 член ряда через k-тый имеем:
a[k+1] = (x^(k+1))/((k+1)!) == (x^k)*x/(k!*(k+1)) == a[k]*x/(k+1). Таким образом код (пишу на фортране, но суть дела сиё не меняет):


Код

real(8) :: s,a,a_new 
integer(4) :: k;
.....................................
s = 1.0_8; ! x^0  == 1, 0! =def= 1
a = 1;


k = 0;
do 
       a_new = a*x/(k+1); ! Вычисляем новый член через предыдущий
       s = s+a_new; ! суммируем
       if( (abs(a_new-a)<eps) .and. abs(s-s_test)<eps) exit; ! проверяем разность между членами, что она меньше точности и то же делаем  
                                                                                             ! сравнивая s с тестовым значением, если оно задано

       k = k+1; ! Ну тут понятно я думаю, меняем счетчик цикла
       a = a_new; 
end do



Код

//На C++:
double s = 1.0, a = 1.0, a_new = 0.0;
int k = 0;

while(1){
         a_new = a*x/(k+1);
         s = s+a_new; 
         if( (fabs(a_new-a)<eps) && fabs(s-s_test)<eps) break;  
         k = k+1; 
         a = a_new; 
}//while

 





Это сообщение отредактировал(а) popovda - 4.4.2009, 21:21


--------------------
С уважением, Попов Д.А.
PM MAIL   Вверх
len4ixa
Дата 9.4.2009, 05:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Твоя лучшая фантазия
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Не не понятно, можно подробнее? Или чтобы прога на С++ компилилась. у мя заедает в мозге что-то

Это сообщение отредактировал(а) len4ixa - 9.4.2009, 09:46
--------------------
Кому интересно быть модером на бесплатнои хостинге (но не ломать его) и сделать из него хотя бы что-то, похожее на "нормальное", тому Сюда.Сайт брата: kras.24ss.ru. Регимся. 
PM MAIL   Вверх
popovda
Дата 9.4.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 9.6.2006
Где: Москва

Репутация: 5
Всего: 6



Ну, блин....Купите Кернигана и Ритчи + Шилда или хотя бы Подбельского и зубрите.

Код

#include <iostream>
#include <cmath>
using namespace std;

int main(){

//Сумма 
double sum =1.0;
//Точное значение при e^1.25
const double s_test= exp(1.25);

//Точность 
const double eps = 1.0e-4;

//Предыдущий и текущий члены 
double a, a_new;
//Счётчик
int k = 0;

a = 1.0, a_new = 0.0;

k = 0;

while(1){
         a_new = a*x/((double)k+1.0); //Так точно приведение типа будет зависеть не от реализации компилятора
         s = s+a_new; 
         if( fabs(sum-s_test)<eps) break;  //Достаточно даже так
         k = k+1; 
         a = a_new; 
}//while


return 0;
}//main



--------------------
С уважением, Попов Д.А.
PM MAIL   Вверх
MoRaN1992xd
Дата 14.11.2009, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.11.2009

Репутация: нет
Всего: нет



Слушай а не можешь кинуть альтернативу этой программы в C++ на языке Matlab... а то посмотрел эту прогу на этом языке... мучаюсь уже 3 часа... в Matlabe никак не хочет запускаться... плз помогите..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Добро пожаловать в раздел "Другие языки" форума Vingrad!

Void
Void

Раздел посвящён различным языкам программирования, для которых (в силу невысокой популярности) нет отдельного раздела (GPSS, Lua, MATLAB, Ada, Forth, Smalltalk, Tcl, REXX, AWK и др.)

  • Обязательно следуйте правилам Форума.
  • Пожалуйста, прочитайте и следуйте рекомендациям по работе в разделе и навигации по Форуму.
  • Для вставки текстов исходных кодов используйте подсветку синтаксиса из выплывающего списка Код в форме ответа. Если Ваш язык в списке не представлен, то используйте тег: [code=ваш_язык]код[/code], например, [code=ada]код[/code]. Если в будущем подсветка синтаксиса для указанного языка будет реализована, исходный код преобразится.
  • Помните, один вопрос - одна тема.

Приятного времяпрепровождения! С уважением, Void, kemiisto .

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие языки | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.