Курс ПЯВУ 2 сем / Курсовая работа / Пособие по выполнению Кр / 3 задание.Вычисление корней
.odtВычисление корней уравнения методом дихотомии(деления отрезка пополам).
#include <stdio.h>
#include <stdlib.h>
float f(float x)
{return (x*x-7*x+10);}
int sig(float x)
{return (x>0)? 1:-1;}
float abc(float x)
{return (x>0)? x:-x;}
int main()
{
float a,b,c,e, fa,fb,fc;
a=0;
b=2;
e=0.001;
do {
fa=f(a);
fb=f(b);
c=(b+a)/2;
if (sig(f(c))==sig(fa)) a=c; else b=c;}
while (abc(b-a)>e);
c=(b+a)/2;
printf(" \n root= %f \n",c);
system("pause");
return 0;
}
// ïðè a=0 b=2 root=1,999512
//
//ïðè a=2 b=7 root=5,000183
//
//
Вычисление корней уравнения методом хорд.
#include <stdio.h>
#include <stdlib.h>
float f(float x)
{return (x*x-7*x+10);}
int sig(float x)
{return (x>0)? 1:-1;}
float abc(float x)
{return (x>0)? x:-x;}
int main()
{
float a,b,c,e, fa,fb,fc;
a=0;
b=2;
e=0.001;
do {
fa=f(a);
fb=f(b);
c= a-fa/(fb-fa)*(b-a);
fc=f(c);
if (sig(fc)==sig(fa)){ a=c;fa=fc;}
else {b=c;fb=fc;}}
while (abc(b-a)>e);
printf(" \n root= %f \n",c);
system("pause");
return 0;
}
//a=0 b=2 root=1,999512
//
// a=2 b=7 root=5,000183
//
//
//Вычисление корня методом итераций
// РЕШЕНИЕ
// Дана функция f(x). Вычислить с точностью до e=0,001.
// Пусть дано приближение Х0
// Выразим x=fi(x)
// 1. Положим Xn=fi(Xn-1)
// 2. Eсли (Xn-Xn-1)>e то 1.
#include <stdio.h>
#include <stdlib.h>
float f(float x)
{return (x*x-7*x+10);}
int sig(float x)
{return (x>0)? 1:-1;}
float abc(float x)
{return (x>0)? x:-x;}
float fi(float x)
{return (10+x*x)/7;}
int main()
{
float a,c,e,x1,x;
a=0;
e=0.001;
x=a;
do {
x1= fi(x);
c=x;
x=x1;}
while(abc(c-x)>e);
printf(" \n root= %f \n",x);
system("pause");
return 0;
}
// при a=0 root=1,999512
//Вычисление корня методом Ньютона- касательных.
// РЕШЕНИЕ
// Дана функция y=f(x).Y=0. Вычислить корень с точностью до e=0,001.
// На интервале a, b есть корень.
// 1. X k+1 = Xk- f(Xk)/f1(Xk)
// 2. если abs (Xk+1-Xk)<e то выходим из цикла
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float f(float x)
{return (x*x-7*x+10);}
float fi(float x)
{return (x*x+10)/7;}
float f1(float x)
{return 2*x-7;}
float abc(float x)
{return (x>0)? x:-x;}
int main()
{
float xk,xk1,e;
xk1=1;
e=0.001;
do { xk=xk1;
xk1=xk - f(xk)/f1(xk) ;}
while (fabs(xk1-xk)>e);
printf(" \n root= %f \n",xk1);
system("pause");
return 0;
}
// при Xk=1 root=2,000000
// при Xk=6 root=5.000000