Перейти к содержанию
    

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

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

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)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

 

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, _4afc_ said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...