2014-10-16 3 views
0

나는 비선형 방정식 시스템을 풀 필요가있다. fsolve을 사용하기 위해 필자는 "myfun"함수가 포함 된 m- 파일을 작성했습니다. 이 함수는 메인 m- 파일에 의해 호출됩니다.matlab : fsolve에서 알 수없는 벡터 사용

":"루프를 사용하여 시스템 및 알 수없는 항목 모두를 작성해야합니다.

예 :

function F=myfun(x) 
n=20;` 
for j=1:n 
    c1=sqrt(x(j)^2-3*x(j)); 
    c2=x(j)^(1/2); 
F(j)=c1+c2; 
end 

내 문제, 내 벡터 메모리를 미리 할당해야한다는 것입니다 F와 X 모두, 그렇지 않으면 해결사가 numel가 고려 (X) = 1. 하지만

F=zeros(n,1); 
x=zeros(n,1); 

를 선언하면 내가 가지고있는 다음과 같은 출력 :

No solution found. 
fsolve stopped because the problem appears regular as measured by the gradient, 
but the vector of function values is not near zero as measured by the 
default value of the function tolerance. 

어떤 제안이? 감사합니다

답변

0

당신은 그럼 당신은 또한 N, C1, C2를 선언 할 필요가 없습니다

F = sqrt(x.^2-3*x) + x.^(1/2); 

를 사용, 루프가 필요하지 않습니다.

귀하의 오류 메시지도 할당에 문제가있는 것처럼 들리지만 더 많은 해결책을 찾는 데 문제가 있습니다.

+0

'fsolve'에서이 함수를 사용하려면 함수가 필요하기 때문에 익명 함수'fun = @ (x) sqrt (x.^2-3 * x) + sqrt (x)'를 선호합니다. – MeMyselfAndI

+0

예, F는 여전히 OP와 같은 함수 안에 있어야합니다. 익명의 함수는 훌륭한 대안입니다. – jacob

+0

실제로 게시 한 예는 적절하지 않습니다. 문제를 지나치게 단순화했습니다. F = myfun (X) 위한 I = 1 : 20 J = 4 + 제가 만약> 2 내가 <&& 20 F (j) = 내 코드는 다소 같은데 x (i-1) * (1-sqrt (x-1)) * (1-sqrt x (i + 1))); (i + 1) * (1-sqrt (x (i + 1))) 상기 식 (1)에있어서, F (j) = x (i) * 1 - sqrt (x)); ELSEIF ... 끝 끝 –