How to implement a function within another one ?
Show older comments
Hi, I'd like to use the bisection method to find the root of a function "Fetoile" The method works but I have to iterate it for some values of a parameter "i". The problem is, the bisection function does not use "i".
Here is the code that gives me the results for "Fetoile" :
function Fetoile = q4(v)
% datas
vitesse_rotation= [83.7758040957278, 119.587013890941, 155.398223686155, 191.209433481369, 227.020643276582, 262.831853071796, 298.643062867009, 334.454272662223, 370.265482457437, 406.07669225265, 441.887902047864, 477.699111843078, 513.510321638291, 549.321531433505, 585.132741228718, 620.943951023932, 656.755160819146, 692.566370614359, 728.377580409573, 764.188790204786]
couple=[206.41064280052, 243.796265372056, 256.741969803922, 258.849308707433, 255.11836152428, 247.801181783381, 238.039957653591, 226.445249315901, 213.320493034029, 198.699623003111, 181.889713594511, 163.718280099678, 145.175662563345, 126.558747418095, 108.009552378088, 89.6025609484197, 71.3773301900352, 53.3538548851947, 35.5406860579882, 17.9395273160688]
rho=1.2;
S=2.28;
Cx=0.31;
mveh=1360;
g=9.81;
f0=0.0136;
f2=4.*10.^(-7);
ntrans=0.92;
atrans=1.04;
btrans=0.0025;
R=0.31;
i=[9.62,5.87,3.91,2.90,2.31];
teta=0;
%end of datas
for m = 1:5
Cmax=spline(vitesse_rotation,couple,i(m).*(v)/R);
Faero = (1/2)*rho*S*Cx*(v).^2;
Frlt = mveh*g*cos(teta)*(f0+f2*(v).^2);
Fgrav = mveh*g*sin(teta);
Fmotmax = ntrans*(i(m)/R)*Cmax;
Fetoile = Faero + Frlt + Fgrav - Fmotmax;
tabFetoile(m) = Fetoile;
end %end of for loop
disp('The results are :');
disp(tabFetoile);
And here is the code for the bisection, I tried a loop on the values of "vmin" are values that I'm sure are negatives.
function root = bishoz(f,vmin,vmax)
resultat = [];
for m = 1:5
vmin=[6,9.5,13.5,16.5,19];
vmax = 150;
fvmin(m) = f(vmin(m));
fvmax = f(vmax);
if fvmax*fvmin(m) > 0
disp('Valeurs de même signe.');
else
root = (vmax + vmin(m))/2;
err = abs(f(root));
end
while err > 1e-7
if fvmax*f(root)<0
vmin(m) = root;
else
vmax = root;
end %end of if
root = (vmax + vmin(m))/2;
err = abs(f(root));
end %end of while loop
resultat(m)=root;
end %end of for loop
disp(resultat);
Accepted Answer
More Answers (1)
Xia
on 18 Mar 2015
0 votes
Sorry I read your code twice but got lost. Would you please epitomize your question by a simple example? Maybe it'll be a little better for other guys to get into this question..
1 Comment
Martin Matin
on 18 Mar 2015
Categories
Find more on Loops and Conditional Statements 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!