Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вычислительная практика.docx
Скачиваний:
11
Добавлен:
13.11.2018
Размер:
97.39 Кб
Скачать

Московский авиационный институт

(государственный технический университет)

Вычислительная практика в системе «MATLAB»

Выполнил: студент группы 07-202 Красовский Сергей

Проверил:Чемякин Антон Владимирович

Москва 2011

Задание №1

Цель:Разложить функцию в ряд Фурье

syms x k pi

f_x=maple( 'piecewise( x<0, 0, piecewise( x<2, x^2), piecewise( x<pi, -x+4 )))');

a_0=1/pi*int( f_x, x, -pi, pi )

a_k=1/pi*int( f_x*cos( k*x ), -pi, pi)

b_k=1/pi*int( f_x*sin( k*x ), -pi, pi )

sum4 = a_0/2 + symsum( a_k*cos( k*x ) + b_k*sin( k*x ), k, 1, 20 );

pretty(sum4)

sum9=a_0/2+symsum(a_k*cos(k*x)+b_k*sin(k*x),k,1,25);

pretty(sum9)

clear pi

subplot(1,2,1)

ezplot(sum4),hold on

grid on, hold on

ezplot(sum9),hold on

x=0:0.1:2;

plot(x,x^2,'r'),hold on;

x=2:0.1:pi;

plot(x,-x+4,’r’)

График сумм и исходной функции 1

Вывод к задаче 2: раздожили функцию в ряд фурье, простота написания кода; в ходе решения подключали ядро Mapple .

Задание №2

Решить Трансцендентное уравнение +=0

1)Методом секущих

e=1e-08; %Устанавливаем допустимую погрешность

x_k=3; %значение k-го приближения

xk_minus_1=1; %значение k-1-го приближения

I=0; %счётчик интераций I устанавливаем в ноль

delta=x_k;

D=[delta];

while abs(delta)>e%начало цикла интераций

xk_plus_1=x_k-(fun(x_k)/(fun(x_k)-fun(xk_minus_1)))*(x_k-xk_minus_1); %следующее приближение

delta=xk_plus_1 - x_k; %текущая погрешность

D=[D delta];

xk_minus_1=x_k;

x_k=xk_plus_1; %переприсваиваем приближения, чтоб перейти к следующему

I=I+1;

end;

Str=['Значение корня: ' num2str(x_k)];

disp(Str)

Str=['Точность: ' num2str(delta)];

disp(Str)

Str=['Количество интераций: ' num2str(I)];

disp(Str)

plot(D)

График приближения корня

Значение корня: 0.35885

Точность: -1.0928e-009

Количество интераций: 8

2)Методом Ньютона

e = 1e-08; %допустимая погрешность

x_k = 1; %задаем значение первого приближения

I = 0; %счетчик итераций I устанавливаем в ноль

delta = x_k;

D = [ delta ];

while abs( delta ) > e %начало цикла итераций

xk_plus_1 = x_k - fun( x_k ) / fun1( x_k ); %следующее приближение

delta = xk_plus_1 - x_k;

D = [ D delta ];

x_k = xk_plus_1; %переприсваиваем приближения, чтобы перейти к следующему

I = I+1;

end;

Str = ['Значение корня: ' num2str( xk_plus_1 ) ];

disp( Str )

Str = ['Точность: ' num2str( delta ) ];

disp( Str )

Str = ['Количество итераций: ' num2str( I ) ];

disp( Str )

plot( D )

График приближения корня

Значение корня: 0.35885

Точность: 2.4741e-011

Количество итераций: 5

4)Методом итераций

e = 1e-04; %допустимая погрешность

xk = 0.5; %задаем значение первого приближения

I = 0; %счетчик итераций I устанавливаем в ноль

delta = xk;

while abs( delta ) > e %начало цикла итераций

xk_plus_1=log(log(xk))/2;

delta = xk_plus_1 - xk; %текущая погрешность

xk = xk_plus_1; %перейти к следующему приближению

I = I+1;

end;

Str = ['Значение корня: ' num2str(xk) ];

disp( Str )

Str = ['Точность: ' num2str(delta) ];

disp( Str )

Str = ['Количество итераций: ' num2str( I ) ];

disp( Str )

Значение корня: 0.35885

Точность: 2.3611e-011

Количество итераций: 11

5)Методом половинного деления

e = 1e-04; %Устанавливаем допустимую погрешность

dx = 0.1; %шаг х при поиске интервала, содержащего корень

a = 0.1;

b = a;

while fun(a)*fun(b) > 0 %Определяем интервал, на котором

b = b + dx; % функция F( x ) меняет знак

end;

a = b - dx;

x = (a+b)/2; % Первое приближение корня -

% середина найденного интервала

I = 1; % Счетчик итераций устанавливаем в "1"

X=[x]; % Формирование массивов для графиков

Y=[fun(x)];

while abs( fun(x) ) > e

if fun( x ) * fun( a ) < 0 %Если функция имеет разные знаки

%на концах отрезка,

b = x; %сдвигаем правую границу

else

a = x; % иначе сдвигаем левую границу

end;

x = (a+b)/2; %и вычисляем следующее приближение

I = I + 1; %увеличиваем количество итераций на 1

X = [X x];

Y = [Y fun(x)];

end;

Str = ['Значение корня: ' num2str(x) '; Количество итераций: ' num2str(I)];

disp( Str )

figure %Построение двух графиков в одном графическом окне

subplot( 2, 1, 1 );

plot( X, '-r' ), grid on

subplot( 2, 1, 2 );

plot( Y, '-b' ), grid on