2015-01-30 2 views
0

matlab에 4 개의 비선형 방정식을 풀려고합니다. fsolve를 사용하여 코드를 작성했지만 계속 진행하지 못하고 해결 방법을 사용하여 다른 코드를 작성했지만 결과가없는 상태로 4 시간이 지난 후에는 직접 해결합니다. 나는 그것을 해결하기 위해 내가 무엇을 사용할 수 있는지 모른다. 전혀 해결할 수 있습니까?matlab에 비선형 방정식 시스템을 해결

이 난 fsolve X와 Y를 사용하여 작성한 코드 벡터된다이고, n이 길이가 1200 뉴 동일한 벡터 1196. P (1)와 동일한 자유도, P이다 (2). ..와 P (4)

x = data1(:,1); 
y = data1(:,2); 
n = length(x); 

p0 = [0 0 0 0]; 

options = optimset('Display','iter'); 
[p,fval] = fsolve(@myfunc,p0,options); 

이 myfunc 미지수은 다음과 같습니다 문제가 fsolve 너무 딱딱처럼

function F = myfunc(p) 
global x y n 

r = y-p(1)*x.^3-p(2)*x.^2-p(3)*x-p(4); 

F = [sum(x.^3)-(n-4-2)*sum(x.^3./r); 
    sum(x.^2)-(n-4-2)*sum(x.^2./r); 
    sum(x.^1)-(n-4-2)*sum(x.^1./r); 
    sum(x.^0)-(n-4-2)*sum(x.^0./r)]; 
+0

'A, B, C, 미지수는 d' 있습니다 당신이 매개 변수화 익명 함수를 사용할 수 있습니다 경우 당신이 코드는, 그러나, 잘 보인다? – knedlsepp

+0

나는 P (1) p (2) .. p (4)를 의미한다. tnx. – parisa

답변

0

는 소리, 또는 당신은 가난한 시작 추측을 가지고있다.

다음 myfunc
x = data1(:,1); 
y = data1(:,2); 
n = length(x); 

p0 = [0 0 0 0]; 

options = optimset('Display','iter'); 
[p,fval] = fsolve(@(p) myfunc(p,x,y,n),p0,options); 

:

function F = myfunc(p,x,y,n) 

r = y-p(1)*x.^3-p(2)*x.^2-p(3)*x-p(4); 

F = [sum(x.^3)-(n-4-2)*sum(x.^3./r); 
    sum(x.^2)-(n-4-2)*sum(x.^2./r); 
    sum(x.^1)-(n-4-2)*sum(x.^1./r); 
    sum(x.^0)-(n-4-2)*sum(x.^0./r)]; 
end 
+0

덕분에 더 잘 수렴하는 데 도움이되었습니다. 그러나 그것은 초기 값에 상당히 의존합니다. 각 미지의 예상 금액을 알고 있지만 사전 지식없이이 문제를 해결해야합니다. 그것을 해결할 다른 명령을 제안 할 수 있습니까? – parisa

관련 문제