Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


УРАВНЕНИЙ С ОДНОЙ ПЕРЕМЕННОЙ



ЦЕЛЬ РАБОТЫ

Сформировать у студентов знания об основных методах отделения корней уравнений с одной переменной, выработать умения и навыки использования этих методов при решении конкретных уравнений.

 

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Изучить теоретическую часть. Выполнить задания, соответствующие номеру Вашего варианта, и продемонстрируйте их преподавателю.

2. Оформите отчет по лабораторной работе, который должен содержать:

· титульный лист;

· исходные данные варианта;

· решение задачи;

· результаты решения задачи.

 

МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ

Пример 3.1.

Отделить корни трансцендентного уравнения графически.

Решение.

1. Создайте файл Func.m (листинг 3.1), содержащий описание функции .

Листинг 3.1. Файл Func.m.

function z=Func(x)

z=x.^2-sin(x)-1;

2. Постройте график функции в промежутке [-2; 2] (рис.3.1), выполнив в командном окне пакета MATLAB следующую последовательность операторов:

> > x=-2: 0.1: 2;

> > plot(x, Func(x)); grid on

Рис. 3.1. График функции

 

Из рисунка видно, что функция имеет два корня: х1Î [-1; 0] и х2Î [1; 2].

 

Пример 3.2.

Методом численного отделения уменьшить промежуток изоляции корня х2Î [1; 2] уравнения до промежутка длиной 0, 1.

Решение.

1. Создайте файл ChislOtd.m (листинг 3.2), содержащий описание функции, уменьшающий промежуток изоляции корня методом численного отделения.

Листинг 3.2. Файл ChislOtd.m.

function ChislOtd(f, x1, x2, h);

a=x1;

b=x1+h;

while b< =x2

if feval(f, a)*feval(f, b)< =0

a

b

end;

a=b;

b=b+h;

end;

2. Найдите новый промежуток изоляции корня:

> > ChislOtd('Func', 1, 2, 0.1)

a =

1.4000

b =

1.5000

Таким образом, мы получили промежуток изоляции корня [1, 4; 1, 5], который имеет длину 0, 1.

 

 

ПРИМЕРНЫЕ ВОПРОСЫ НА ЗАЩИТЕ РАБОТЫ

1. Что называется корнем уравнения?

2. Что значит решить уравнение?

3. Что значит отделить корень?

4. Какие существуют методы отделения корней?

5. Как находят границы расположения корней алгебраического уравнения?

6. Суть графического отделения корней уравнения.

7. Суть численного отделения корней уравнения.

 

ЗАДАНИЕ

1. Отделить корни трансцендентного уравнения графически.

2. Провести численное отделение корней.


Варианты заданий.

№ варианта Задание № варианта Задание

 


РАБОТА № 4

ОПРЕДЕЛЕНИЕ КОРНЕЙ

УРАВНЕНИЙ С ОДНОЙ ПЕРЕМЕННОЙ

ЦЕЛЬ РАБОТЫ

Сформировать у студентов представление о применении уравнений в различных областях деятельности, привить знания об основных этапах решения уравнения, выработать навыки использования различных методов для уточнения корня уравнения.

 

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Изучить теоретическую часть. Выполните задания, соответствующие номеру Вашего варианта, и продемонстрируйте их преподавателю.

2. Оформите отчет по лабораторной работе, который должен содержать:

· титульный лист;

· исходные данные варианта;

· решение задачи;

· результаты решения задачи.

 

МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ

Пример 4.1.

Решить уравнение методом половинного деления с точностью 0, 001 (промежуток изоляции корня [1, 4; 1, 5]).

Решение.

1. Создайте файл Func.m (листинг 4.1), содержащий описание функции .

Листинг 4.1. Файл Func.m.

function z=Func(x)

z=x.^2-sin(x)-1;

2. Создайте файл Div2.m (листинг 4.2), содержащий описание функции, возвращающей значение корня уравнения методом половинного деления.

Листинг 4.1. Файл Div2.m.

function Div2(f, x1, x2, esp);

% f - Имя m-файла, содержащего описание функции

% x1 - Левая граница отрезка, на котором производится поиск решения

% x2 - Левая граница отрезка, на котором производится поиск решения

% eps - Точность решения

L=x2-x1;

k=0;

% k - счетчик количества итераций

while L> esp

c=(x2+x1)/2;

k=k+1;

if feval(f, c)*feval(f, x1)< 0

% feval(f, c) - оператор вычисления в точке х=с значения

% функции, описание которой находится в соответствуюшем файле.

% Имя файла хранится в строковой переменной f

x2=c;

else

x1=c;

end;

L=x2-x1;

end;

x=c

k

fx=feval(f, c)

% fx - значение невязки

3. Вычислите значение корня уравнения

> > Div2('Func', 1.4, 1.5, 0.001)

x =

1.4102

k =

fx =

0.0014

Ответ: решение х=1, 4102 мы получили с точностью 0, 001 за семь итераций. При этом значение невязки fx = 0, 0014.

Пример 4.2.

Решить уравнение методом итераций с точностью 0, 001 (промежуток изоляции корня [1, 4; 1, 5]).

Решение.

1. Создайте файл Func.m (листинг 4.3), содержащий описание функции .

Листинг 4.3. Файл Func.m.

function z=Func(x)

z=x.^2-sin(x)-1;

2. Создайте файл Func1.m (листинг 4.4), содержащий описание функции .

Листинг 4.4. Файл Func1.m.

function z=Func1(x, m, f)

z=x-m*feval(f, x);

3. Создайте файл Func2.m (листинг 4.5), содержащий описание функции .

Листинг 4.4. Файл Func2.m.

function z=Func2(x, m, f)

dx=10^-7;

x1=x+dx;

tmp1=x-m*feval(f, x);

tmp2=x1-m*feval(f, x1);

z=abs((tmp2-tmp1)/dx);

4. Постройте графики функций f1, f2 (рис. 4.1).

> > x=1.4: 0.001: 1.5;

> > m=0.1;

> > plot(x, Func1(x, m, 'Func'));

> > hold on

> > plot(x, Func2(x, m, 'Func'), '--'); grid on

 

Рис. 4.1. Графики функций - 1 и - 2.

 

Из рис. 4.1 видно, что в промежутке [1, 4; 1, 5] функция удовлетворяет условиям теоремы:

Пусть уравнение x = f(x) имеет единственный корень на отрезке [a; b] и выполнены условия:

1. f(x) определена и дифференцируема на [a; b].

2. f(x) Î [a; b] для всех хÎ [a; b].

3. Существует такое действительное q, что для всех хÎ [a; b].

Тогда итерационная последовательность xn = f(xn-1) (n=1, 2, …) сходится при любом начальном приближении х0Î [a; b].

5. Создайте файл Iter.m (листинг 4.5), содержащий описание функции, возвращающей значение корня уравнения методом итераций.

Листинг 4.5. Файл Iter.m.

function Iter(f, x0, esp, m)

x1=Func1(x0, m, f);

k=1;

while abs(x1-x0)> esp

x0=x1;

x1=Func1(x0, m, f);

k=k+1;

end;

x=x1

k

fx=feval(f, x1)

6. Вычислите значение корня уравнения:

> > Iter('Func', 1.4, 0.001, 0.1)

x =

1.4076

k =

fx =

-0.0055

Ответ: решением уравнения будет число х=1, 4076, полученное на 5 шаге. Значение невязки fx = -0.0055.

 

Пример 4.3.

Решить уравнение методом касательных с точностью 0, 001 (промежуток изоляции корня [1, 4; 1, 5]).

Решение.

1. Создайте файл Func.m (листинг 4.6), содержащий описание функции .

Листинг 4.6. Файл Func.m.

function z=Func(x)

z=x.^2-sin(x)-1;

2. Создайте файл Func1.m (листинг 4.7), содержащий описание первой производной функции .

Листинг 4.7. Файл Func1.m.

function z=Func1(x)

z=2*x-cos(x);

3. Создайте файл Func2.m (листинг 4.8), содержащий описание второй производной функции .

Листинг 4.8. Файл Func2.m.

function z=Func2(x)

z=2+sin(x);

