Нахождение корня уравнения с помощью итерации

Я пытаюсь найти корень уравнения 3x3 + x2-10, используя итерацию. Вот код, который у меня есть до сих пор, однако я не думаю, что правильно реализовал цикл while, поскольку в настоящее время уравнение оценивается только один раз. По сути, код должен оценить, является ли абсолютное значение xVal-cVal меньше 0,0001, и если да, он должен распечатать значение cVal и остановиться. В противном случае значение xVal следует установить равным cVal и выполнить цикл возврата, однако код этого не делает.

xVal = input('Enter a value for x:');
cVal =((10-xVal^2)/3)^(1/3);
while (abs(xVal-cVal)>0.0001)
   xVal = cVal;
end
disp(cVal);

Нахождение корня уравнения с помощью итерации

Вам необходимо оценить новый cVal внутри цикла после присвоения старого значения xVal. Если у Matlab есть do-while или do-until, это будет идеальная конструкция.

lurker 27.10.2018 16:08

Итак, while (abs (xVal-cVal)> 0,0001) xVal = cVal; cVal = 0; конец

compscistudent 27.10.2018 16:12

Нет, 0 не является правильным новым значением для cVal. Подумайте об этом, а не просто гадайте. Это будет просто бесконечно зацикливаться и проверять значение 0. Это должно быть вычислено так же, как и в первый раз.

lurker 27.10.2018 16:12

Не могли бы вы дать ссылку на используемый вами алгоритм / формулу?

Cepheus 27.10.2018 16:16

Боюсь, у меня нет ссылки - я просто изменил уравнение 3x ^ 3 + x ^ 2-10, чтобы сделать x предметом обсуждения, так что x_ (n + 1) = ∛ ((10-x ^ 2) / 3 )

compscistudent 27.10.2018 16:22

Я сомневаюсь, что это сработает, потому что один из x остается в правой части уравнения, поэтому вы действуете так, как если бы это были разные числа. Рассмотрите возможность реализации en.wikipedia.org/wiki/Newton%27s_method.

Cepheus 27.10.2018 16:24

У вас есть уравнение с двумя x и вы решаете один из них? Поиск корней работает не так. Два x-es имеют одинаковое значение! Я бы порекомендовал вам начать реализацию метод деления пополам, а потом искать более сложные методы.

Cris Luengo 27.10.2018 16:38

Я добавил ссылку на изображение блок-схемы, которую пытаюсь реализовать, если это поможет?

compscistudent 27.10.2018 16:48

Чтобы реализовать эту блок-схему, вам нужно пересчитать cVal. Но я не уверен, что это обязательно сходится. Это ваш алгоритм или вы его откуда-то взяли?

Cris Luengo 27.10.2018 18:35

Я подтверждаю, что эта итерация с фиксированной точкой сходится, если она реализована правильно (т.е.cVal обновляется в цикле while.

TroyHaskin 28.10.2018 01:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
10
113
2

Ответы 2

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

Попробуйте этот сценарий:

func = @(xVal)((10-xVal^2)/3)^(1/3);
x = fzero(func,StratingX)

Методология, представленная в блок-схеме, будет работать. Это простая итерация с фиксированной точкой.

TroyHaskin 28.10.2018 01:37

Вам необходимо обновить cVal в вашем цикле while.

xVal = input('Enter a value for x:');
cVal =((10-xVal^2)/3)^(1/3);
while (abs(xVal-cVal)>0.0001)
   xVal = cVal;
   cVal =((10-xVal^2)/3)^(1/3);
end 
disp(cVal);

Выход:

Enter a value for x:0
    1.3905

Другие вопросы по теме