Пример 6.2.4-13. Найти корень уравнения с помощью функции fzero( ) и использовать дополнительные параметры этой функции.
Пример 6.2.4-13 |
» [x,f,e_flag,inform]=fzero('x.*exp(-)+sin(x)',[3,4]) x = 3.2665 f= 2.0817e-016 e_flag = inform = iterations: 8 funcCount: 8 algorithm: 'bisection, interpolation' |
Обратите внимание на то, что для достижения очень высокой точности потребовалось всего 8 итераций. Простое деление отрезка пополам для достижения такой же точности потребовало бы намного больше итераций.
Условие обнаружения интервала, на концах которого функция принимает значения разных знаков, является принципиальным для алгоритма, использованного в функции fzero(). Даже в таких тривиальных уравнениях, как х2= 0, обычно не удается найти решение.
Для символьного (аналитического) решения уравнений в MatLab используется функция solve(), которая представляется в следующем виде: solve('f(x)',x), solve('f(x)'), где: 'f(x)' – решаемое уравнение, записанное в одиночных кавычках и представленное в произвольной форме; x – искомая символьная неизвестная (syms x).
Рассмотрим технологию определения корня уравнения с помощью функции solve( ) на примерах.
Пример 4.2.4-14. Найти решение уравнения 2x–3(a–b)=0 в символьном виде.
Пример 6.2.4-14 |
>> syms x >> y=solve(‘2^x-3*(a-b)=0’) y = log((3*a-3*b)/log(2)) >> |
Пример 4.2.4-15. Решить уравнение 2x–4∙x + 3=0 аналитически.
Пример 6.2.4-15 |
>> syms x >> y=solve(‘2^x-4*x+3=0’) y = 1.418 3.413 >> |
Функция в ряде случаев позволяет определить все корни уравненияf(x) = 0 без указания начальных значений x или областей изоляции корней.
Функция solve( ) имеет следующий недостаток. Она не требует информации о начальном значении корня или области его изоляции. Поэтому в случае трансцендентных уравнений и в ряде других случаев, она не находит всех корней уравнения.
Пример 4.2.4-16. Решить уравнение 2x–3(a–b)=0, где a – независимая переменная.
Пример 6.2.4-16 |
>> syms a >> y=solve(‘2^x-3*(a-b)=0’, a) y = 1/3*2^x+b >> |
6.2.5. Тестовые задания по теме
«Методы решения нелинейных уравнений»