我有一个脚本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]
。
我想通过定义与Function.m相同的结构New_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
。
我想知道是否可以在不定义新脚本或不修改现有脚本内容的情况下完成任务。如何编写代码?
答案 0 :(得分:1)
由于Matlab不允许进一步引用函数调用的结果,因此您可能需要getfield
帮助自己。在您的示例中(假设我理解正确),它类似于New_Func = @(y) getfield(Function(1,y),'x1')
。这将需要一个标量并返回一个标量,即New_Func(y)
给出由Function(1,y)
返回的结构的字段值,该结构的值与字段x1
关联。