gpt4 book ai didi

matlab - 如何以字符串形式安全地操作 MATLAB 匿名函数

转载 作者:行者123 更新时间:2023-12-02 03:18:25 28 4
gpt4 key购买 nike

我有一个匿名函数,我想以字符串形式对其进行操作,然后与 fsolve 一起使用。当我这样做时,匿名函数中对常量的引用丢失并且 fsolve 失败。

这个问题很容易说明。

以下作品:

A=3;
myfun=@(x)sin(A*x);
x = fsolve(@(x)myfun(x),[1 4],optimoptions('fsolve','Display','off'))

以下抛出一个错误,解释为 here :

A=3;
myfun=@(x)sin(A*x);
mystring=func2str(myfun);
%string operations would go here such as strrep(mystring,'A','A^2') or whatever
myfun2=str2func(mystring);
x = fsolve(@(x)myfun2(x),[1 4],optimoptions('fsolve','Display','off'))

有什么方法可以安全地操作匿名函数,同时保留对常量参数的引用?

更多信息

具体来说,我正在编写一个简单的包装器,以允许 fsolve 接受简单情况下的虚数。下面说明了一个没有常量参数的工作示例:

myeqn=@(x)0.5*x^2-5*x+14.5;
cX0=1+1*1i;
f1=strrep(func2str(myeqn),'@(x)','');
f2=strrep((f1),'x','(x(1)+(x(2))*1i)');
f3=strcat('@(x)[real(',f2,'); imag(',f2,')]');
fc=str2func(f3);
opts=optimoptions('fsolve','Display','off');
result=arrayfun(@(cinput)[1 1i]*(real(fsolve(fc,[real(cinput);imag(cinput)],opts))),cX0)

如上面的失败示例所示,如果我在我的包装器中包含一个参数,该过程将失败并出现与上面相同的错误。

最佳答案

我最初建议使用符号数学工具箱,但再次阅读您的问题后我意识到这只是输入参数的简单替换。您可以使用函数句柄实现此目的,而无需任何字符串处理。

myeqn=@(x)0.5*x^2-5*x+14.5;
cX0=1+1*1i;
wrapper=@(x,f)([real(f(x(1)+x(2)*i)),imag(f(x(1)+x(2)*i))])
opts=optimoptions('fsolve','Display','off');
result=arrayfun(@(cinput)[1 1i]*(real(fsolve(@(x)wrapper(x,myeqn),[real(cinput);imag(cinput)],opts))),cX0)

关于matlab - 如何以字符串形式安全地操作 MATLAB 匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35143792/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com