Регистрация не е нужна, освен при създаване на тема в "Задача на седмицата".

Нелинейно уравнение

Нелинейно уравнение

Мнениеот Anubis » 05 Фев 2016, 20:58

Да се реши с точност [tex]10^{-4}[/tex] уравнението [tex]\sin x + e^{-x}+x^3=5[/tex].
Аватар
Anubis
Напреднал
 
Мнения: 286
Регистриран на: 05 Авг 2010, 17:45
Рейтинг: 166

Re: Нелинейно уравнение

Мнениеот Knowledge Greedy » 07 Фев 2016, 00:22

[tex]f(x)=x^3+sinx+e^{-x}-5[/tex]
[tex]f'(x)=3x^2+cosx-e^{-x}[/tex]
x[tex]_{n+1}=x_n-\frac{x^3+sinx+e^{-x}-5}{3x^2+cosx-e^{-x}}[/tex]
На 450-та (?) итерация се получава единият от двата реални корена на уравнението, със зададената точност.
[tex]x_1\approx-4,649034587[/tex]
Потвърдено от https://www.wolframalpha.com/input/?i=x ... %E2%88%92x)%3D5

Вторият корен по метода на Нютон не можах да получа.
Feci, quod potui, faciant meliora p0tentes.
Сторих каквото можах, по-добрите по-добро да направят.
Knowledge Greedy
Професор
 
Мнения: 2947
Регистриран на: 20 Фев 2010, 11:40
Рейтинг: 2830

Re: Нелинейно уравнение

Мнениеот Anubis » 07 Фев 2016, 10:03

Knowledge Greedy, методът на Нютон е може би най-бързо сходящият итерационен метод заради квадратичната си скорост на сходимост. С други думи: ако в началото грешката е от порядъка на [tex]10^{-2}[/tex], на следващата итерация ще бъде [tex](10^{-2})^2=10^{-4}[/tex], след това [tex](10^{-4})^2=10^{-8}[/tex]. Т. е. 3-4 итерации са достатъчни за постигане на исканата точност. Прилагам двата m-файла, написани на Matlab: единият е потребителската функция, реализираща метода на Нютон, другата е скрипт, в който я тестваме с примера.
Newton.m
Код: Избери целия код
function [root,iter] = Newton(f, fp, fpp, a, b, tol)
global x k
xx = a : 0.01 : b;
ff = f(xx);
plot(xx,ff,'b','LineWidth',3)
hold on
grid on
set(gca, 'FontName', 'Times', 'FontSize', 11)
axis([a,b,min(ff),max(ff)])
xlabel('\it{x}')
ylabel('\it{y}')
title('Метод на Нютон')
if (f(a)*fpp(a)>0)
    x(1) = a;
end
if (f(b)*fpp(b)>0)
    x(1) = b;
    %else x(1) = b;
end
x(2) = x(1) - f(x(1))/fp(x(1));
k = 1;
while (abs(x(k+1)-x(k)) > tol)
    x(k+2) = x(k+1) - f(x(k+1))/fp(x(k+1));
    k = k + 1;
end
root = x(end);
iter = k;
end

Newt_ex.m
Код: Избери целия код
clear all
clc
%===================================
% Using strings for inline()
%===================================
syms y
fun = sin(y) + exp(-y) + y^3 - 5;
funp = diff(fun,y);
funpp = diff(funp,y);
%===================================
% Inline functions for Newton method
%===================================
f = inline(fun);
fp = inline(funp);
fpp = inline(funpp);
%===================================
% Interval for the 1-st root
%===================================
a = 1.55;
b = 1.60;
%===================================
% Tolerance
%===================================
tol = 1.0e-04;
%===================================
% Calling the function Newton(args)
%===================================
figure(1)
[r,it] = Newton(f,fp,fpp,a,b,tol);
display('=================================')
display('FIRST ROOT')
display('=================================')
display('The root: ')
display(r)
display('Number of iterations: ')
display(it)
%===================================
% Interval for the 2-nd root
%===================================
a = -4.8;
b = -4.6;
tol = 1.0e-04;
figure(2)
[r,it] = Newton(f,fp,fpp,a,b,tol);
display('=================================')
display('SECOND ROOT')
display('=================================')
display('The root: ')
display(r)
display('Number of iterations: ')
display(it)

Нямам идея защо Wolfram Alpha не успява да намери и другия корен и защо връща като резултат 450 итерации.
Прикачени файлове
newt2.png
newt2.png (37.27 KiB) Прегледано 3314 пъти
newt1.png
newt1.png (38.27 KiB) Прегледано 3314 пъти
Аватар
Anubis
Напреднал
 
Мнения: 286
Регистриран на: 05 Авг 2010, 17:45
Рейтинг: 166


Re: Нелинейно уравнение

Мнениеот Гост » 14 Сеп 2018, 07:55

Марш от форума с глупавите си реклами! :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:
Гост
 


Назад към Числени методи



Кой е на линия

Регистрирани потребители: Google [Bot]

Форум за математика(архив)