use fzero to solve for a parameter

2 views (last 30 days)
I wrote the following code to solve for a:
clear; clc;
EquivRatio = [0.64 0.74 0.84 0.94 1];
K = [0.371 0.447 0.456 0.383 0.302];
C_NO = [0.014 0.0179 0.0187 0.0139 0.0084];
R1 = [5.79*10^(-5) 0.00110 0.00877 0.0265 0.0235];
Tao_NO = C_NO./(4*R1);
t = 1;
fun = @(a)(1-K).*(log(1+a))-(1+K).*(log(1-a))-t./Tao_NO;
alpha = fzero(fun,0.008229);
But it always give the following error:
Operands to the and && operators must be convertible to logical scalar values.
Error in fzero (line 322) elseif ~isfinite(fx) ~isreal(fx)
What's wrong with my code?
  7 Comments
Kevin Chng
Kevin Chng on 8 Oct 2018
Edited: Kevin Chng on 8 Oct 2018
for i=1:1:length(K)
fun = @(a)(1-K(i)).*(log(1+a))-(1+K(i)).*(log(1-a))-t./Tao_NO(i);
figure
fplot(fun,[-2 2])
alpha(i) = fzero(fun,0.999);
end
Hi, you may use fplot to view how is your graph's pattern. From the graph, you may see the value is leading to 1 when approaching zero for 4 & 5.
When i change the initial value to 0.999, i find the root for 4.

Sign in to comment.

Accepted Answer

Kevin Chng
Kevin Chng on 8 Oct 2018
Hi Ivy Shen,
As I see your code, there are 5 equations to solve a. Therefore, we should load a for loop to solve them one by one
clear; clc;
EquivRatio = [0.64 0.74 0.84 0.94 1];
K = [0.371 0.447 0.456 0.383 0.302];
C_NO = [0.014 0.0179 0.0187 0.0139 0.0084];
R1 = [5.79*10^(-5) 0.00110 0.00877 0.0265 0.0235];
Tao_NO = C_NO./(4*R1);
t = 1;
for i=1:1:length(K)
fun = @(a)(1-K(i)).*(log(1+a))-(1+K(i)).*(log(1-a))-t./Tao_NO(i);
alpha(i) = fzero(fun,0.008229);
end
you may use fplot to view how is your graph's pattern. From the graph, you may see the value is leading to 1 when approaching zero for 4 & 5.
for i=1:1:length(K)
fun = @(a)(1-K(i)).*(log(1+a))-(1+K(i)).*(log(1-a))-t./Tao_NO(i);
figure
fplot(fun,[-2 2])
alpha(i) = fzero(fun,0.999);
end

More Answers (0)

Products


Release

R2016b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!