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

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

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

Студворк — интернет-сервис помощи студентам
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.04.2013, 14:44
Ответы с готовыми решениями:

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

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

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

7
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 2
18.04.2013, 15:50
поскольку комманды 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  [ТС]
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
что значит никак? Просто у Вас итерации расходятся - поставьте контроль
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  [ТС]
sova_f, Спасибо большое!
Только там 2 корня, а находит один
0
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
19.04.2013, 19:33
В задании написано хотя бы 1... )))
Какой из корней найдется зависит от начального приближения (возьмите не -0.1 и корень будет другой)
Надо подумать, каким образом найте все...

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

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

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

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

Метод простых итераций для нелинейного уравнения
Здравствуйте! Помогите построить график для нелинейного уравнения: dy/dx+2*pi*y^2*cos(2*pi*x+pi/6)=0. x0=0, шаг интегрирования 0.4,...

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru