Boling point problem with bisection method

조회 수: 1 (최근 30일)
Arctgx
Arctgx 2020년 4월 16일
댓글: GeotechnicalEngr 2020년 4월 23일
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