我正在解决一个涉及变量数大于100的耦合非线性方程的问题。
我使用Fsolve / lsqnonlin(MATLAB)来解决此问题,它对于较少数量的变量(大约20个)有效。但是,随着变量数量的增加,它不能收敛到解决方案。
function y2 = chec(p,n,ges,res)
%n is the number of variables
% res is 1xn matrix with complex numbers
% ges is just a constant.
gaus=exp(-((-(n/2-0.5):(n/2-0.5)).^2)/9000);
S=gaus.*exp(1i*p);
M=S'*S;
y2=zeros(n,1);
for k = 2:n
cv = sum(diag(M,k-1))-res(k);
if(k<n)
y2(2*(k-lm)+1)=real(cv);
y2(2*(k-lm)+2)=imag(cv);
elseif(k==n)
y2(2*(k-lm)+1)=imag(log(sum(diag(M,k-1)))-log(aucrr(k)));
y2(2*(k-lm)+2)=p(n)-ges;
end
end
%%% function ends here %%%
[z,fval] = fsolve(@(x) chec(x,n,ges,res),rand(1,n));