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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2015, 13:21   #1
mike1988
 
Регистрация: 26.05.2015
Сообщений: 8
По умолчанию решение уравнения методом итерации

Дана функция cos (x), необходимо найти корень функции методом последовательных приближений. Суть в следующем. вычислять надо с помощью ряда функции cos(x)
Итерационный характер процесса нахождения корня функции явно присутствует в методе последовательных приближений. Для того, чтобы найти корень функции f(x)=0, решается эквивалентное уравнение x = f(x) + x. Если для него значение x в правой части считать результатом итерационного цикла на предыдущем шаге (x1), а значение x в левой части - результатом текущего шага цикла, то такой цикл можно представить следующей схемой, а реализацию ее -программой:
.
x1 = x
________________
| | |
x = f( x1 ) + x1 ------- x1 = x0

// Программа:
x = x0;
do {
x1 = x;
x = f(x1) + x1;
} while( l(x,x1) );
вот попытки но вычисляет неправильно(

Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
const double eps = 0.00001;
double FuncCos(const double x, const double eps)
{
	double sum = 0; 
	int n = 1;  
	int q; 
	double k;

	do{
		q = n;
		k= ((pow( -1 , q))/ (2*n))*(pow(x, 2*q));
		sum = sum + k; 
		n++; 
	}while (k > eps);  
	return -sum;
} 
  main()
{ 
	//clrscr(); 
	double arg;  
	printf("agr\tmyfunc\t\tlog(arg)\n\n");

	for (arg = 0.1; arg < 1.0; arg += 0.1)
	{
		
		printf("%0.1lf\t%lf\t%lf\n", arg, FuncCos(arg, eps), cos(arg));
	}

    getch();
}

Последний раз редактировалось mike1988; 08.06.2015 в 13:26. Причина: Коментарии на русском языке некорректно отображаються
mike1988 вне форума Ответить с цитированием
Старый 08.06.2015, 16:23   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Я не понял. Вы пишете про какую-то итерацию, а судя по коду - вычисляете не итерацией, а с помощью ряда Тейлора:
Код:
 k= ((pow( -1 , q))/ (2*n))*(pow(x, 2*q));
.. и к тому же неправильно. Там не просто 2n а (2n)! (факториал)
type_Oleg вне форума Ответить с цитированием
Старый 08.06.2015, 19:41   #3
mike1988
 
Регистрация: 26.05.2015
Сообщений: 8
По умолчанию Понял вас.

А как записать правильно с факториалом?
mike1988 вне форума Ответить с цитированием
Старый 08.06.2015, 20:19   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Так вы хоть сами поняли, что вам надо ?
- методом итераций ( а именно последовательных приложений)
- или через ряд Тейлора .

Это разные вещи. Для разных целей.
- Методом итераций ищется корень ( то есть решение) уравнения f(x)=0
Например cos(x)=0 или cos(x)=x
То есть надо найти x
- С помощью ряда Тейлора ищется значение функции f(x), например cos(x)
То есть надо найти f(x) при известном x

Мне кажется, вы просто скопировали ( точнее попытались скопировать) текст задания, не поняв его. А потом скопировали откуда-то первый попавшийся код на Си.
Даже непонятно, что найти.
Напишите хоть само уравнение.

Вот, к примеру, поиск корня уравнения cos(x)=0 методом простых итераций ( последовательных приближений)
Код:
#include <stdio.h>
#include <math.h>
int main()
{   
	double eps=0.00001,x=0.0;
	do{ x+=cos(x);}
	 while (abs(x-(x+cos(x))) > eps);
	printf("%f\n",x);
	return 0;
}

Последний раз редактировалось type_Oleg; 08.06.2015 в 21:13.
type_Oleg вне форума Ответить с цитированием
Старый 08.06.2015, 22:01   #5
mike1988
 
Регистрация: 26.05.2015
Сообщений: 8
По умолчанию с помощью ряда Тейлора.

Задание звучало следующим образом. Изучение итерационных процессов. Ряд Тейлора (-1)^n*(x^2n)/(2n!) и функция cos(x) она для проверки.
Вычисление степенного ряда для x в диапазоне от 0.1 до 1 с шагом 0.1
С математикой не очень дружу я почему то думал что вычисление ряда это и есть итерация))
mike1988 вне форума Ответить с цитированием
Старый 08.06.2015, 23:07   #6
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от eXestinZ Посмотреть сообщение
Умножать данное количество раз пока неполучется данное число, закончить на это цифре, исползуйте цикл.
Можно так. Но лучше по другому.
Если все же нужен ряд Тейлора, то лучше вычислять последующее слагаемое через предыдущее.
1 - первое слагаемое.
Умножаете на (-x*x), делите на (1*2), получаете второе слагаемое - x^2 / 2!
Умножаете на (-x*x), делите на (3*4), получаете третье слагаемое + x^4 / 4!
И т.д.
type_Oleg вне форума Ответить с цитированием
Старый 09.06.2015, 10:25   #7
mike1988
 
Регистрация: 26.05.2015
Сообщений: 8
По умолчанию сейчас дошло)

сейчас дошло.
Код HTML:
#include <stdio.h>
#include <conio.h>
#include <math.h>
const double eps = 0.00001;
double mycos(double x,double eps)
{
    double s,an;
    int n;
    n=0;                              // начальное значение n
    an=1;                             // храним н-ый член ряда
    s=0;                              // сумма ряда
    while(fabs(an)>eps)
    {
         s+=an;                       // суммируем очередной член ряда
         n++;                         // переходим к следующему члену   
         an*=-x*x/(2.*n-1.0)/(2.0*n); // пересчитываем a(n) через a(n-1)
    }
    return s;                         // получившаяся сумма
}
main()
{ 	double x;                         // аргумент функции 
	printf("agr\tmyfunc\t\tcos(arg)\n\n");
	for (x = 0.1; x < 1.0; x += 0.1)
	{
		printf("%0.1f\t%f\t%f\n", x, mycos(x, eps), cos(x)); // выводим строку таблицы
	}
    getch();
}
mike1988 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C#, решение уравнения методом итерации yankel Помощь студентам 1 10.09.2014 22:00
"Решение системы линейных алгебраических уравнений методом простой итерации" и "Решение нелинейного уравнения методом итерации" BORODA77 Помощь студентам 0 19.03.2014 17:31
Надо найти корни уравнения методом простой итерации! smotra88 Помощь студентам 6 20.12.2012 12:31
Решение СЛАУ методом итерации Dezolyator Фриланс 3 20.03.2012 19:04
Решение нелинейных уравнений методом хорд и методом простой итерации(С++) Foralberg Помощь студентам 9 31.01.2011 01:33