How to limit my x=[]; to a range of values between 0<=x<=1.
조회 수: 21 (최근 30일)
이전 댓글 표시
Victor Jimenez Carrillo
2021년 9월 21일
댓글: Victor Jimenez Carrillo
2021년 9월 24일
V=1000; Q=50; Fa0=1; k=1; E=-1; x=[]; fval=[];
for a=0:0.05:1
f=@(x) [Fa0*x(1)-k*a*V*(Fa0*(1-x(1)))/(Q*(1+E*x(1))); Fa0*(x(2)-x(1))-k*(1-a)*V*(Fa0*(1-x(2)))/(Q*(1+E*x(2)))];
[x(:,end+1),fval(:,end+1)] = fsolve(f,[0.5,0.5]);
end
x(2,:)
b=linspace(0,1,21)
plot(b,x(2,:))
ylabel('x2')
xlabel('Alpha')
%%The reason I ask is bc when E=-1 fsolve will give me values of x outside of 0-1 which I don't want to have. Thanks guys.
댓글 수: 0
채택된 답변
Walter Roberson
2021년 9월 24일
V=1000; Q=50; Fa0=1; k=1; E=-1; x=[]; fval=[];
syms x [1 2] real
syms a positive
f = [Fa0*x(1)-k*a*V*(Fa0*(1-x(1)))/(Q*(1+E*x(1))); Fa0*(x(2)-x(1))-k*(1-a)*V*(Fa0*(1-x(2)))/(Q*(1+E*x(2)))];
f
sol = solve(f, x)
sol.x1
sol.x2
so x(2) will always be exactly 20 no matter what the a value is, and 20 is outside of the range 0 to 1.
meanwhile, you have a=0:0.05:1 which is a = 0:1/20:1 and since x1 = 20*a then the only two a values that can fit in the 0<=x<=1 range are 0 and 1/20, and nothing from 1/10 onward
추가 답변 (1개)
Harikrishnan Balachandran Nair
2021년 9월 24일
Hi,
I understand that you are trying to use fsolve, and you want to have the output only within your range of interest.
You can refer to a similar question here :https://www.mathworks.com/matlabcentral/answers/59567-use-fsolve-with-boundaries.
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!