Вычисление нулей функции в окрестности точки
Функция fzero
Вычисление нулей функции в окрестности точки
--------fzero('функция',x)----------
Fzero('функция',x) возвращает уточненное значение x, при котором достигается нуль функции, представленной строкой,при начальном значении аргумента x. (функция в нуле меняет знак)
Если такая точка не найдена то выдается NaN
(Not-a-Number не числовой характер данных)
x1=fzero('x-5',4)
x2=fzero('x-5',2)
x3=fzero('2^x-8',0)
x4=fzero('2^x-7',0)
x5=fzero('0.25*x+sin(x)-1',5)
>> x1=fzero('x-5',4)
x1 =
>> x2=fzero('x-5',2)
x2 =
>> x5=fzero('0.25*x+sin(x)-1',5)
x5 =
5.8128
Для более сложных функций: сначала построим график функции
для приближенного определения корней и интервалов.
Пример 1
Найдем нули функции y=x.^3-9*x.^2+26.*x-24;
x=1.5:0.5:4.5;
y=x.^3-9*x.^2+26.*x-24;
Постройте график, проанализируйте его и при необходимости
Измените интервал для Х и шаг так, чтобы хорошо были видны корни.
plot(x,y),grid %добавим сетку
теперь уточним значение корней в окрестности точек, где функция y=x.^3-9*x.^2+26.*x-24; пересекает ось ОХ.
x1=fzero('x^3-9*x^2+26*x-24',1.8)
x2=fzero('x^3-9*x^2+26*x-24',3.1)
x3=fzero('x^3-9*x^2+26*x-24',4.3)
%Правильный ответ должен быть 2, 3, 4.
>> x=1.5:0.1:4.5;
>>
>> y=x.^3-9*x.^2+26.*x-24;
>> plot(x,y),grid
Уточним значение корней 1.8 3.1 4.3
>> x1=fzero('x^3-9*x^2+26*x-24',1.8)
x2=fzero('x^3-9*x^2+26*x-24',3.1)
x3=fzero('x^3-9*x^2+26*x-24',4.3)
x1 =
x2 =
3.0000
x3 =
--------------------------------------------
Пример 2
Найдем нули функции
Y=x.^2-5*x+6
Построим график
x=-2:0.2:5;
plot(x,x.^2-5*x+6)
grid on;
x=fzero('x^2-5*x+6',1)
x=fzero('x^2-5*x+6',4)
%Правильный ответ должен быть 2, 3.
x=fzero('x^2-5*x+6',1)
x=fzero('x^2-5*x+6',4)
x =
x =
3.0000
2)Вычисление нулей функции на интервале:
%-------------fzero('функция',[x1,x2])------------
Для Примера 1
x1_1=fzero('x^3-9*x^2+26*x-24',[1.8 4.5])%возвращает только один корень т.к. fzero('функция',[x1,x2])работает только с интервалом с одной сменой знака.
x1_1=fzero('x^3-9*x^2+26*x-24',[1.8 2.3])(x1_1 = 2.0000 )
--------------------------------------------------------------------------------
Пример 3
Найдем нули функции Y=cos(x);
x=-2*pi:0.1:2*pi;
Plot(x,cos(x))
x=fzero('cos',[1 3])
или x=fzero('cos(x)',[1 3])
или х= fzero(@cos.[1 3])
нельзя написать интервал 'cos',[-5 5], т.к. на этом интервале много смен знаков - выдает ошибку.
На интервале [1 3] только одна смена знака
корень = 1.57
Пример 4
Найдем нули функции 0.25*x+sin(x)-1;
сначала построим график функции для приближенного определения корней и интервалов
x=0:0.1:10;
plot(x,0.25*x+sin(x)-1)
grid on; %по графику видно, что нули функции нужно искать в интервалах %[0.5 1], [2 3], [5 6]
x1=fzero('0.25*x+sin(x)-1',[0.5 1])
x2=fzero('0.25*x+sin(x)-1',[2 3])
x3=fzero('0.25*x+sin(x)-1',[5 6])
x1 =
0.8905
x2 =
2.8500
x3 =
5.8128
3)Вычисление нулей функции с заданной точностью:
--------------fzero('функция',x,eps) --------
Для Примера 4
x4=fzero('0.25*x+sin(x)-1',5,0.00001)
x4=fzero('0.25*x+sin(x)-1',[5 6],0.00001)
-------------------------------------------------------------
4)Вычисление нулей функции с п\п функцией
Функцию y=0.25*x+sin(x)-1 мы оформили как М-функцию fun5.m и сохранили в отдельном файле с именем fun5.m в той же директории, что и вызывающая её программа.
Под функциями понимаются как встроенные функции, например sin(x) или ехр(х),так и функции пользователя, например f(x), задаваемые как M-файлы-функции. Например, функция fe=@exp; сохранена как M-файл.
function f=fun5(x);функция; fun5 – имя функции
f=0.25*x+sin(x)-1;
x1=fzero('fun5',[0.5 1])на интервале
>> x1=fzero('fun5',[0.5 1])
x1 =
0.8905
Или
для функции вместо апострофов ставим собаку @
x2=fzero(@fun5,[2 3])на интервале
>> x2=fzero(@fun5,[2 3])
x2 =
2.8500
x3=fzero('fun5',6)в окрестности точки
>> x3=fzero('fun5',6)
x3 =
5.8128
Функция roots
Вычисление корней полинома
Пример 1
Найдем нули (корни) функции y=x2-5x+6
y=[1 -5 6]; %матрица коэффициентов полинома x2-5x+6=0
x=roots(y);
Vpa(x,2)
ans =
3.0
2.0
Пример 2
Полином x3-9*x2+26*x-24=0
y=[1 -9 26 -24]; %матрица коэффициентов
x=roots(y);
Vpa(x,2)
%ответ: 4 3 2
Пример 3
Найти корни полинома 2х4 - 8х3 + 8х2 - 1
disp('корни полинома 2х^4 - 8х^3 + 8х^2 - 1')%печатает комм.
%без графика:
p=[2 -8 8 0 -1];
Roots(p)
%Ответ 2.3066; 1.5412; 0.4588; -0.3066
с графиком:
p=[2 -8 8 0 -1];p-вектор, элементы которого являются коэффициентами полинома
x=-1:0.1:3;в порядке уменьшения степеней, X может быть матрицей или вектором
y=polyval(p,x); возвращает значения полинома в точках, заданных в массиве Х
Plot(x,y,'-k'),grid
roots(p)%Ответ 2.3066; 1.5412; 0.4588; -0.3066
___________________________________________________
Функция solve
Для решения систем нелинейных уравнений следует также использовать функцию solve из пакета Symbolic Math Toolbox. Эта функция способна выдавать результат в символьной форме, а если такого нет, то она позволяет получить решение в численном виде.
Пример 1
Solve(f)
>> syms a b c x;
f=a*x^2+b*x+c
solve(f)
f =
a*x^2 + b*x + c
ans =
-(b + (b^2 - 4*a*c)^(1/2))/(2*a)
-(b - (b^2 - 4*a*c)^(1/2))/(2*a)
>>
Пример 2
Пример 2
2.1
Система двух уравнений с двумя неизвестными
syms x y; %описание переменных в символьном виде
solve('x+y=3','x*y^2=4',x,y)% выдает только количество корней
%Переменная S: более одного ответа; распечатаем корни
S=solve('x+y=3','x*y^2=4',x,y)%выдает только количество корней
S.x %указание на распечатку значений для x: (x1=1; x2=4)
S.y %указание на распечатку значений для y: (y1=2; y2=-1)
%слово ans= при распечатке означает значение безымянной переменной
%Ответ:(1; 2) или (4; -1)
Pause
2.2
Система двух уравнений с двумя неизвестными
syms x y;
t=solve('2*x+5*y=26','3*x-y=5',x,y)
t.x
t.y
%если в функциях нет равенства , то по умолчанию считается =0
disp('решения для СЛУ с 2 неизвестными, заданными в символьном виде')
syms x y;
t=solve('2*x+5*y-26','3*x-y-5',x,y)%нет точки с запятой,
%поэтому распечатает количество ответов.
%печать x и y (можно просто сразу печатать ответ t.x t.y)
X=t.x %значения корней будет присвоено переменным X и Y
Y=t.y
Пример 3
Решение трех уравнений с тремя неизвестными
1).
syms x y z;
d=solve('0.1*x-0.04*y-0.13*z=-0.15','-0.04*x-0.34*y+0.05*z=0.31','-0.13*x+0.05*y+0.63*x=0.37',x,y,z);
R=[d.x;d.y;d.z] %возвращает значения x,y,z.
%ответ: R = 0.81135 -0.71347 1.9975
disp(vpa(R,3))
%или
R=vpa(R,3) %выводит 3 значащих цифры (без учета точки и знаков + -)
2).
syms x y z ;
d=solve('2*abs(x*y-3*y-4*x+12)+z=-23.16','z=-24.08','z-(x^2)-(y^2)+6*x+8*y=0',x,y,z)
dxyz=[d.x;d.y;d.z] %вывод без формата
XYZ=vpa(dxyz,3)%количество значащих цифр числа = 3
%(без точки и знаков + -)
%ответ: x=2.32; y=3.32; z=-24.1
Пример 4
y=x^3-1
syms x y; %описание символьных переменных
solve(x^3-1,x)
ans =
- 1/2 - (3^(1/2)*i)/2
- 1/2 + (3^(1/2)*i)/2
Или
solve('x^3-1=0',x)
Пример 5
solve('x^2-5*x+6=0',x) %ответ: 2 и 3
ans =
Пример 6
Решить систему нелинейных уравнений
S=solve('x+y=3','x*y^2=4',x,y) %без ; возвращает количество
корней (2 пары),
%далее S.x и S.y возвращают значения x и y.
S.x
S.y
>> S=solve('x+y=3','x*y^2=4',x,y)
S =
x: [2x1 sym]
y: [2x1 sym]
>> S.x
S.y
ans =
ans =
-1
% возвращает две пары ответов (1;2)или(4;-1)
Пример 7
solve('2^x=8',x) %ответ: 3
Пример 8
Найти корни уравнения 0.25*x + sin(x) -1=0
solve('0.25*x + sin(x) -1)
ans =
0.89048708074438001001103173059554
_______________________________________________________
4. Решение систем линейных и нелинейных уравнений
к лабораторной работе №2
Матричный метод
В символьном виде
syms x y z;
d=solve('0.1*x-0.04*y-0.13*z=-0.15','-0.04*x-0.34*y+0.05*z=0.31','-0.13*x+0.05*y+0.63*x=0.37',x,y,z);
R=[d.x;d.y;d.z] %возвращает значения x,y,z.
%ответ: R = 0.81135 -0.71347 1.9975
Disp(vpa(R,3))
%или
R=vpa(R,3) %выводит 3 значащих цифры (без учета точки и знаков + -)
Метод Крамера
A=[1 2 3 4;-1 2 -3 4;0 1 -1 1;1 1 1 1]
b=[30;10;3;10]
Rank(A)
A1=A; A2=A; A3=A; A4=A;
A1(:,1)=b;
A2(:,2)=b;
A3(:,3)=b;
A4(:,4)=b ;
x1=det(A1)/det(A)
x2=det(A2)/det(A)
x3=det(A3)/det(A)
x4=det(A4)/det(A)
x=[x1;x2;x3;x4];
A*x % Проверка
A*x-b % Проверка (есть погрешность)
Функция fzero
Вычисление нулей функции в окрестности точки
--------fzero('функция',x)----------