• Регистрация
PVI
PVI +1.00
н/д

При решении трансцендентного уравнения с помощью z=fsolve('Navig_model', z0) появляется сообщение Unable to parse command history line: d>

31.05.2020
function [z]= Navig_model (C,xM,yM,tB,z0)z=size(z0);x0=zeros(1,1);F=[z(1)-z(2).*tan(z(3)+pi+asin(C/z(4)))-...xM+yM.*tan(z(3)+pi+asin(C/z(4)))-...z(4).*(tB+(z(1)- x0)./(z(4).*sin(z(3)))).*...(cos(z(3))...

function [z]= Navig_model (C,xM,yM,tB,z0)
z=size(z0);
x0=zeros(1,1);
F=[z(1)-z(2).*tan(z(3)+pi+asin(C/z(4)))-...
xM+yM.*tan(z(3)+pi+asin(C/z(4)))-...
z(4).*(tB+(z(1)- x0)./(z(4).*sin(z(3)))).*...
(cos(z(3)).*tan(z(3)+pi+asin(C/z(4)))-sin(z(3)))];

Теги

      31.05.2020

      Комментарии

      • aBoomest
        aBoomest+942.89
        31.05.2020 18:01

        Файл из которого вызываете ф-цию тоже можно?

        • PVI
          PVI+1.00
          1.06.2020 03:26

          %script-feil моделирования трассы объекта

          clear;clc;
          rg=180/pi;
          %----------Подготовка исходных данных -----------
          nM=4;
          dM=1500;
          for i=1:nM;
          if ceil ((nM-1)/2)>=i;
          %--- Координаты датчиков--
          xM(i)=(i-1)*dM;
          else xM(i)=(i-ceil ((nM-1)/2))*dM-dM/2; end;
          if ceil ((nM-1)/2)>=i;
          yM(i)=3000;
          else yM(i)=3000-dM; end;
          end;
          %--- Координаты и ПД объекта ---
          xO0=1000; yO0=0;
          AK_grad=30; AK=AK_grad/rg;
          V=8;
          C=6;
          gamma=asin(C/V); gamma_grad=gamma*rg;
          disp([gamma_grad]);
          for i=1:nM;
          dM_B(i)=(xM(i)-yM(i)*tan(AK)-xO0+yO0*tan(AK))/sqrt(1+tan(AK)^2);
          sgn(i)=sign(dM_B(i)); % Знак борта
          if sgn(i)==-1; A_gamma(i)=AK+pi+gamma; A_P(i)=A_gamma(i)+pi/2;
          else A_gamma(i)=AK+pi-gamma; A_P(i)=A_gamma(i)-pi/2; end;
          A_gamma_grad(i)=A_gamma(i)*rg;
          A_P_grad(i)=A_P(i)*rg;
          xB(i)=((xO0-yO0*tan(AK))*tan(A_P(i))-(xM(i)-yM(i)*tan(A_P(i)))*tan(AK))/...
          (tan(A_P(i))-tan(AK));
          yB(i)=yO0+(xB(i)-xO0)/tan(AK);
          tau(i)=(xB(i)+yB(i)*(tan(AK)-tan(A_gamma(i))-xM(i)))/...
          (V*(sin(AK)+cos(AK)*tan(A_gamma(i)))-yM(i)*tan(A_gamma(i)));
          xP(i)=xB(i)+V*tau(i)*sin(AK);
          yP(i)=yB(i)+V*tau(i)*cos(AK);
          VV(i)=C*cos(A_P(i))*(tan(A_gamma(i))-tan(A_P(i)))...
          /(cos(AK)*tan(A_gamma(i))-sin(AK));
          T0B(i)=(xB(i)-xO0)/(V*sin(AK));
          Tau_BM(i)=(xB(i)-xM(i))/(C*sin(A_P(i)));
          tB(i)=(xP(i)-xO0)/(V*sin(AK));
          end;

          z01=xM; z02=yM; z03=ones(1,1)*AK; z04=10*ones(1,1);
          a1=size(z01);
          a2=size(z02);
          a3=size(z03);
          a4=size(z04);
          disp([a1 a2 a3 a4]);
          z0=[z01 z02 z03 z04];
          disp([z0]);
          z=fsolve('Navig_model', z0);

          • aBoomest
            aBoomest+942.89
            1.06.2020 05:38

            По порядку, а то так сходу тяжело сразу суть уловить в не знакомой сфере:

            z=size(z0);

            результат этого - матрица размером [1x2]. Но в вашей функции при этом и.м.б. z(3), z(4) . . .

            F=[z(1)-z(2).*tan(z(3)+pi+asin(C/z(4)))-...

          • PVI
            PVI+1.00
            1.06.2020 06:17

            Спасибо за внимание!

            Читаю у Вас:

            "z=size(z0);
            результат этого - матрица размером [1x2]". 

            Почему? Ведь в скрипт-файле 

            z0=[z01 z02 z03 z04];

            То есть размер должен быть  [1x10].

            • aBoomest
              aBoomest+942.89
              1.06.2020 06:48

              Нет, это содержимое z у вас равно z = [1, 10], а размер этого самого z будет 1х2. Одна строка, два столбца. И поэтому в переменной z нет элементов с номерами 3, 4 и т.д.

            • PVI
              PVI+1.00
              1.06.2020 19:31

              Возражение:

              Я ввел в скрипт оператор  

              disp(['Содержимое z0']);

              disp([z0]);  ,

              Вот его результат размерности вектора 1×10:

              Содержимое z0

                 1.0e+03 *

               

                       0    1.5000    0.7500    2.2500    3.0000    3.0000    1.5000    1.5000    0.0005    0.0100

               

              В теле функции введен оператор

              z=size(z0);

              Отсюда следует директивное задание размерности вектора z как 1×10.

              Что я неправильно понимаю?

               

              • aBoomest
                aBoomest+942.89
                1.06.2020 20:42

                Содержимое z0
                   1.0e+03 *
                        0    1.5000    0.7500    2.2500    3.0000    3.0000    1.5000    1.5000    0.0005    0.0100

                Размер содержимого z0: 1 строка, 10 столбцов.

                Функция z=size(z0); возвращает вам размер содержимого в z0. Оно возвращает массив [1, 10] - два числа.

                Т.е.

                z = [1,10]
                z(1) = 1
                z(2) = 10

                Размер массива z (не z0, а z) - 1x2.

                В то время как далее у вас подразумевается что-то большее чем два. Может я не верно понял конечно, но вроде как-то так.

                F=[z(1)-z(2).*tan(z(3)+pi+asin(C/z(4)))-...
                xM+yM.*tan(z(3)+pi+asin(C/z(4)))-...
                z(4).*(tB+(z(1)- x0)./(z(4).*sin(z(3)))).*...
                (cos(z(3)).*tan(z(3)+pi+asin(C/z(4)))-sin(z(3)))];

                PS: Что значит "директивное задание размерности" ?

                PSPS: Чему вы подразумеваете у вас должно быть равно z? Точнее, что вы хотите чтоб в нем было?

                • PVI
                  PVI+1.00
                  2.06.2020 03:43

                  Спасибо!

                  Я понял, в чем моя проблема: MATLAB предлагает для решения системы трансцендентных уравнений функцию

                  fsolve(F,x0).

                  Здесь х0 – вектор!

                  В моей задаче компоненты этого вектора ‒ тоже векторы, т.е. х0 – матрица.  

                  Могу ли я обратиться к функции так:

                  fsolve(F,x01,x02,х03,х04), где х0i ‒ векторы разных размерностей?

                  • aBoomest
                    aBoomest+942.89
                    2.06.2020 06:47

                    Думаю, нет, но точно не знаю. А можно наверно х0i объединить в один вектор. Или это у вас решения на разных отрезках?