Using fsolve in a for loop for multiple equations
조회 수: 7 (최근 30일)
이전 댓글 표시
Hi I'm using "fsolve" to solve a system of nonlinear equations (really just one of the equations is nonlinear) for the parameters [x,y,z,q]. These parameters must be evaluated each time I change the variable 'a', which is where the for loop comes in. So basically, I'm solving [x,y,z,q] for different values of 'a'. I'm using anonymous syntax functions to solve the equations because it's faster, but my problem is that the code wont run for some reason when I have more than 2 equations. I used the same style from this forum (https://www.mathworks.com/matlabcentral/answers/163622-fsolve-in-a-for-loop) to solve a single equation, but I can't solve this problem when I have more equations.
My code is as follows
clc; clear;
h1 = 0.5;
h2 = 1.25;
gam = 2;
sig = 0.25;
K = 0.025;
D = 5;
a=x1(i);
F = {@(x,q) sig*(a^4-x^4)+h1*(a-x)-q;
@(x,y,q) 1/(1-gam)*(x^(-gam+1)-y^(-gam+1))-q;
@(y,z,q) K*D/(1-gam)*(y^(-gam+1)-z^(-gam+1))-q;
@(z,q) h2*(z-1)-q};
x0 = [1 1 1 1];
xfval(i) = fsolve(F,x0);
end
My error is in the last line which gives me the following:
Error using lsqfcnchk (line 114)
FUN must be a function handle.
Error in fsolve (line 210)
funfcn = lsqfcnchk(FUN,'fsolve',length(varargin),funValCheck,gradflag);
Can anybody help me with this issue? Thanks
댓글 수: 0
답변 (1개)
Walter Roberson
2018년 2월 9일
You cannot pass a cell array of function handles to fsolve.
Also, the handle you pass to fsolve must expect only a single variable (which might be a vector). But you can parameterize:
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!