Matlab과 Python에서 'm'비선형 방정식을 풀어내는 문학에 게재 된 알고리즘을 테스트 해 왔습니다. 비선형 방정식 집합에는 복소수를 포함하는 입력 변수가 포함되므로 결과 솔루션도 복잡해야합니다. 지금, 나는 다음 코드 줄을 사용하여 matlab에 꽤 좋은 결과를 얻을 수 있었다 : h와 g는 각각 복잡한 행렬 및 벡터입니다파이썬에서 비선형 방정식 집합으로부터 복잡한 뿌리 찾기
lambdas0 = ones(1,m)*1e-5;
options = optimset('Algorithm','levenberg-marquardt',...
'MaxFunEvals',1000000,'MaxIter',10000,'TolX',1e-20,...
'TolFun',1e-20);
Eq = @(lambda)maxentfun(lambda,m,h,g);
[lambdasf] = fsolve(Eq,lambdas0,options);
. 이 솔루션은 광범위한 초기 값에 대해 매우 잘 수렴합니다.
저는 파이썬에서 이러한 결과를 모방하려고했지만 거의 성공하지 못했습니다. 수치 해석기는 많이 다르게 설정되어있는 것 같고 'levenburg-marquardt'알고리즘은 함수 루트 아래에 있습니다. 파이썬에서이 알고리즘은 복잡한 뿌리를 처리 할 수없고 나는 다음 줄을 실행하면
lambdas0 = np.ones(m)*1e-5
sol = root(maxentfun, lambdas0, args = (m,h,g), method='lm', tol = 1e-20, options = {'maxiter':10000, 'xtol':1e-20})
lambdasf = sol.x
나는 다음과 같은 오류 얻을 :
minpack.error: Result from function call is not a proper array of floats.
내가 다른 알고리즘의 일부를 사용하여 시도, 등을 ' broyden2 '와'anderson '이지만 Matlab보다 훨씬 열등하며 초기 조건을 가지고 놀고 난 후에 만 좋은 결과를 준다. 'fsolve'함수는 복잡한 변수도 처리 할 수 없습니다.
내가 잘못 적용하고있는 부분이 있는지, 누군가 파이썬에서 복잡한 비선형 방정식을 올바르게 풀 수있는 방법에 대한 아이디어가 있는지 궁금합니다. 내가 실수 부와 허수 부분의 배열로 제 기능을 다시하려고 이러한 유형의 문제가 발생하는 경우
당신에게