Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Решение уравнений и их системСодержание книги
Поиск на нашем сайте
Команда fzero вычисляет вещественный корень уравнения f(x)=0. Команда fzero имеет следующие модификации: fzero('f(x)', x0); fzero('f(x)', [x1, x2]).,kk В выражениях функции приняты следующие обозначения: 'f(x)' – решаемое уравнение или имя файл-функции (в одинарных кавычках), вычисляющей левую часть уравнения; x0 – начальное приближение (значение) искомого корня; [x1, x2] – область изоляции корня. Команда fzero имеет и другие модификации, о которых можно узнать с помощью команды doc fzero. Пример: Вычислить корни уравнения lnx - x+3 = 0 на отрезке [0;5]. Решение: Создадим файл-функцию myfun, вычисляющую значение функции lnx - x+3 при заданном значении аргумента x: function y=myfun(x) y=log(x)-x+3; Перед нахождением корней построим график исследуемой функции командой fplot и нанесем сетку (рис. 6.1): >> fplot ('myfun',[0,5]) grid
Рис. 6.1 Пояснения на графике нанесены средствами MATLAB. На графике видно, что функция на этом отрезке имеет два корня, расположенные вблизи 0,1 и 4,5. Уточним значение второго корня при помощи fzero: >> x2=fzero('myfun',4.5) x2 = 4.5052 Итак, приближенное значение второго корня равно х2 = 4,5052. Вместо начального приближения 4,5 вторым параметром fzero можно задать интервал [4;5], на котором следует найти корень: >> x2=fzero('myfun',[4,5]) x2 = 4.5052 Отметим, что на границах указываемого интервала функция должна принимать значения разных знаков, иначе выдается сообщение об ошибке. Получить приближенное значение корня и значение функции в этой точке позволяет вызов fzero с двумя выходными аргументами: >> [x2,f]=fzero('myfun',[4,5]) x2 = 4.5052 f = -4.4409e-016 То, что значение функции близко к нулю, вообще говоря, не означает, что приближенное значение корня расположено достаточно близко к его точному значению. Для того, чтобы увидеть больше значащих цифр корня х2, установим формат long и выведем х2 еще раз (точность вычислений не зависит от формата вывода результата): >> format long >> x2 x2 = 4.50524149579288 Найдем корень х1, расположенный около 0,1: >> format long >> x1=fzero('myfun',.1) x1 = 0.05246909745771 Возникает вопрос, сколько в ответе точных значащих цифр, т. е. с какой точностью найдено решение? Задание точности вычислений обсуждается ниже в разделах 6.4, 6.5. Важной особенностью fzero является то, что она вычисляет только те корни, в которых функция меняет знак, а не касается оси абсцисс. Найти корень уравнения x2 = 0 при помощи fzero нельзя (получим сообщение об ошибке). Многомерным аналогом fzero является команда fsolve, предназначенная для решения системы нелинейных уравнений F(X) = 0. Одна из модификаций fsolve имеет вид fsolve('file', x0). Здесь file – имя файл-функции, вычисляющей вектор-столбец левых частей системы уравнений, x0 – вектор-столбец начальных приближений. Первый входной аргумент можно задать как указатель на файл-функцию @»file. Пример: Решить cистему нелинейных уравнений
Решение: Возникают вопросы: 1) имеет ли система вещественные решения?; 2) если вещественные решения есть, то как определить их начальные приближения? Т. к. система имеет второй порядок, то ответ на эти вопросы легко найти графическим способом. С помощью команды ezplot (см. разд. 7.16), cтроим совместно графики парабол x2+y=3 и y2+x=2 на рис. 6.2: >> ezplot('x^2+y-3') >> hold Current plot held >> ezplot('x+y^2-2') >> grid
Рис. 6.2 Как видно на рис. 6.2 система имеет 4 вещественных решения (количество точек пересечения графиков), а одно из них имеет начальное приближение (-1;2). Уточним его с помощью команды fsolve. Создадим файл-функцию mfun2, вычисляющую вектор-столбец левых частей системы уравнений: function F=mfun2(x) F=[x(1)^2+x(2)-3;x(2)^2+x(1)-2]; Программа и результаты решения системы уравнений имеют вид: >> x0=[-1;2]; >> X=fsolve('mfun2',x0) X = -1.1117 1.7640 Получить одновременно приближенное решение и значения левых частей системы уравнений (функций x2+y - 3 и y2+x - 2) при подстановке в них этого решения позволяет вызов fsolve с двумя выходными аргументами: >> [X,f]=fsolve(@mfun2,x0) X = -1.1117 1.7640 f = 1.0e-008 * 0.0445 0.2242 Таким образом, (x;y)=(-1,1117;1,7640) – одно из приближенных вещественных решений системы. Изменяя стартовые значения (согласно рис. 6.2), можно найти и остальные вещественные решения. Пример: Решить cистему уравнений третьего порядка
Решение: Для такой системы нельзя найти области начальных приближений графическим способом. Создадим файл-функцию mfun3, вычисляющую вектор-столбец левых частей системы уравнений: function F=mfun3(x) F=[x(1)+x(1)^2-2*x(2)*x(3)-.1;x(2)-x(2)^2+3*x(1)*x(3)+.2;x(3)+x(3)^2+2*x(1)*x(2)-.3]; Для произвольного стартового значения решения (-1;0;0) программа и результаты решения системы уравнений имеют вид: >> x0=[-1;0;0]; >> [X,f]=fsolve('mfun3',x0) X = -1.0880 -0.1303 0.0161 f = 1.0e-007 * 0.3447 -0.2521 0.2590 Итак, (x;y;z)=(-1,0880; -0,1303; 0,0161) – одно из приближенных вещественных решений системы. Изменяя стартовые значения, можно попытаться найти и другие вещественные решения этой системы. Команда fsolve имеет и другие модификации, о которых можно узнать с помощью команды doc fsolve. Команда fsolve также применима для решения одного нелинейного уравнения. В этом случае ее первый аргумент задает скалярную функцию, а вектор x0 – совокупность начальных приближений. Например: >> fsolve(@sin,[0:3:12]) ans = 0 3.1416 6.2832 9.4248 12.5664 дает совокупность решений уравнения sin(x) = 0, наиболее близких к соответственным стартовым точкам массива х0. При решении используется оптимизационный алгоритм, осуществляющий минимизацию невязки F(X). Поэтому команда fsolve способна найти нули, в том числе и таких функций, как x2 и. Существенный недостаток команд fzero и fsolve состоит в том, что они не определяют комплексных решений уравнений и систем уравнений. Команда solve пакета Symbolic дополняет эти команды. С ее помощью в разделе 7.13 будут найдены другие решения рассмотренных выше систем уравнений, в том числе и комплексные.
|
||||
Последнее изменение этой страницы: 2016-04-07; просмотров: 340; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.92.56 (0.009 с.) |