4. Создайте файл Nuton.m (листинг 4.9), содержащий описание функции, возвращающей значение корня уравнения методом касательных.

Листинг 4.9. Файл Nuton.m.

function Nuton(f, f1, f2, a, b, esp)

if feval(f, a)*feval(f2, a)> 0

x0=a;

else

x0=b;

end;

x1=x0-feval(f, x0)/feval(f1, x0);

k=1;

while abs(x1-x0)> esp

x0=x1;

x1=x0-feval(f, x0)/feval(f1, x0);

k=k+1;

end;

x=x1

k

fx=feval(f, x1)

5. Вычислите значение корня уравнения:

> > Nuton('Func', 'Func1', 'Func2', 1.4, 1.5, 0.001)

x =

1.4096

k =

fx =

1.4191e-010

Ответ: решение х=1, 4096 мы получили с точностью 0, 001 за 3 итераций. При этом значение невязки fx =1.4191e-010.

 

Пример 4.4.

Решить уравнение методом секущих с точностью 0, 001 (промежуток изоляции корня [1, 4; 1, 5]).

Решение.

1. Создайте файл Func.m (листинг 4.10), содержащий описание функции .

Листинг 4.10. Файл Func.m.

function z=Func(x)

z=x.^2-sin(x)-1;

2. Создайте файл Func2.m (листинг 4.11), содержащий описание второй производной функции .

Листинг 4.11. Файл Func2.m.

function z=Func2(x)

z=2+sin(x);

3. Создайте файл Hord.m (листинг 4.12), содержащий описание функции, возвращающей значение корня уравнения методом хорд.

Листинг 4.12. Файл Hord.m.

function Hord(f, f2, a, b, esp)

if feval(f, a)*feval(f2, a)> 0

xf=a;

x0=b;

else

xf=b;

x0=a;

end;

x1=x0-feval(f, x0)*(x0-xf)/(feval(f, x0)-feval(f, xf));

k=1;

while abs(x1-x0)> esp

x0=x1;

x1=x0-feval(f, x0)*(x0-xf)/(feval(f, x0)-feval(f, xf));

k=k+1;

end;

x=x1

k

fx=feval(f, x1)

5. Вычислите значение корня уравнения:

> > Hord('Func', 'Func2', 1.4, 1.5, 0.001)

x =

1.4096

k =

fx =

-6.0203e-005

Ответ: корень уравнения по методу хорд равен 1, 4096 с точностью 0, 001, найденный на втором шаге. При этом значение невязки fx =-6.0203e-005.

 

Решение алгебраических и трансцендентных уравнений в среде MATLAB осуществляется с помощью следующих встроенных функций: solve(), fzero().

Функция solve( ) представляется в следующим виде:

solve('f(x) ', x)

где:

ü 'f(x)' – решаемое уравнение, записанное в одиночных кавычках;

ü x – искомое неизвестное.

Пример 4.5.

Пусть необходимо решить следующее уравнение:

.

Программа решения уравнения имеет вид:

> > solve('x^2-sin(x)-1=0')

После нажатия клавиши < Enter> получим следующее решение:

ans =

1.409624

 

Функция fzero( ) имеет следующую реализацию:

[x, f, e_flag, inform] = fzero('f(x) ', x0)

где:

ü x – искомое неизвестное;

ü f – значение невязки;

ü e_flag – переменная, знак которой свидетельствует о наличии корня на данном интервале ( например, e_flag=1 – корень существует);

