Главная страница
Навигация по странице:

  • Обработка результатов

  • Лабораторная по Методы математического моделирования и численные методы. (Хашимов, ЮУрГУ). Лабораторная работа 1 Сравнение эффективности численных методов


    Скачать 59 Kb.
    НазваниеЛабораторная работа 1 Сравнение эффективности численных методов
    АнкорЛабораторная по Методы математического моделирования и численные методы. (Хашимов, ЮУрГУ
    Дата20.10.2019
    Размер59 Kb.
    Формат файлаdocx
    Имя файла1.docx
    ТипЛабораторная работа
    #90975




    Министерство образования и науки Российской Федерации

    Государственное образовательное учреждение высшего профессионального образования

    Южно-Уральский государственный Университет

    Факультет «Высшая школа электроники и компьютерных наук»

    Кафедра «Конструирование и производство радиоэлектронных средств»


    Лабораторная работа №1

    Сравнение эффективности численных методов
    Выполнил студент:

    группы КЭ-380

    Левченко Г.А.

    Челябинск 2016

    1. Цель работы

    В данной работе необходимо ознакомиться с программным пакетом MATLAB, научиться использовать стандартные функции данной программы, а также изучить различные численные методы и их эффективность на примере конкретной задачи.

    1. Задание

    В данной работе необходимо найти решение функции:



    для с точностью с помощью:

    1. Метода Эйткена;

    2. Метода ложного положения;

    3. Метода деления пополам;

    4. Метода простой итерации;

    5. Метода Ньютона (в том числе и 3-х его модификаций).



    1. Ход работы

    Листинг программы.

    Файл Aitken.m (Метод Эйткена)

    function Aitken

    %Эйткена

    clc;

    format long

    x1=-1;

    x2=pi;

    xx=x1:0.05:x2;

    [yphi,yf]=f_t(xx);

    yfmax=max(yf);

    itmax=1000;

    it=0;

    e=1e-6;

    disp('Метод Эйткена');

    tic

    while it
    [phi,f]=f_t(x1);

    xn1=phi;

    [phi,f]=f_t(xn1);

    xn2=phi;

    it=it+1;

    if(abs(f)/yfmax)
    break;

    else

    x2=(xn1*xn2-xn1*xn1)/(xn2-2*xn1+xn1);

    x1=x2;

    end

    end

    toc

    disp('Количество итераций');disp(it);

    disp('Корень уравнения');disp(x2);
    function [phi,f]=f_t(s)

    phi=sin(s+pi/8);

    f=s-phi;

    return

    Файл false_position.m (метод ложного положения)

    function false_position

    %ложного положения

    clc;

    format long

    x1=-1;

    dx=0.05;

    ee=1e-6;

    f1=f_t(x1);

    it=0;

    disp('Метод ложного положения');

    tic

    while it<1000

    x2=x1+dx;

    it=it+1;

    f2=f_t(x2);

    if f1*f2<0

    break

    else

    x1=x2;

    f1=f2;

    end

    end

    while it<1000

    it=it+1;

    r=x1-f1*(x2-x1)/(f2-f1);

    fd=f_t(r);

    if abs(fd)<=ee

    break

    end

    if f1*fd>0

    x1=r;

    f1=fd;

    else

    x2=r;

    f2=fd;

    end

    end

    toc

    disp('Количество итераций');disp(it);

    disp('Корень уравнения');disp(r);

    function t=f_t(s)

    t=s-sin(s+pi/8);

    return
    Файл bisection.m(метод деления пополам)
    function bisection

    %деление пополам

    clc;

    format long

    x1=-1;

    x2=pi;

    tic

    dx=0.05;

    ee=1e-6;

    f1=f_t(x1);

    it=0;

    disp('Метод деления пополам');

    tic

    while it<1000

    x2=x1+dx;

    f2=f_t(x2);

    it=it+1;

    if f1*f2 <0

    break

    else x1=x2;

    f1=f2;

    end

    end

    while it< 1000

    r=(x1+x2)/2;

    fr=f_t(r);

    it=it+1;

    if abs(fr)<=ee

    break

    end

    if f1*fr>0

    x1=r;

    f1=fr;

    else

    x2=r;

    end

    end

    toc

    disp('Количество итераций');disp(it);

    disp('Корень уравнения');disp(r);

    function t=f_t(s)

    t=s-sin(s+pi/8);

    return
    Файл simple_iteration.m(метод простой итерации)

    function simple_iteration

    %простой итерации

    format long

    x1=-1;

    x2=pi;

    xx=x1:0.05:x2;

    [yphi,yf]=f_t(xx);

    yfmax=max(yf);

    itmax=1000;

    it=0;

    ee=1e-6;

    tic

    while it
    [phi,f]=f_t(x1);

    xn=phi;

    if(abs(f)/yfmax)
    break

    else

    x1=xn;

    it=it+1;

    end

    end

    toc

    disp(xn);

    disp(it)

    function [phi,f]=f_t(s)

    phi=sin(s+pi/8);

    f=s-phi;

    return
    Файл Newton.m (метод Ньютона)

    function Newton

    %Метод Ньютона

    clc;

    format long

    x0=-1;

    f=inline('x-sin(x+pi/8)');

    df=inline('1-cos(x+pi/8)');

    ee=1e-6;

    it0=0;

    disp('Метод Ньютона');

    tic

    while it0<1000

    it0=it0+1;

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

    x0=x1;

    y=feval(f,x0);

    if abs(y)
    break

    end

    end

    toc

    disp('Количество итераций');disp(it0);

    disp('Корень уравнения');disp(x0);

    Файл Newton_m1.m(метод Ньютона, модификация 1)

    function Newton_m1

    %Первая модификаия метода Ньютона

    format long

    clc;

    p0=-1.23;

    p1=-1;

    f=inline('x-sin(x+pi/8)');

    df=inline('1-cos(x+pi/8)');

    ee=1e-6;

    it0=0;

    disp('Первая модификаия метода Ньютона');

    tic

    while it0<1000

    it0=it0+1;

    p2=p1-feval(f,p1)*(p1-p0)/(feval(f,p1)-feval(f,p0));

    p0=p1;

    p1=p2;

    y=feval(f,p1);

    if abs(y)
    break

    end

    end

    toc

    disp('Количество итераций');disp(it0);

    disp('Корень уравнения');disp(p1);
    Файл Newton_m2.m(метод Ньютона, модификация 2)

    function Newton_m2

    %Метод Ньютона

    format long

    clc;

    p0=-1;

    p01=-1.5;

    f=inline('x-sin(x+pi/8)');

    df=inline('1-cos(x+pi/8)');

    ee=1e-6;

    it0=0;

    disp('Вторая модификация метода Ньютона');

    tic

    while it0<1000

    it0=it0+1;

    p1=p0-feval(f,p0)/feval(df,p01);

    p0=p1;

    y=feval(f,p0);

    if abs(y)
    break

    end

    end

    toc

    disp('Количество итераций');disp(it0);

    disp('Корень уравнения');disp(p0);

    Файл Newton_m3.m(метод Ньютона, модификация 3)

    function Newton_m3

    %Третья модификация метода Ньютона

    format long

    clc;

    p0=-1;

    f=inline('x-sin(x+pi/8)');

    df=inline('1-cos(x+pi/8)');

    ddf=inline('sin(x+pi/8)');

    ee=1e-6;

    it0=0;

    disp('Третья модификация метода Ньютона');

    tic

    while it0<1000

    it0=it0+1;

    p1=p0-feval(f,p0)/feval(df,p0)- (((feval(ddf,p0)*feval(f,p0)^2))/2*feval(df,p0)^3);

    p0=p1;

    y=feval(f,p0);

    if abs(y)
    break

    end

    end

    toc

    disp('Количество итераций');disp(it0);

    disp('Корень уравнения');disp(p0);



    1. Обработка результатов


    Таблица 1 – результаты вычислений различных методов



    Метод

    Время, с

    К-во итераций

    Результат

    1

    Эйткена

    0.001239

    12

    0.980536611706166

    2

    Ложного положения

    0.000952

    43

    0.980551090024394

    3

    Деления пополам

    0.000161

    54

    0.980551147460938

    4

    Простой итерации

    0.000225

    12

    0.980550580625687

    5

    Ньютона

    0.008634

    5

    0.980551140299097

    6

    Ньютона (модификация 1)

    0.010600

    7

    0.980550946714903

    7

    Ньютона (модификация 2)

    0.015082

    16

    0.980550482115963

    8

    Ньютона (модификация 3)

    0.006339

    5

    0.980551140320944



    Рисунок 1 – График сравнения времени, необходимого для нахождения корня каждым численным методом



    Рисунок 2 – График сравнения количества итераций для всех численных методов

    1. Вывод

    Таким образом, как видно из таблицы 1 и рисунка 1 наиболее эффективным по времени методом является метод деления пополам, а самый не эффективным методом является метод Ньютона 2-й модификации. Из рисунка 2 видно, что методы, с помощью которых корень находится за меньшее количество итераций, по сравнению с другими – это методы Ньютона и его 3-я модификация. Так же по рисунку 2 видно, что самый быстрый метод является методом с самым большим количеством итераций.

    Результаты всех методов расходятся в пределах заданной точности, что говорит о правильности выполнения построения кода для каждого метода.


    написать администратору сайта