Помогите с ошибкой
19.11.2019
Мне нужно найти методом бисекции точку пересечения двух функций y1=sinh(2*x-1) и y2=2*sin(-2*x) на интервале x=-2:2 с точностью не менее 0,001. Я написал скрипт, но он выдает ошибку: Unable to perform...
Мне нужно найти методом бисекции точку пересечения двух функций y1=sinh(2*x-1) и y2=2*sin(-2*x) на интервале x=-2:2 с точностью не менее 0,001. Я написал скрипт, но он выдает ошибку: Unable to perform assignment because the left and right sides have a different number of elements. Что делать? Вот скрипт:
%Ввод исходных данных
%Y1=sinh(2*x-1) %Y2=2*sin(-2*x)
%eps=1.E-3
%eps=1.E-4
eps=1.E-3;
dx=1;
x=-2:2;
%Нахождение отрезка, длинной 0.1, включающего точку пересечения графиков заданных функций
i=0;
while dY<0;
i=i+1;
xt(i)=x;
Y1=sinh(2*x-1);
Y2=2*sin(-2*x);
Y1=yt1(i);
Y2=yt2(i);
dY=Y1-Y2;
x=x+dx;
end;
%Нахождение границ отрезка и значений функций на его концах
y1r(1)=yt1(i);
y1r(2)=yt1(i-1);
y2r(1)=yt2(i);
y2r(2)=yt2(i-1);
xr(1)=xt(i-1);
xr(2)=xt(i);
for n=1:2, xrt(n)=xr(n)
end;%Нахождение точки пересечения графиков исходных функций с заданной точностью с помощью метода деления отрезка пополам
j=1;
while abs(dY)>eps;
xc=(xr(1)+xr(2))/2;
Y1=sinh(2*x-1);
Y2=2*sin(-2*x);
dY=Y1-Y2;
if dY>0 xr(1)=xc;
else xr(2)=xc;
end;
%Вывод данных на экран
j=j+1;
end;
disp('Исходные данные');
disp('xc='); disp(xc);
disp('Y1='); disp(Y1);
disp('Y2='); disp(Y2);
disp('Шагов='); disp(j);
disp('Eps='); disp(eps);
%Вывод графика
plot(xrt,y1r,xrt,y2r);
Комментарии
Ваш код не работает из-за неопределенных переменных dY и yt1.
Задачу можно решить так:
Если вы хотите задать специфическую точность, можно например округлить полученные значения:
Вот код для решения методом бисекции:
f1=@(x)sinh(2*x-1);
f2=@(x)2*sin(-2*x);
f=@(x)f1(x)-f2(x);
ab=[-2 2];
ep=1e-3;
m=sum(ab)/2;
y=f(m);
while abs(y)>ep
s=sign(f(ab))~=sign(y);
ab=m*(~s)+ab.*s;
m=sum(ab)/2;
y=f(m);
end
disp(['x=',num2str(m)])