Автор: Пользователь скрыл имя, 29 Января 2013 в 12:08, реферат
Задание:
1. Для каждого уравнения отделить корни графически.
2. Уточнить один корень одного из уравнений с точностью e=0.01 методами половинного деления и простых итераций
ФГОУ ВПО Хакасский
государственный университет
Институт информационных технологий и инженерного образования
Кафедра Информационных технологий и систем
Дисциплина: Вычислительная математика
Отчет по лабораторной работе № 2 .
Тема:
Решение алгебраических и трансцендентных .
уравнений .
Выполнил студент гр. З-40 .
Колесникова А.П. .
Проверила:
Молчанова Е.А.
г. Абакан, 2013 г.
Задание:
2. Уточнить один корень одного из уравнений с точностью e=0.01 методами половинного деления и простых итераций
Решение:
При отделении корней уравнения графическим способом, действительными корнями уравнения ƒ(x) = 0 являются точки пересечения графика функции ƒ(x) с осью абсцисс.
При этом следует учитывать следующие положения:
1. Если непрерывная на отрезке [a,b] функция ƒ(x) принимает на его концах значения разных знаков, т.е. ƒ(a)•ƒ(b)<0 , то уравнение имеет на этом отрезке, по меньшей мере, один корень.
2. Если функция ƒ(x) к тому же еще и монотонна, то корень на отрезке [a,b] единственный.
Построим график функции y =
Рисунок 1. «График функции y = »
Построим график для функции y =
Рисунок 2. «График функции y = »
Алгоритм программы выстроен таким способом, чтобы она считала, что все интересующие нас корни уравнений находятся на отрезке [А;В] на котором функция ƒ(x) определена и непрерывна. Программа отделяет корни уравнения, то есть указывает все отрезки [a;b]є[А;В], содержащие по одному корню.
Она вычисляет значение ƒ(x) начиная с точки x=A, двигаясь вправо с некоторым шагом h. Как только обнаруживает пару соседних значений ƒ(x), имеющих разные знаки, и функция ƒ(x) монотонна на этом отрезке, то соответствующее значение аргумента х (предыдущее и последующее) считает концами отрезка, содержащего корень.
Надежность рассмотренного подхода зависит от характера функции ƒ(x) и от выбранной величины шага h. Шаг должен быть достаточно малым, чтобы не потерять корни, так как при большой величине корня может оказаться, что ƒ(x)·ƒ(x+h)>0, а на отрезке [x, x+h] имеется два корня. Либо, произведение ƒ(x)·ƒ(x+h)<0, а на отрезке [x, x+h] не один а три (пять, семь и т.д.) корня!
Текст программы на языке PASCAL для отделения корня корней уравнения (только для уравнения 3x4+4x3 -12x2+1) |
program otdelenie;
uses crt;
var a,b,x1,x2,y1,y2,h:real;
k:integer;
function f(x:real):real;
begin f:=3*x1*x1*x1*x1*x1+4*x1*x1*
end;
begin
clrscr;
writeln('Введите a,b и h'); readln(a,b,h);
k:=0; x1:=a; x2:=x1+h; y1:=f(x1);
while x2<b do
begin y2:=f(x2);
if y1*y2<0 then
begin inc(k);
writeln(k,'-й корень приблизительно = ',x1:4:2)
end;
x1:=x2; x2:=x1+h; y1:=y2;
end;
repeat until keypressed;
readln;
end.
Блок-схема для программы отделения корня в уравнении ( для уравнения 3x4+4x3-12x2+1) |
Рисунок 3. Блок-схема алгоритма
программы отделения корней
для уравнения 3x4+4x3-12x2+1)».
Рис.4. « Результат выполнения программы отделения корней
для уравнения 3x4+4x3-12x2+1».
Текст программы на языке PASCAL для отделения корня корней уравнения (только для уравнения x2-20sinx=0) |
Блок-схема для программы отделения корня в уравнении ( для уравнения x2-20sinx=0) |
program otdelenie_korney_uravneniya;
uses crt;
function f(x: real): real;
begin
f:=x*x-20*sin(x); { анализируемое уравнение }
end;
{ основная программа }
var a,b,fa,fc,c,eps: real;
begin clrscr;
write('Границы интервала изоляции корня - а и b: ');
readln(a,b);
write ('Погрешность вычисления корня: '); readln (eps);
//0,001
fa:= f(a); { расчет f на левом конце отрезка }
while b-a > eps do
begin
c:=(a+b)/2; fc:=f(c); { делим отрезок пополам }
if fa*fc <= 0 then b:=c
else
begin
a:=c; fa:=fc;
end;
end;
writeln('f =',f (a) :10:3, ' при X= ', a:10:3);
readkey;
end.
Рис.6. « Результат выполнения программы отделения корней
для уравнения x2-20sinx=0».
Метод половинного деления
Текст программы на языке PASCAL для уточнения корней уравнения (только для уравнения 3x4+4x3 -12x2+1=0) |
Блок-схема для программы |
program uravnenie;
uses crt;
var
x,y,a,b:real;
i:integer;
begin
clrscr;
write('Vvedite interval a..b: ');
readln(a,b);
writeln('Korni uravneniya: ');
x:=a;
while(x<=b) do begin
i:=i+1;
y:=3*x*x*x*x+4*x*x*x-12*x*x-1;
writeln('y',i,' pri x=',x:0:1,' = ',y:0:3);
x:=x+0.01;
end;
readkey;
end.
Рис.8. « Результат выполнения программы уточнения корней
для уравнения 3x4+4x3-12x2+1».
Текст программы на языке PASCAL для уточнения корней уравнения (только для уравнения x2-20sinx=0 |
Блок-схема для программы уточнения корней в уравнении ( для уравнения x2-20sinx=0) |
program uravnenie;
uses crt;
var
x,y,a,b,sinx:real;
i:integer;
begin
clrscr;
write('Vvedite interval a..b: ');
readln(a,b);
writeln('Korni uravneniya: ');
x:=a;
while(x<=b) do begin
i:=i+1;
y:=x*x-20*sinx;
writeln('y',i,' pri x=',x:0:1,' = ',y:0:3);
x:=x+0.01;
end;
readkey;
end.
Рис.10. « Результат выполнения программы уточнения корней
для уравнения x2-20sinx=0».
Метод простых интераций
Текст программы на языке PASCAL для уточнения корней уравнения (только для уравнения x2-20sinx=0 |
Блок-схема для программы уточнения корней в уравнении ( для уравнения x2-20sinx=0) |
uses crt;
const max_iter=100;
var a,b,e,M,x0,sinx: real;
k: integer;
function f(x: real): real;
begin
result:=x*x-20*sinx;{вот сюда свою функцию};
end;
begin
clrscr;
write('a/b/e: ');
readln(a,b,e);
k:=0;
while (abs(a-x0)>=e)or(k>max_iter) do
begin
M:=-(F(a+e)-F(a-e) )/(2*e);
x0:=a;
a:=x0+F(x0)/M;
inc(k);
writeln('C=', a:3:2,' f(c)=',f(a):3:2);
end;
if (abs(a-x0)<=e) then
writeln('C=', a:3:2,' Iteratsiy: ',k)
else
writeln('Answer not found!');
readln;
end.
программы уточнения корней
Текст программы на языке PASCAL для уточнения корней уравнения (только для уравнения 3x4+4x3 -12x2+1=0) |
Блок-схема для программы уточнения корней в уравнении ( для уравнения 3x4+4x3 -12x2+1=0) |
uses crt;
const max_iter=100;
var a,b,e,M,x0,x: real;
k: integer;
function f(x: real): real;
begin
result:= 3*x*x*x*x*x+4*x*x*x*x-12*x*x+
end;
begin
clrscr;
write('a/b/e: ');
readln(a,b,e);
k:=0;
while (abs(a-x0)>=e)or(k>max_iter) do
begin
M:=-(F(a+e)-F(a-e) )/(2*e);
x0:=a;
a:=x0+F(x0)/M;
inc(k);
writeln('C=', a:3:2,' f(c)=',f(a):3:2);
end;
if (abs(a-x0)<=e) then
writeln('C=', a:3:2,' Iteratsiy: ',k)
else
writeln('Answer not found!');
readln;
end.
Задание 1.2. еще варианты
program otdelenie_korney_uravneniya;
uses crt;
var a, b, h, x1, x2, y1, y2, sin(x): real;
begin
write ('a=');
readln (a);
write ('b=');
readln (b);
write ('h=');
readln (h);
x1:=a;
repeat
y1:= x*x-20*sin(x);
x2:=x1+h;
if (x2<b) then y2:= x*x-20*sin(x);
x1:=x2;
until (y1*y2)<0;
writeln ('x=',x1);
readkey;
end.
program otdelenie_korney_uravneniya;
uses crt;
const delta = 0.1;
var
a,b,x1,x2,d:real; n:byte;
function f(x:real):real;
begin
f:=x*x-20sinx
end;
function df(x:real):real;
begin
df:=(f(x+delta)-f(x))/delta
end;
begin
clrscr;
writeln('Отделение корней, введите концы отрезка');
write('a=');readln (a); write('b=');readln(b);
writeln('Число промежутков:');
write('n='); readln(n);
d:=(b-a)/n; x1:=a;
repeat
x2:=x1+d;
if (f(x1)*f(x2)<0) and (df(x1)*df(x2)>0) then
writeln('Промежуток:[ ',x1:6:3,',', x2:6:3, ']');
x1:=x2
until x2>b;
write('Конец просмотра');readln
end.
Информация о работе Решение алгебраических и трансцендентных . уравнений