ü inform – содержит три поля с именами iterations (количество итераций), funcCount (количество обращений к функции f(x)), и algorithm (наименование алгоритма, использованного для нахождения корня;

ü 'f(x)' – решаемое уравнение, записанное в одиночных кавычках;

ü x0 – начальное приближение или интервал поиска решения.

Пример 4.6.

Необходимо найти корни уравнения

,

если известно, что корни находятся в промежутках [-1, 0] и [1, 2].

Решение:

> > [x, f, e_flag, inform]=fzero('x^2-sin(x)-1', [-1, 0])

x =

-0.6367

f =

e_flag =

inform =

iterations: 8

funcCount: 8

algorithm: 'bisection, interpolation'

 

> > [x, f, e_flag, inform]=fzero('x^2-sin(x)-1', [1, 2])

x =

1.4096

f =

-1.1102e-016

e_flag =

inform =

iterations: 10

funcCount: 10

algorithm: 'bisection, interpolation'

 

 

ПРИМЕРНЫЕ ВОПРОСЫ НА ЗАЩИТЕ РАБОТЫ

1. Что называется корнем уравнения?

2. Что значит решить уравнение?

3. Каковы этапы решения уравнения с одной переменной?

4. Какие существуют методы решения уравнения с одной переменной?

5. Суть метода половинного деления.

6. Суть метода хорд. Графическая интерпретация метода.

7. Суть метода касательных. Графическая интерпретация метода.

8. Суть метода итерации.

9. Каковы достаточные условия сходимости итерационного процесса при решении уравнения x=f(x) на отрезке [a, b], содержащего корень, методом простой итерации?

10. Какое условие является критерием достижения заданной точности при решении уравнения x=f(x) методом хорд, касательных, итераций?

11. Записать формулу нахождения значений последовательности при решении уравнения методом: хорд, касательных.

12. Как строится итерационная последовательность точек при решении уравнения методом простой итерации?

 

 

ЗАДАНИЕ

Используя варианты и результаты лабораторной работы №3 выполнить следующие задания:

1. Решить уравнение методами половинного деления, итераций, секущих и касательных с точностью 0, 001.

2. Вывести на печать приближенное значение корня, количество итераций, значение невязки.

3. Провести сравнительную характеристику методов.

4. Решить уравнение в среде MATLAB с помощью встроенных функций.


РАБОТА №5

РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ

АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ

ЦЕЛЬ РАБОТЫ

Сформировать у студентов представление о прямых и итерационных методах решения систем линейных уравнений, выработать умения составлять и применять алгоритмы и программы для решения систем уравнений, дать навыки в использовании программных средств для решения систем уравнений.

 

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Изучить теоретическую часть. Выполните задания, соответствующие номеру Вашего варианта, и продемонстрируйте их преподавателю.

2. Оформите отчет по лабораторной работе, который должен содержать:

· титульный лист;

· исходные данные варианта;

· решение задачи;

· результаты решения задачи.

 

МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ

Пример 5.1.

Найти решение системы методом Гаусса:

Решение:

Создать файл Exchange.m (листинг 5.1), содержащий описание функции, осуществляющей перестановку строк при обнаружении в текущей строке нулевого элемента на главной диагонали.

Листинг 5.1. Файл Exchange.m.

function z=Exchange(C, i)

k=i+1;

while C(k, i)==0

k=k+1;

end;

for j=1: size(C, 1)

s=C(i, j);

C(i, j)=C(k, j);

C(k, j)=s;

end;

z=C;

2. Создать файл Simplex.m (листинг 5.2), содержащий описание функции, возвращающей расширенную матрицу системы к диагональному виду.

Листинг 5.2. Файл Simplex.m.

function z=Simplex(A, b)

N=size(A, 1); % Определение числа уравнений системы

C=cat(2, A, b); % Создание расширенной матрицы системы

for i=1: N-1

if C(i, i)==0

C=Exchange(C, i);

end;

for j=0: N

C(i, N+1-j)=C(i, N+1-j)/C(i, i);

end;

for m=i+1: N

alpha=C(m, i);

for j=i: N+1

C(m, j)=C(m, j)-alpha*C(i, j);

end;

end;

end;

C(N, N+1)=C(N, N+1)/C(N, N);

C(N, N)=1;

z=C;

3. Создать файл Gauss.m (листинг 5.3), содержащий описание функции, возвращающей решение системы линейных уравнений методом Гаусса.

Листинг 5.3. Файл Gauss.m.

function z=Gauss(A, b)

C=Simplex(A, b);

N=size(A, 1);

v(N)=C(N, N+1);

for j=1: N-1

s=0;

for k=0: j-1

s=s+C(N-j, N-k)*v(N-k);

end;

v(N-j)=(C(N-j, N+1)-s)/C(N-j, N-j);

end;

z=v';

4. Задать матрицу системы линейных уравнений:

> > A=[1.23, -3.25, -8.69; 7.03, 4.81, 0.27; 4.49, -7.55, 12.51]

 

A =

 

1.2300 -3.6900 -8.6900

7.0300 4.8100 0.2700

4.4900 -7.5500 12.5100

5. Задать вектор-столбец свободных членов:

> > b=[10.33; -6.43; 41.53]

 

b =

 

10.3300

-6.4300

41.5300

6. Решить систему уравнений, использую функцию Gauss( ):

> > x=Gauss(A, b)

 

x =

 

1.6468

-3.7694

0.4540

7. Проверить правильность решения системы линейных уравнений:

> > A*x

 

ans =

 

10.3300

-6.4300

41.5300

Ответ: решением системы методом Гаусса является вектор-столбец .

Пример 5.2.

Решить систему линейных алгебраических уравнений методом итерации с точностью 0, 001:

Решение:

Для начала преобразуем данную систему к виду пригодному для итерационного процесса:

1. Возьмем первым уравнением второе, третьим - третье, а вторым сумму первого и третьего уравнений:

2. Разделим каждое уравнение на диагональный коэффициент и выразим из каждого уравнения диагональное неизвестное:

3. Создайте файл Iterac.m (листинг 5.4), содержащий описание функции, возвращающей решение системы линейных уравнений методом простой итерации.

Листинг 5.4. Файл Iterac.m.

function Iterac(C1, d1, eps)

N=size(C1, 1);

R1=d1;

q1=R1;

q2=(C1*q1)+R1;

p=0;

s=0;

for i=1: N

if abs(q2(i)-q1(i))> s

s=abs(q2(i)-q1(i));

end;

end;

while s> eps

p=p+1;

q1=q2;

q2=(C1*q1)+R1;

s=0;

for i=1: N

if abs(q2(i)-q1(i))> s

s=abs(q2(i)-q1(i));

end;

end;

end;

q2

(C1*q2)+R1-q2

p

abs(q2-q1)

4. Задайте матрицу системы, приведенной к виду, пригодному для метода простой итерации:

> > A=[0, -0.6842, -0.0384; 0.5296, 0, 0.3537; -0.3589, 0.6035, 0]

 

A =

 

0 -0.6842 -0.0384

0.5296 0 0.3537

-0.3589 0.6035 0

5. Задайте вектор-столбец свободных членов:

> > b=[-0.9146; -4.8018; 3.3197]

 

b =

 

-0.9146

-4.8018

3.3197

6. Найдите решение системы линейных уравнений:

> > Iterac(A, b, 0.001)

 

q2 =

1.6469

-3.7688

0.4537

 

ans =

1.0e-003 *

 

-0.3175

-0.3475

0.4688

 

p =

 

ans =

1.0e-003 *

 

0.5043

0.4768

0.2273

Ответ: решением системы является вектор-столбец , полученный на 11 шаге итерации.

 

Пример 5.3.

Решить систему линейных алгебраических уравнений методом Зейделя с точностью 0, 001:

Решение:

1. Создать файл Zeidel.m (листинг 5.5), содержащий описание функции, выполняющей последовательно: а) приведение системы к нормальному виду; б) приведение нормальной системы к виду, пригодному для итерационного процесса Зейделя; в) реализацию итерационного процесса Зейделя.

