Jump to content
    

Можно ли в матлабе подставить сразу несколько выходных переменных одной функции в несколько входных переменных другой функции?

Здравствуйте. Есть у меня желание чисто ради перфекционизма кода в матлабе подставить сразу несколько выходных переменных одной функции в несколько входных переменных другой функции? Гулил, нашёл похожую проблему, но решения не увидел:

https://uk.mathworks.com/matlabcentral/answers/180164-use-a-function-that-returns-multiple-values-as-input-argument-to-another-function

Своими словами:

Есть встроенная функция

[x,y] = pol2cart(theta,rho)

Я хотел бы из x и y сделать комплексное число такой подстановкой:

С = complex(pol2cart(theta,rho))

Но при такой записи передаётся только вещественная часть, мнимая по нулям.
Пока реализовал через промежуточные переменные, но это костыли:

[x,y] = pol2cart(theta,rho)

С = complex(x,y)

Может есть всё же способ сделать красиво, в одну строчку, без промежуточных переменных?

Share this post


Link to post
Share on other sites

конкретно для перехода из полярных координат к комплексному числу, есть способ записать в одну строчку без промежуточных переменных

С = rho.*exp(1i*theta);

после некоторого времени работы с комплексными вычислениями в matlab это выглядит и красиво и наглядно

вариант через pol2cart и complex очевиден даже без комментариев, по справке к этим функциям

 

промежуточные переменные в данном случае не выглядят как костыли и не мешают, напротив, дают дополнительную информацию при отладке

в случае, когда идёт обработка больших массивов данных и потеря памяти на промежуточные переменные не допустима, выражение

[x,y] = pol2cart(theta,rho);
С = complex(x,y);
clear x y;

является полным аналогом того, что Вам необходимо по функционалу (но не по количеству строчек кода)

 

Share this post


Link to post
Share on other sites

On 9/8/2022 at 12:33 AM, stealthisname said:

конкретно для перехода из полярных координат к комплексному числу

Спасибо за подсказку, действительно, элементарно, формула Эйлера, что ж я раньше об этом сам не догадался ))

Однако в моём вопросе меня интересовал общий случай, любые функции и переменные. Не знаете решение?

И также есть у меня вопрос: можно ли получить доступ к отдельным квадратурам комплексного числа? Вот типа допустим есть у меня

c = x + 1i*y

Я бы хотел записать примерно такое:

c.Re = с.Re*3

Т.е. выполнить некоторые преобразования только с одной квадратурой. Сейчас я знаю лишь способ сначала разложить на отдельные вещественные числа квадратур, выполнить преобразование с одной квадратурой, затем собрать обратно в комплексное число:

x = real(c);
y = imag(c);
x = x*3;
c = complex(x, y);

Но чисто из перфекционизма мне так делать не нравится. Хочется как-то напрямую получить доступ к квадратуре.

Share this post


Link to post
Share on other sites

4 минуты назад, Krys сказал:

Однако в моём вопросе меня интересовал общий случай, любые функции и переменные. Не знаете решение?

я так и не нашел утверждения напрямую, что это невозможно, но очень похоже на то, что это основа языка - в выражениях функции выдают только один выходной аргумент, в общем случае такое никак не провернуть

 

13 минут назад, Krys сказал:

выполнить преобразование с одной квадратурой, затем собрать обратно в комплексное число:

x = real(c);
y = imag(c);
x = x*3;
c = complex(x, y);

выражение

с = 3*real(c)+1i*imag(c);

делает тоже самое, или в общем случае

с = U(real(c),imag(c))+1i*V(real(c),imag(c));

тоже, что и

x0 = real(c);
y0 = imag(c);

x = U(x0,y0);
y = V(x0,y0);

с = complex(x,y);

 

Share this post


Link to post
Share on other sites

8 minutes ago, stealthisname said:
с = 3*real(c)+1i*imag(c);

ну так тоже не очень красиво (чисто из перфекционизма). Всё равно вытаскивается мнимая часть, которая здесь не участвует в вычислениях. Мне бы как-то получить доступ только к вещественной части числа на запись. Вот в этом вопрос.

Share this post


Link to post
Share on other sites

On 9/9/2022 at 6:07 AM, Krys said:

ну так тоже не очень красиво (чисто из перфекционизма).

Написать свою функцию, спрятав в неё то что некрасиво.

Share this post


Link to post
Share on other sites

1 hour ago, _4afc_ said:

Написать свою функцию, спрятав в неё то что некрасиво.

Тут тоже внутренний перфекционист негодует )))

Вопрос мой скорее можно ли штатным образом так сделать

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...