首页 文章

具有复杂方程组的lsqnonlin

提问于
浏览
0

我有两个复杂的非线性方程,有两个复变量(然后是四个实变量) . 我试图使用lsqnonlin而不是fsolve来定义我的未知变量的边界(lb,ub) .

options=optimset('Display','iter','MaxFunEvals',1e6,'TolX',1e-16);
fun = @myfun;
x0 = [0,0,1000/2,100/2];
lb = [0,0,0,0];
ub = [1,1,1000,100];
x = lsqnonlin(fun,x0,lb,ub,options)

我的函数有这样的形式:

function F=myfun(x)

F(1) = a*x(3)+b*x(4)*1i - G1(x(1), x(2), x(3), x(4));
F(2) = c*x(3)+d*x(4)*1i - G2(x(1), x(2), x(3), x(4));

其中a,b,c,d是常数复数值,G(x(1),x(2),x(3),x(4))是非线性函数(也有复杂的分量) . 在运行lsqnonlin求解器后,我得到了以下错误消息:Levenberg-Marquardt算法不处理约束约束,而信赖域反射算法至少需要与变量一样多的方程;中止 .

首先,我没有使用Levenberg-Marquardt算法,因此我不认为错误是因为这个原因 . 然后,它让我认为lsqnonlin不能处理复杂的方程系统,也许它只能看到两个方程(虽然这两个复方程给出了四个实方程来解决我的四个实变量(x(1),x(2),x( 3),x(4)) .

我可以在使用lsqnonlin时编写复杂的方程式系统吗?难道我做错了什么?我非常感谢你能给我的任何帮助 . 非常感谢提前))

1 回答

  • 0

    正如lsqnonlin(限制:第三点,或搜索'complex')的matlab文档中所述,只有在没有约束约束的情况下,才能将它用于复值问题 . 如建议的那样,您应该像复杂变量一样将 F 拆分为realimaginary部分 .

    Fc(1) = a*x(3)+b*x(4)*1i - G1(x(1), x(2), x(3), x(4));
    Fc(2) = c*x(3)+d*x(4)*1i - G2(x(1), x(2), x(3), x(4));
    
    F(1:2) = real(Fc);
    F(3:4) = imag(Fc);
    

相关问题