Листинг 5.5 Файл Zeidel.m.

function Zeidel(A, b, eps);

N=size(A, 1);

% Приведение системы к нормальному виду

C=A'*A;

D=A'*b;

% Приведение системы к виду, пригодному для итерационного процесса

for i=1: N

D1(i)=D(i)/C(i, i);

end;

D1=D1'; % Транспонирование матрицы

d1=D1;

for i=1: N

for j=1: N

if i==j

C1(i, j)=0;

else

C1(i, j)=-C(i, j)/C(i, i);

end;

end;

end;

% Решение СЛАУ методом Зейделя

R1=d1;

q1=R1;

% Создание матрицы для хранения промежуточных данных

t=size(C1);

N=t(1, 1);

q2=zeros(t(1, 1), 1);

% Цикл вычислений

p=0;

s=0;

for i=1: N

if abs(q2(i)-q1(i))> s

s=abs(q2(i)-q1(i));

end;

end;

while s> eps

q2=q1;

p=p+1;

for f=1: N

v=(C1*q1)+R1;

x(f, 1)=v(f, 1);

q1(f, 1)=x(f, 1);

end;

s=0;

for i=1: N

if abs(q2(i)-q1(i))> s

s=abs(q2(i)-q1(i));

end;

end;

q1=x;

end;

