• Регистрация
Georgyu
Georgyu 0.00
н/д

Помогите с ошибкой

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);

Теги

    19.11.2019

    Комментарии

    • Centurio
      Centurio+42.00
      20.11.2019 13:05

      Вот код для решения методом бисекции:

      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)])