Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Решение уравнений и их систем
Команда 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 будут найдены другие решения рассмотренных выше систем уравнений, в том числе и комплексные. Date: 2016-08-30; view: 214; Нарушение авторских прав |