Разработка программы вычисления корней нелинейных уравнений с помощью метода касательных
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
xe
После запуска программы необходимо ввести максимальное значение степени уравнения и его коэффициенты. После чего программа выведет это уравнение на экран. Далее программа попросит ввести диапазон, где расположен корень уравнения, после ввода программа выведет найденный корень уравнения и предложит найти его еще раз, в другом диапазоне. Если функция меняет знак в разных местах, то корней будет несколько, следует воспользоваться этим предложением.
ВЫВОДЫ
нелинейное уравнение метод касательная программный
Метод решения нелинейных уравнений, такой как метод касательных (метод Ньютона), хорошо изучен. Приобретены более обширные теоретические знания.
В результате работы удалось создать программу для нахождения корней нелинейных уравнений при помощи метода касательных. Были разработаны полезные функции, например, такие как функция подсчета производной для первого и для второго порядка.
Данную программу можно применить в учебных целях и в помощь инженеру.
СПИСОК ЛИТЕРАТУРЫ
1.Верлань А. Ф. Інформатика: Підручник / А.Ф. Верлань, Н.В. Апатова. - К.: Форум, 2000. - 224 с.: іл.
2.Лафоре Р. Объектно-ориентированное программирование в С++ / Р. Лафоре. - 4-е изд. - М.: Питер, 2003. - 923 с.: ил. - (Классика Computer Science).
3.Путятин Е.П. Турбо Паскаль в курсе высшей математики: Учеб. пособие / Е.П. Путятин, Д.М. Смагин, В.П. Степанов - Харьков: Каравелла, 1997. -352с.
4.Страуструп Б. Язык программирования С++ / Б. Страуструп. - 3-е изд., доп. - СПб.: Бином, 1999 . - 991с.
ПРИЛОЖЕНИЕ А. ТЕКСТ ПРОГРАММЫ
#include
using namespace std;
#include
//функции вывода набора символов
void charline(char ch, int n)
{( int j=0; j<=n; j++ )
cout<<ch;<<endl;
}
//функция вывода уравнения
void cout_equation(int coef[256], int power)
{temp_power=power; //присваивание переменной temp_power значение степени<<"\nf(x) = ";(coef[0]!=1) //выводить первый коеффициент если он не равен "1"
{(coef[0]!=-1) //если коеффициент не равен "-1"
{cout<<coef[0];} //иначе вывести знак "-"
{cout<<"-";}
}1) //выводить степень, если она больше "1"
{cout<<"^"<<temp_power--;}
for(int i=1;i<power;i++)
{
if(coef[i]>0) //если коеффициент положительный
{cout<<"+"<<coef[i];} //то прибавить знак "+"
else
{cout<<coef[i];}
cout<<"x";
if(temp_power>1) //выводить степень, если она больше "1"
{cout<<"^"<<temp_power--;}
}(coef[power]>0) //если вольный член положительный
{cout<<"+"<<coef[power]<<"\n";} //то прибавить знак "+"
else
{cout<<coef[power]<<"\n";}
}
//функция подсчёта значения функцииf(int array[256], int n, float x, float func[2])
{temp_power=n;temp_root;temp=0;(int i=0; i<n; i++)
{
temp_root=temp+array[i]*pow(x,temp_power);
temp=temp_root;
temp_power--;
}[0]=temp+array[n];
}
//функция подсчёта значения производной первого порядка
void derivative_1(int array[256], int n, float x, float func[2])
{temp_power=n;temp_root;temp=0;(int i=0; i<n-1; i++)
{
temp_root=temp+temp_power*array[i]*pow(x,temp_power-1);
temp=temp_root;
temp_power--;
}[1]=temp+array[n-1];
}
//функция подсчёта значения производной второго порядка
void derivative_2(int array[256], int n, float x, float func[2])
{temp_power=n;temp_root;temp=0;(int i=0; i<n-2; i++)
{
temp_root=temp_power*array[i]*(temp_power-1)*pow(x,temp_power-2)+temp;
temp=temp_root;
temp_power--;
}[2]=array[n-2]*(n-3)+temp;
}
main()
{(-,66);<<" The decision of the nonlinear equation by method of tangents\n";(-,66);
coef[256], power;power; //ввод максимального значения степени<<"Input values of factors:\n";(int i=0;i<power;i++)
{coef[i]; //ввод коэффициентов уравнения
}coef[power]; //ввод вольного члена уравнения(-,66);<<" Desicion\n";(-,66);
_equation(coef, power); //вывод уравнения
func[2];
again;
//Method of tangents
(again!=n){a, b, x, E, S, root, f_a, f_b, f_a_1, f_a_2, f_b_1, f_b_2;E;
//-----------условие сходимости метода касательных-----------//
f(coef, power, a, func);_a=func[0];(coef, power, b, func);_b=func[0];
_1(coef, power, a, func);_a_1=func[1];_2(coef, power, a, func);_a_2=func[2];
_1(coef, power, b, func);_b_1=func[1];_2(coef, power, b, func);_b_2=func[2];
(f_a*f_b>0 || f_a_1==0 || f_a_2==0 || f_b_1==0 || f_b_2==0)
{
cout<<"The method of tangents(Nutons method) is not applicable"<<endl;
break;
}
//-------------------------------------------------------------//n=0;min_a, min_b, min;=a;_1(coef, power, x, func);_a=func[1];=b;_1(coef, power, x, func);_b=func[1];(fabs(min_a)>fabs(min_b))
{min=fabs(min_b);}
{min=fabs(min_a);}
max_a, max_b, max;=a;_2(coef, power, x, func);_a=func[2];=b;_2(coef, power, x, func);_b=func[2];(fabs(max_a)>fabs(max_b))
{max=fabs(max_a);}
{max=fabs(max_b);}
=sqrt((2*min*E)/max);
roots[64]; =b;_1(coef, power, x, func);_b_1=func[1];_2(coef, power, x, func);_b_2=func[2];(f_b_1*f_b_2>0)
{root=b;}
{
x=a;
derivative_1(coef, power, x, func);
f_a_1=func[1];
derivative_2(coef, power, x, func);
f_a_2=func[2];
if(f_a_1*f_a_2<0)
{root=a;}
}(fabs(roots[n]-root1)
{root=roots[n];}(coef,power, root, func);_1(coef, power, root, func);[n]=root-(func[0]/func[1]);
}i=n;again;
}
}