С Новым годом! Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/26: Рейтинг темы: голосов - 26, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 30
1

Решение нелинейного уравнения методом простых итераций

18.04.2013, 14:44. Показов 4755. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
x = [-2:0.1:2];
y = x.^6 -4.*x.^2 +2.*x -2;
syms x;
d = diff(y,x);
e = 0.0001;
xp = 0.00001;
n=1;
  for i=0:n
xa=xp;
l=(-1)/(subs(xa,d)+1);
xp = xa+l*subs(xa,y);
if abs(xp-xa)>e
end
else
n=n+1;
  end
end
disp(xp)
вот такой код, не могу разобраться с циклом.
теорию брала отсюда:
http://pcfu.ru/metod-prostyx-iteracij-i-sposob/

помогите,пожалуйста разобраться
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2013, 14:44
Ответы с готовыми решениями:

Решение нелинейного уравнения методом простых итераций
Здравствуйте! Прошу помощи вот в таком задании: мне нужно решить нелинейное уравнение методом...

Решение нелинейного уравнения методом простых итераций
Всем привет форумчане!Бью челом и как обычный холоп,прошу у вас помощи милостивые дамы и господа!Не...

Решение нелинейного уравнения методом простых итераций
Доброго времени суток! Столкнулся с такой проблемой: не получается решить нелинейное уравнение...

Решение нелинейного уравнения методом простых иттераций
Помогите, сижу несколько дней не могу понять, как быть. Написала скрипт для данного уравнения, при...

7
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 2
18.04.2013, 15:50 2
поскольку комманды GOTO нет, возможно имело бы смыслом воспользоваться WHILE ?

что-то типа
Matlab M
1
2
3
4
5
6
n=1
while ( xp_xa < e )
  вычисления;
  n=n+1;
  xp_xa = |xp-xa|;
end
0
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 30
18.04.2013, 22:21  [ТС] 3
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
x = [-2:0.1:0];
y = x.^6 -4.*x.^2 +2.*x -2;
syms x;
d = diff(y,x);
e = 0.0001;
xp = 0.00001;
n=1;
xp_xa=0;
while ( xp_xa < e )
xa=xp;
l=(-1)/(subs(xa,d)+1);
xp = xa+l*subs(xa,y);
  n=n+1;
  xp_xa = abs(xp-xa);
end;
disp(xp);
такой код получается, но матлаб вообще на это не реагирует никак
0
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
19.04.2013, 12:34 4
что значит никак? Просто у Вас итерации расходятся - поставьте контроль
Matlab M
1
2
3
4
if(n>300)
  disp('n>300');
  break;
end
чтобы программа останавливалась, если много итераций, а не зацикливалась...
Поставьте e=0.001 и xp=-0.1 - как она отреагировала?
Метод простых итераций очень чувствителен к начальному приближению...

а в subs(xa,y) не надо поменять местами xa и y ? и строчкой выше тоже...

Вы не правильно поняли блок-схему. Там написано: если неравенство выполнено (+) итерации сошлись, печатаем ответ, если нет (-) повторяем расчет. Т.е. у вас д.б. while(xp_xa>e). Ну, и исправить subs - ответ правдоподобный...

Добавлено через 11 минут
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
clear;
syms x;
y=x.^6-4.*x.^2+2.*x-2;
d=diff(y,x);
e=0.0001;
disp('начальное приближение:');
xp=-0.1
n=0;
xp_xa=10000;
n_max_i=300;
while(xp_xa>=e)
    xa=xp;
    n=n+1;
    l=(-1)/(subs(d,x,xa)+1);
    xp=xa+l*subs(y,x,xa);
    xp_xa=abs(xp-xa);
    if(n>n_max_i)
        disp('n>300');
        break;
    end
end
if(n<=n_max_i)
    disp('найденное решение:')
    disp(xp);
    disp('значение функции y:')
    y_sp=xp^6-4*xp^2+2*xp-2
    disp('количество итераций');
    n
end
1
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 30
19.04.2013, 18:11  [ТС] 5
sova_f, Спасибо большое!
Только там 2 корня, а находит один
0
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
19.04.2013, 19:33 6
В задании написано хотя бы 1... )))
Какой из корней найдется зависит от начального приближения (возьмите не -0.1 и корень будет другой)
Надо подумать, каким образом найте все...

Добавлено через 8 минут
Сам метод подразумевает, что Вы знаете, какой корень (в какой области, интервале) ищите. И крутится около него. Если нужен другой - берем другое приближение. Так или иначе эту программу придется несколько раз запускать для разных начальных приближений (интервалов). Там в начале интервал был задан - от -2 до 0. Дык на этом интервале 1 корень... Можете нарисовать и посмотреть.

Добавлено через 3 минуты
Итого: если нужны все корни - нужно разбить пространство на несколько интервалов (по количеству корней) и на каждом интервале задавать приближение и делать расчет. Это можно зациклить по кол-ву интервалов, но само количество корней и приближения нужно оценивать визуально, по графику, например.
0
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 30
19.04.2013, 19:53  [ТС] 7
да, всего я рассматриваю интервал от -2 до 2, там 2 корня. придется другое начальное приближение выбирать, чтобы найти второй корень?
А какое примерно? я просто не понимаю по какому принципу его вообще выбирают
0
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
19.04.2013, 20:06 8
График симметричен относительно 0 - это понятно, т.к. четная степень максимальна. Рассматриваем отрезок [-2;2], следовательно, делим его на 2: от -2 до 0 и от 0 до 2. На каждом из них можно брать любое значение (принадлежащее этому отрезку), кроме границ (0 не берите, скакнет в положительную сторону и итерации разойдутся). А -2 и 2 можно брать. Т.о. делаем 2 запуска - для xp=-2 (или -1, или -0.1 - не важно) и для xp=2 (1 или 0.1)
0
19.04.2013, 20:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2013, 20:06
Помогаю со студенческими работами здесь

Решение уравнения методом простых итераций
.... Добавлено через 5 минут sin(4a)^2=0.5 На промежутке

Метод простых итераций для нелинейного уравнения
Здравствуйте! Помогите построить график для нелинейного уравнения:...

Метод простых итераций для решения нелинейного уравнения
Добрый вечер! Пыталась реализовать метод простых итераций для решения нелинейного уравнения. Как...

Найти корень уравнения методом простых итераций.
Найти корень уравнения f(x)=ln(a*x)-b*x+c при заданных значениях коэффициентов. а=6.0976 b=6.872...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru