Boling point problem with bisection method

1 次查看(过去 30 天)
Hi everybody! im trying to solve a boiling problem with bisection method. but there is something wrong.
Question is:
To solve it, i wrote these codes: but there is an error (too many input arguments)
function bisection(a, b, eps)
iter=0;
global k A B C
k=[0.05 0.15 0.5 0.3];
A=[15.8333 15.8366 15.8737 15.9426];
B=[2477.07 2697.55 2911.32 3120.29];
C=[-39.94 -48.78 -56.51 -63.63];
xm = (a+b)/2;
x=[a b xm];
f = fonk(x);
for i=1:4
exp(A-B/(x+C))*k*133.32-1e5;
end
while abs(a-b)>eps
if f(1)*f(3) <=0
b = xm;
elseif f(2)*f(3)<=0
a = xm;
else
disp('You have a ill conditioned function or multiple root');
end
iter=iter+1;
end
fprintf('Bulunan kök değeri (sürtünme katsayısı) = %8.5f \n', (a+b)/2);
fprintf('%i. iterasyonda sonuca ulaşıldı. \n', iter);
end
function [f] = fonk(x)
global k A B C
f=exp(A-B/(x+C))*k*133.32-1e5;
end
  5 个评论
Ameer Hamza
Ameer Hamza 2020-4-20
Which line gives this error? What are the values of a, b, and eps when you call this function? vector A, B, and C are 1x4, but x is 1x3 so this expression
exp(A-B/(x+C))*k*133.32-1e5;
will also give error.
Arctgx
Arctgx 2020-4-20
darova, i used "k" for x. and i used "x" for T. i want to find mixture's boiling point.
Ameer, what is the solution?

请先登录,再进行评论。

采纳的回答

Ameer Hamza
Ameer Hamza 2020-4-20
编辑:Ameer Hamza 2020-4-20
Try this code. Check the differences with your code to see the mistakes
x = bisection(300, 400, 0.001);
function xm = bisection(a, b, eps)
iter = 0;
global k A B C
k=[0.05 0.15 0.5 0.3];
A=[15.8333 15.8366 15.8737 15.9426];
B=[2477.07 2697.55 2911.32 3120.29];
C=[-39.94 -48.78 -56.51 -63.63];
while abs(a-b)>eps
xm = (a+b)/2;
if fonk(a)*fonk(xm) <=0
b = xm;
elseif fonk(xm)*fonk(b)<=0
a = xm;
else
disp('You have a ill conditioned function or multiple root');
end
iter=iter+1;
end
fprintf('Bulunan kök değeri (sürtünme katsayısı) = %8.5f \n', (a+b)/2);
fprintf('%i. iterasyonda sonuca ulaşıldı. \n', iter);
end
function [f] = fonk(x)
global k A B C
f=sum(exp(A-B./(x+C)).*k*133.32)-1e5;
end
  9 个评论
Ameer Hamza
Ameer Hamza 2020-4-23
try this
x = bisection(300, 400, 0.001);
function xm = bisection(a, b, eps)
iter=0;
a=330;
b=398.75;
eps=1e-5;
iter=0;
global k A B C
k=[0.05 0.15 0.50 0.30];
A=[15.8333 15.8366 15.8737 15.9426];
B=[2477.07 2697.55 2911.32 3120.29];
C=[-39.94 -48.78 -56.51 -63.63];
while abs(a-b)>eps
xm = (a+b)/2;
x=[a b xm];
f(1) = fonk(x(1));
f(2) = fonk(x(2));
f(3) = fonk(x(3));
if f(1)*f(3) <=0
b = xm;
elseif f(2)*f(3)<=0
a = xm;
else
disp('You have a ill conditioned function or multiple root');
end
iter=iter+1;
end
fprintf('Root value) = %8.5f \n', (a+b)/2);
end
function [f] = fonk(x)
global k A B C
f=sum(exp(A-B./(x+C)).*k*133.32)-1e5;
end
GeotechnicalEngr
GeotechnicalEngr 2020-4-23
Code is working now. Thank you so much for your help!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Mathematics 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by