소인, 대감께 감히 여쭐것이 있어 이렇게 오게 되었습니다....
부디 하루종일 붙잡고 머리 싸매는 까막눈 소인에게 힌트를 좀 주시면....
****사진에 붙은 문제 번호는 무시해주세요...
라는 문제가 있어서
강의 교재에 있는 아래 예제 두개를 보고
참고한 예제 1.
-fsolve 함수를 이용하여 다음의 문제를 풀어 보자.
먼저 다음과 같은 m-file(이름: test.m)을 만들자.
f(2,1)=x(1)*x(2)+x(1)+2*x(2)-4;
다음으로 아래를 실행하면 근을 찾아 준다.
>> [x fval] = fsolve(@test,[2 0])
Optimization terminated: first-order optimality is less than options.TolFun.
x =
1.0000 1.0000
fval = 1.0e-007 *
0.1893
참고한 예제 2
function [F]=myfunc(x)
Ca=x(1);
Cb=x(2);
Cc=x(3);
Cd=x(4);
k1=1;
k2=0.2;
k3=0.05;
k4=0.4;
Vr=100;
Q=50;
Ca0=1;
F(1)=-Ca+Ca0+Vr*(-k1*Ca-k2*Ca^1.5+k3*Cc^2)/Q;
F(2)=-Cb+Vr*(2*k1*Ca-k4*Cb^2)/Q;
F(3)=-Cc+Vr*(k2*Ca^1.5-k3*Cc^2+k4*Cb^2)/Q;
F(4)=-Cd+Vr*(k4*Cb^2)/Q;
return
다음으로 fsolve함수를 이용하여 근을 찾는다.
>> [x fval]=fsolve(@myfunc,[1.0 0.0 0.0 0.0])
Optimization terminated: first-order optimality is less than options.TolFun.
x =
0.3189 0.7839 0.5350 0.4916
fval =
1.0e-009 *
0.0696 -0.7838 0.7144 0.7841
-----------------------------------------------------------------------------------------------------------------------------
이 문제를 풀기 위해서 위 두개를 보고
1번 문제를 보고 fsolve를 사용하면 되겠다는 생각이 들어서
fsolve를 쓰는 다른 예제인 2번 예제에서 미지수를
Ca=x(1);
Cb=x(2);
Cc=x(3);
Cd=x(4);
이런식으로 뒀으니까 저도 식에 있는 미지수를
x=x(1);
y=x(2);
z=x(3);
이렇게 둬서
솔직히 저거나 이거나 다를거 업잖아요
그래서 결국에
이렇게 짜 봤어요
function [F]=mat04(x)
x=x(1);
y=x(2);
z=x(3);
F(1,1)=2*x-y-z;
F(2,1)=X^4-0.5*y^2-0.5*z^2;
F(3,1)=2*exp(x)-exp(y)*(1+z);
return
그다음 예제에 나온거랑 비슷하게
[x fval]=fsolve(@mat04,[1.0 0.9 1.2])
이렇게 돌렸어요
초기값이 x=1
y=0.9
z=1.2
로 두라고 해서요
2번이랑 문제 형식도 비슷하다고 생각하고 결과값 돌리는거도
[x fval]=fsolve(@myfunc,[1.0 0.0 0.0 0.0])
[x fval]=fsolve(@mat04,[1.0 0.9 1.2])
다를거 하나도 없는데
이런 메세지가 떠서요
[x fval]=fsolve(@mat04,[1.0 0.9 1.2])
인덱스가 배열 경계를 초과합니다.
오류 발생: mat04 (line 3)
y=x(2);
오류 발생: fsolve (line 242)
fuser = feval(funfcn{3},x,varargin{:});
원인:
Failure in initial objective function evaluation. FSOLVE cannot continue.
근데 제가 1번의 x(1)*x(2) 이렇게 되어있던걸
x=x(1)
y=x(2) 이런식으로 고쳐서 돌렸을때도 위와 비슷한 메세지가 떴었어요
대체 뭐가 문제인건가요....
아 대체왜안대 ㅈㅇ매ㅓ야ㅜㅁㅈ우ㅕㅁㅇㄿㅁ농ㅎ'메대럼ㄷ'랴ㅓㄴ애푸내ㅕㅎㅁㄷ'ㅑㅗㅁ'게ㅑ런해ㅜㄹㄴㅍ;ㅐ눙ㅎ['ㅁㅔㅑ]댷ㄷ메해ㅏㅁㄷ]ㅎ
ㄴ마ㅙㄴㅇ이거말고도할거만은데ㅔㅇㅁ-아므라췅ㅍ'ㅔ냗ㅎㅁ뗴ㅑ헌'야ㅔ퍼ㅑㅑㅁ렂ㅁ
소인을좀 구제해 주시옵소서 대감..