Fzero with defined scalar parameters
15 views (last 30 days)
Show older comments
Hello, I am approaching to MATLAB by myself, but I have a problem: I'm writing a script, that I will simplify as follow
k=0.1805;
n=4;
r_t=1.78e-3;
I=151;
d_r=0.06;
d=0.0009/d_r;
delt=10;
f=0.907; % Parameter that I want to set and change when needed
r_c=r_t*sqrt(f);
q_r=0.0072*((1+2/n)/((1+(4/n))^(3/10)))*(I^(7/5))/(r_t*sqrt(f))^(12/5)
y=k*delt/((q_r)*d_r*r_t*sqrt(f))
x=fzero('( exp(-(x^2)))/(x*sqrt(pi))+erf(x) -1-0.1805*10/((0.0072*((1+2/4)/((1+(4/4))^(3/10)))*(151^(7/5))/(1.78e-3*sqrt(0.907))^(12/5)*(0.06)*(1.78e-3)*sqrt(0.907)))',3)
Now the problem arises when I compute x: it is computed as the zero of exp(-(x^2)))/(x*sqrt(pi))+erf(x) -y , but I can't introduce "y" in the string of fzero, so I've inserted all the numerical expression. This is a big deal, because everytime I want to change "f" I have to find it in the string and change its value, while I would like to substitute it only once, when I define it. If I want to change any other parameter, the problem is still the same... I've read about fmin, function_handle etc etc, but I was not able to understand those tools, because by now I know very little about MATLAB. Could you kindly help me to solve this particular problem? Please, I beg you also to be detailed, because nothing is so obvious to me, now. Thanks a lot!
0 Comments
Accepted Answer
More Answers (2)
Thorsten
on 16 Dec 2014
If FUN is parameterized, you can use anonymous functions to capture the problem-dependent parameters. Suppose you want to solve the equation given in the function myfun, which is parameterized by its second argument c. Here myfun is an M-file function such as
function f = myfun(x,c)
f = cos(c*x);
To solve the equation for a specific value of c, first assign the value to c. Then create a one-argument anonymous function that captures that value of c and calls myfun with two arguments. Finally, pass this anonymous function to FZERO:
c = 2; % define parameter first
x = fzero(@(x) myfun(x,c),0.1)
In your case use y instead of c and define myfun as exp(-(x^2)))/(x*sqrt(pi))+erf(x)
0 Comments
See Also
Categories
Find more on Optimization in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!