Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Метод итераций


Автор: polina123 30.11.2015, 17:55
Здравствуйте. Дали вот такое задание для курсовой работы:

Для заданной функции Y = f(x) на интервале [a,b]:
1) рассчитать n значений функции с равномерным шагом изменения аргумента x , значения аргумента и функции представить в виде таблицы;
2) отделить корни уравнения f(x) = 0 аналитически, т.е. определить количество корней;
3) уточнить корни уравнения f(x) = 0 методом итераций с точностью 0.00001
Исходные данные:
, где Y=x^4-13x+36 n = 40, a = - 4 , b = 4 
Я решила это уравнение вручную. И получилось так, что корней нет.
И надо сделать программу визуально. И как-то программа должна все просчитывать, но не знаю как(
Я сделала форму(которая на фотографии) и мне нужен код только для кнопки button, чтобы просто выводил, то, что я решила вручную.
Помогите мне пожалуйста разобраться.
Я написала код в консольном виде. Но работает он как-то не очень.

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <math.h>
using namespace std; 

double f1(double c)
{
double z=c*c*c*c-13*c+36;
return(pow(10, z));    
}

int main()
{
int n=0;
double a,b,E,x,z,g;

cout<<"vvedite a"<<endl;
cin>>a;
cout<<"vvedite b"<<endl;
cin>>b;
cout<<"vvedite E"<<endl;
cin>>E;

x=(a+b)/2;
do
{
z=x;
x=f1(x);
n++;
}
while ((fabs(x-z))>=E);

cout<<endl;
cout<<"x="<<x<<endl;
cout<<"n="<<n<<endl;
getch();
system("pause");
return 0;
}

Вот решение вручную.

Обозначим: f(x)=x4 - 13x + 36.
Найдем производную: f'(x)=4x3 - 13

Составим таблицу для нахождения корней уравнения:
-4 -1 0  4
+  +  + +

f(-4)=(-4)4 - 13*(-4) + 36=256+52+36=344>0
f(-1)= (-1)4 - 13*(-1) + 36=1+13+36=40>0
f(0)=0-0+36=36>0
f(4)=44 - 13*4 + 36=256-52+36=240>0

Из таблицы видно, что все знаки положительные. Следовательно корней нет.


Автор: disputant 30.11.2015, 18:19
Корней точно нет: http://www.wolframalpha.com/input/?i=Solve%5Bx^4+-+13+x+%2B+36+%3D%3D+0%2C+x%5D, видно и по http://www.wolframalpha.com/input/?i=Plot%5Bx^4+-+13+x+%2B+36%2C+{x%2C+-4%2C+4}%5D

Автор: polina123 30.11.2015, 18:24
а как мне с программой быть?

Автор: Курсант 30.11.2015, 19:33
Думаю, Вам нужно на заданном интервале вычислить значения функции. Если в одной точке функция положительна, а в соседней отрицательна, то между этими точками как минимум один корень уравнения. Если знак функции не меняется на всем интервале, значит корней нет. Нужно сделать то же самое, что Вы сделали вручную, но только программно, и с шагом не 1, а 0.00001, как задано.

Автор: math64 1.12.2015, 08:08
Если функция - полином (как в Вашем случае) для определения числа корней на интервале [a,b] нужно вычислить значения функции и её производных на концах интервала (a и b). Есть теорема определяющая число корней на интервале по знакам полинома и его производных на концах (формулировку не помню, посмотрите в учебник и найдите в интернете).
https://ru.wikipedia.org/wiki/%D0%A0%D1%8F%D0%B4_%D0%A8%D1%82%D1%83%D1%80%D0%BC%D0%B0

Автор: xvr 1.12.2015, 14:58
Кстати, сама функция у вас запрограмированна неправильно (зачем вы сделали pow(10,z) ?)
И метод итераций тоже итерирует не совсем то, что надо  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)