2
$\begingroup$

I am having difficulties in plotting the solution of FindRoot to solve 4 variables. I defined a function and then tried tp plot it, but got an error message concerning the last parameter. However, using FindRoot outside the function gives a result. Could you please helps?

ClearAll["Global`*"]
EU = Log[#] &;

R = 1.6
pi = 0.35
λh = .81
λl = .79

ys2[pi_, λh_, λl_, R_, ph2_, pl2_, po2_] := ((pl2 - po2) (-pi pl2 po2 + ph2 (pl2 + (-1 + pi) po2)) λh + (-(ph2 - po2) (-pi pl2 po2 + ph2 (pl2 + (-1 + pi) po2)) + (ph2 - pl2) (ph2 pi + pl2 - pi pl2 - po2) po2 λh) λl)/((ph2 - po2) (-pl2 + po2) (-pl2 λh + po2 (λh - λl) + ph2 λl));

ds2[pi_, λh_, λl_, R_, ph2_, pl2_,po2_] := ((ph2 - pl2) (pi (λh - λl) + λl))/(-pl2 \λh + po2 (λh - λl) + ph2 λl);

yr2[pi_, λh_, λl_, R_, ph2_, pl2_, po2_] := ph2 (-1 + pi) + (pi pl2)/(pl2 - po2) + (ph2^2 (-1 + pi))/(-ph2 + po2);

dr2[pi_, λh_, λl_, R_, ph2_, pl2_,po2_] := ((-1 + pi) (ph2 pl2- (1 + ph2) pl2 po2 + ph2 po2^2))/(po2 (-ph2 + po2));

(*SAFE BANK*)
ysff2 = ((pl2 - po2) (-pi pl2 po2 +ph2 (pl2 + (-1 + pi) po2)) λh + (-(ph2 -po2) (-pi pl2 po2 + ph2 (pl2 + (-1 + pi) po2)) + (ph2 -pl2) (ph2 pi + pl2 - pi pl2 -po2) po2 λh) λl)/((ph2 - po2) (-pl2 +po2) (-pl2 λh + po2 (λh - λl) +ph2 λl));
dsff2 = ((ph2 - pl2) (pi (λh - λl) + λl))/(-pl2 \λh + po2 (λh - λl) + ph2 λl);
c1hs2 = dsff2;
c2hs2 = ((ysff2 + ph2*((1 - ysff2)/po2) - λh*dsff2)/((1 - λh)*(ph2/R)));
c1ls2 = dsff2;
c2ls2 = ((ysff2 + pl2*((1 - ysff2)/po2) - λl*dsff2)/((1 - λl)*(pl2/R)));


(*RISKY BANK*)
yrff2 = ph2 (-1 + pi) + (pi pl2)/(pl2 - po2) + (ph2^2 (-1 + pi))/(-ph2 + po2);
drff2 = ((-1 + pi) (ph2 pl2 - (1 + ph2) pl2 po2 + ph2 po2^2))/(po2 (-ph2 +po2));
c1hr2 = (yrff2 + ph2*(1 - yrff2/po2));
c2hr2 = (yrff2 + ph2*(1 - yrff2/po2));
c1lr2 = drff2;
c2lr2 = ((yrff2 + pl2*(1 - yrff2/po2) - λl*drff2)/((1 - λl)*(pl2/R)));

Then I define function to plot graph of FindRoot

mktL2[pi_, λh_, λl_, R_, ph2_, pl2_,po2_] := (ys2[pi, λh, λl, R, ph2, pl2,po2] - λl*ds2[pi, λh, λl, R, ph2, pl2, po2])/(1 - ys2[pi, λh, λl, R, ph2, pl2, po2]) - (λl*dr2[pi, λh, λl, R, ph2, pl2, po2] - yr2[pi, λh, λl, R, ph2, pl2, po2])/yr2[pi, λh, λl, R, ph2, pl2, po2]

mktH2[pi_, λh_, λl_, R_, ph2_, pl2_, po2_] := (ys2[pi, λh, λl, R, ph2, pl2, po2] - λh*ds2[pi, λh, λl, R, ph2, pl2, po2])/(1 - ys2[pi, λh, λl, R, ph2, pl2, po2]) - ph2*(1 - yr2[pi, λh, λl, R, ph2, pl2, po2]/po2)/yr2[pi, λh, λl, R, ph2, pl2, po2]

indif2[pi_, λh_, λl_, R_, ph2_, pl2_, po2_] := (pi*(λh*EU[c1hs2] + (1 - λh)*EU[c2hs2]) + (1 - pi)*(λl*EU[c1ls2] + (1 - λl)*EU[c2ls2])) - (pi*(λh*EU[c1hr2] + (1 - λh)*EU[c2hr2]) + (1 - pi)*(λl*EU[c1lr2] + (1 - λl)*EU[c2lr2]))

mkt02[pi_, λh_, λl_, R_, ph2_, pl2_, po2_, ρ2_] := ρ2*(1 - ysff2) - (1 - ρ2)*yrff2]

f[R_?NumericQ] := FindRoot[{mktL2[pi, λh, λl, R, ph2, pl2, po2], mktH2[pi, λh, λl, R, ph2, pl2, po2],indif2[pi, λh, λl, R, ph2, pl2, po2],mkt02[pi, λh, λl, R, ph2, pl2, po2, ρ2]}, {{ph2, 0.719, 0, 1}, {pl2, R, 1, R}, {po2, 1.046, 0.1, R}, {ρ2, 0.3, 0, 1}}][[1, 2]]

Plot[f[R], {R, 1.5, 3}]

For first three variables, ph,pl, and po, I can get the graphs but for the last variable, Rho, there was always an error message popping up

FindRoot::reged: The point {0.721957,1.47528,1.03537,1.} is at the edge of the search region {0.,1.} in coordinate 4 and the computed search direction points outside the region. >>

However, when I use FindRoot alone without defining function to it, I could get the result.

{ph2 -> 0.668173, pl2 -> 1.34191, po2 -> 1.0526, ρ2 -> 0.811842}

Can anyone help please?

$\endgroup$

closed as off-topic by Jason B., Karsten 7., m_goldberg, Öskå, Dr. belisarius Dec 4 '15 at 3:01

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "This question cannot be answered without additional information. Questions on problems in code must describe the specific problem and include valid code to reproduce it. Any data used for programming examples should be embedded in the question or code to generate the (fake) data must be included." – Jason B., Karsten 7., m_goldberg, Öskå, Dr. belisarius
If this question can be reworded to fit the rules in the help center, please edit the question.

  • $\begingroup$ If you want people to invest some time and answer your question, it is advisable that you invest some time in making it clear and simple. Can you reproduce the problem with less variables/functions etc.? Can you make a minimal working example? $\endgroup$ – yohbs Jun 24 '15 at 12:47
  • $\begingroup$ When i copy the code, there are numerous syntax errors, so I'm not sure if you pasted it incorrectly. Specifically, the two instances of \\[Lambda]h and the extraneous closing bracket. Then, to your issue, you are restricting the range for the four variables, and sometimes FindRoot doesn't find a decent answer within that region. $\endgroup$ – Jason B. Dec 3 '15 at 15:57