how to write a function for quadratic equation?

I wrote this into matlab but it doesn't work where express x1, x2, it express only one sol in d>=0 but ploting is work in d>=0. and it's error in d<0
why it doen't work and how to fix it?
function [x1,x2] = f(a,b,c)
if a==0
x1=-c/b;
x2=-c/b;
plot(x1,0,'gx',x2,0,'gx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
end
d=b^2-4*a*c;
if (d>=0)&&(~(a==0))
x1=((-b-sqrt(d))/(2*a));
x2=((-b+sqrt(d))/(2*a));
plot(x1,0,'rx',x2,0,'rx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
elseif a==0
x1=-c/b;
x2=-c/b;
plot(x1,0,'gx',x2,0,'gx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
else
[x1 x2]=[]
end

댓글 수: 4

Why have you written the code for condition a==0 twice?
You have to include the code for condition d<0 as well.
jun
jun 2022년 9월 25일
where include and how?,
i include this statements
"else if (d<0)&&(a=0)
[x1 x2] = []
else
[x1 x2] = []" which are next of condition 'a==0',
but it works f(1,0,-4)=-inf
Do you want to return empty values for if any/both of the two conditions - a==0 , d<0?
jun
jun 2022년 9월 25일
i want d<0 => empty value return
but a=0&d<0 => x1=x2=-c/b return that i want

댓글을 달려면 로그인하십시오.

 채택된 답변

VBBV
VBBV 2022년 9월 25일

0 개 추천

if (d>=0) & (~(a==0))
use binary operator &

댓글 수: 11

[x1 x2] = f(4.1,10,4)
d = 34.4000
x1 = -1.9348
x2 = -0.5042
function [x1,x2] = f(a,b,c)
if a==0
x1=-c/b;
x2=-c/b;
plot(x1,0,'gx',x2,0,'gx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
end
d=b^2-4*a*c
if (d>=0)&&(~(a==0))
x1=((-b-sqrt(d))/(2*a));
x2=((-b+sqrt(d))/(2*a));
plot(x1,0,'rx',x2,0,'rx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
elseif a==0
x1=-c/b;
x2=-c/b;
plot(x1,0,'gx',x2,0,'gx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
else
x1 = [];
x2 = [];
end
end
Missing end keyword in the function
jun
jun 2022년 9월 25일
Maybe in your matlab, besides plotting, does the output of exactly what the values ​​of x1 and x2 are?
I'm using octave now, and your code only displays the result of x1. but ploting is well
it's octave problem..?
VBBV
VBBV 2022년 9월 25일
It displays both x1 and X2 values with red markers on plot.
VBBV
VBBV 2022년 9월 25일
편집: VBBV 2022년 9월 25일
Since a is not zero in demonstrated case function does not execute first if end condition
jun
jun 2022년 9월 25일
I'm not good at English, so I'll ask again, In my matlab in octave ver, when f(1,0,-4), it doesn't come out as x1=-2 and x2=2, but derived as ans=-2. However, in plotting, both solutions work well. Does your matlab yield x1=-2,x2=2?
[x1 x2] = f(1,0,-4)
d = 16
x1 = -2
x2 = 2
function [x1,x2] = f(a,b,c)
if a==0
x1=-c/b;
x2=-c/b;
plot(x1,0,'gx',x2,0,'gx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
end
d=b^2-4*a*c
if (d>=0)&&(~(a==0))
x1=((-b-sqrt(d))/(2*a));
x2=((-b+sqrt(d))/(2*a));
plot(x1,0,'rx',x2,0,'rx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
elseif a==0
x1=-c/b;
x2=-c/b;
plot(x1,0,'gx',x2,0,'gx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
else
x1 = [];
x2 = [];
end
end
VBBV
VBBV 2022년 9월 25일
x1 and x2 values are -2 and 2 from above result. What do you get as result ?
jun
jun 2022년 9월 25일
result appers x1, but figure graph is well,
Why are you repeating a piece of code? It's redundant.
jun
jun 2022년 9월 26일
Are you right about 'a==0'? If 'a=0', an error like this is displayed
Let me highlight it. See the green parts, both are same.
I would suggest you to remove the top one and edit last else as
elseif d<0
function [x1,x2] = f(a,b,c)
%{
if a==0
x1=-c/b;
x2=-c/b;
plot(x1,0,'gx',x2,0,'gx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
end
%}
d=b^2-4*a*c
if (d>=0)&&(~(a==0))
x1=((-b-sqrt(d))/(2*a));
x2=((-b+sqrt(d))/(2*a));
plot(x1,0,'rx',x2,0,'rx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
%{
elseif a==0
x1=-c/b;
x2=-c/b;
plot(x1,0,'gx',x2,0,'gx')
hold on
fplot(@(x) a*x.^2+b*x+c)
hold off
%}
else
x1 = [];
x2 = [];
end
end

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

질문:

jun
2022년 9월 25일

댓글:

2022년 9월 26일

Community Treasure Hunt

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

Start Hunting!

Translated by