Можно ли использовать fsolve, если существующий скрипт возвращает структуру класса? - PullRequest
2 голосов
/ 08 июля 2019

У меня есть скрипт Function.m такой, что, например, когда я пишу TEST=Function(1,2), у меня есть TEST.x1=4 и TEST.x2=[5,6,7].Я хочу использовать fsolve, чтобы помочь мне найти ввод.Если быть точным, я хочу определить функцию, скажем a=@(y)Function(1,y)-4, чтобы при использовании [z,vector]=fsolve(@(y)a(y),5) matlab мог помочь мне получить z=2 и vector=[5,6,7].

Я бы хотел ее решитьопределив ту же структуру New_Function.m, что и Function.m, так что он возвращает значения x1, т. е. TEST=New_Function(1,2) дает только TEST=4.Затем я пишу new_a=@(y)New_Function(1,y)-4 и решаю z=fsolve(@(y)new_a(y),5) и определяю new_vector=Function(1,z), чтобы я мог получить доступ к new_vector.x2.

Я хочу знать, возможно ли выполнить мою задачу без определения нового сценария или внесения поправоксодержание в существующем скрипте.Как написать код?

1 Ответ

1 голос
/ 08 июля 2019

Поскольку Matlab не позволяет дополнительно ссылаться на результат вызова функции, вам, возможно, придется помочь себе с getfield.В вашем примере (если я правильно понял) это будет что-то вроде New_Func = @(y) getfield(Function(1,y),'x1').Это займет один скаляр и вернет один скаляр, т. Е. New_Func(y) дает значение поля структуры, возвращаемой Function(1,y), связанной с полем x1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...