Boling point problem with bisection method

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 Kommentare

Why are using x here instead of T?
function [f] = fonk(x)
global k A B C
f=exp(A-B/(x+C))*k*133.32-1e5;
end
I don't see you defined T somewhere
Arctgx
Arctgx am 20 Apr. 2020
I think it doesn't matter using x or T variable. The problem is not x or T. The error is (too many input arguments) in Matlab.
darova
darova am 20 Apr. 2020
Bearbeitet: darova am 20 Apr. 2020
I don't understand which value you are trying to find
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 am 20 Apr. 2020
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?

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Ameer Hamza
Ameer Hamza am 20 Apr. 2020
Bearbeitet: Ameer Hamza am 20 Apr. 2020

2 Stimmen

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 Kommentare

Arctgx
Arctgx am 20 Apr. 2020
Thank you so much Ameer! Now i saw the mistakes.
1) First mistake, scaler and vector multiplication.
2) Second mistake, about fonk(x)
3) Third mistake, forgetting to use sum function
Ameer Hamza
Ameer Hamza am 20 Apr. 2020
Correct. I am glad that my code is helpful.
Hi,i have a question. When we define 'while' part and use the code that Arctgx shared,
while abs(a-b)>eps
if f(1)*f(3) <=0
b = xm;
elseif f(2)*f(3)<=0
a = xm;
else
what can i do for not to get the 'Matrix dimensions must agree' error?
Ameer Hamza
Ameer Hamza am 23 Apr. 2020
How is the function f defined?
GeotechnicalEngr
GeotechnicalEngr am 23 Apr. 2020
Bearbeitet: GeotechnicalEngr am 23 Apr. 2020
function 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 = fonk(x);
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
I wrote these code and get Matrix dimensions must agree error.
Ameer Hamza
Ameer Hamza am 23 Apr. 2020
GeotechnicalEngr, you are using Arctgx code. Check the code in my answer to see how to correct this issue.
GeotechnicalEngr
GeotechnicalEngr am 23 Apr. 2020
Thanks for your answer. But i know that i am using Arctgx code. What my teacher want is not to do any changes when coding bisection method part. That's why i am trying to solve the problem this way, perhaps he has overlooked something.
By the way i tried your code and it works. Thanks.
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 am 23 Apr. 2020
Code is working now. Thank you so much for your help!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Mathematics finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by