'Ответы: '

q2

'Проверка: '

A*q2

'число проходов: '

p

abs(q2-q1)

2. Задать значения коэффициентов при неизвестных исходной системы линейных уравнений и столбец свободных членов:

> > A=[1.23, -3.25, -8.69; 7.03, 4.81, 0.27; 4.49, -7.55, 12.51];

> > b=[10.33; -6.43; 41.53];

3. Вычислить решение системы линейных уравнений, используя функцию Zeidel():

> > Zeidel(A, b, 0.001)

ans =

Ответы:

q2 =

1.6461

-3.7683

0.4543

ans =

Проверка:

ans =

10.3235

-6.4304

41.5255

ans =

число проходов:

p =

ans =

1.0e-003 *

0.4400

0.5685

0.2488

Ответ: решением системы трех линейных уравнений является вектор , найденный на восьмом шаге итерации.

 

Рассмотрим решение систем линейных уравнений с помощью встроенной функции solve():

solve (' f1', 'f2 ', …, 'fn ', x1, x2, …, xn)

где:

ü 'fi ' – i-е уравнение системы, i=1, 2, …, n;

ü xii-е неизвестное, i=1, 2, …, n.

Перед функцией solve() необходимо с помощью функции syms определить символьные переменные.

Пример 5.4.

Пусть необходимо решить следующую систему уравнений:

Программа решения системы уравнений имеет вид:

> > syms x1 x2 x3;

> > Y=solve('1.23*x1-3.25*x2-8.69*x3=10.33', '7.03*x1+4.81*x2+0.27*x3=-6.43', '4.49*x1-7.55*x2+12.51*x3=41.53')

После нажатия клавиши < Enter> получим ответ в следующем виде:

Y =

x1: [1x1 sym]

x2: [1x1 sym]

x3: [1x1 sym]

Программа задачу решила, но не выдала значения неизвестных х1, х2, х3. Для их получения необходимо воспользоваться командой Y.k, где k – имя неизвестного. В нашем случае решение будет иметь вид:

> > Y.x1

ans =

1.6467696870844978837212332256586

 

> > Y.x2

ans =

-3.7690989344414828576791743237764

 

> > Y.x3

ans =

.45398138688708304769095896660916

ПРИМЕРНЫЕ ВОПРОСЫ НА ЗАЩИТЕ РАБОТЫ

1. Какие вы знаете группы методов решения систем линейных уравнений?

2. Какие методы относятся к прямым методам решения систем линейных уравнений?

3. Какие методы относятся к приближенным методам решения систем линейных уравнений?

4. Что значит решить систему уравнений?

5. В чем заключается суть метода Гаусса для решения систем линейных уравнений?

6. В чем заключается суть метода Жордана-Гаусса для решения систем линейных уравнений?

7. В чем заключается суть метода простой итерации для решения систем уравнений?

8. Как привести систему к виду с преобладающими диагональными коэффициентами?

9. В чем заключается суть метода Зейделя для решения систем уравнений?

 

ЗАДАНИЕ

1. Решить СЛАУ методом Гаусса с точностью 0, 001.

2. Решить СЛАУ методом простой итерации с точностью 0, 001.

3. Решить СЛАУ методом Зейделя с точностью 0, 001.

4. Провести сравнительную характеристику методов.

5. Решить СЛАУ в системе MATLAB с помощью встроенной функции.

Варианты заданий.

№ варианта Задание

 

 


РАБОТА №6


Поделиться:



Последнее изменение этой страницы: 2017-03-14; Просмотров: 578; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.276 с.)
Главная | Случайная страница | Обратная связь