matlab中利用二分法编程求方程x^3-3*x^2-x+3=0在[0,3]内的根
程序已有,但第四行中f=@(x)x^3-3*x^2-x+3的“@(x)”作用是什么?我在书上都没有见过这个符号,但不用这个符号的话程序是错误的,到底为什么?a=0;b=3...
程序已有,但第四行中f =@(x)x^3-3*x^2-x+3的 “@(x)”作用是什么?
我在书上都没有见过这个符号,但不用这个符号的话程序是错误的,到底为什么?
a=0;
b=3;
x=a:b;
f =@(x)x^3-3*x^2-x+3;
c=(a+b)./2;
while abs(b-a)>1e-6
if f(c)*f(b)<0
a=c;
else
b=c;
end
c=(a+b)./2;
x=c;
end
>> fprintf('\n x = %.5f, f(x) = %.5f \n', x, f(x));
答案是1 展开
我在书上都没有见过这个符号,但不用这个符号的话程序是错误的,到底为什么?
a=0;
b=3;
x=a:b;
f =@(x)x^3-3*x^2-x+3;
c=(a+b)./2;
while abs(b-a)>1e-6
if f(c)*f(b)<0
a=c;
else
b=c;
end
c=(a+b)./2;
x=c;
end
>> fprintf('\n x = %.5f, f(x) = %.5f \n', x, f(x));
答案是1 展开
3个回答
展开全部
先建立二分法的fun.m文件,代码如下:
function
fun(a,b,e)
%f是自定义的函数
%a为隔根区间左端点,b为隔根区间右端点,e为绝对误差限
if
nargin==2
e=1.0e-6;
elseif
nargin<2
input('变量输入错误!');
return;
end
if
a>=b
input('隔根区间输入错误!');
return;
end
a1=a;
b1=b;
c1=(a1+b1)/2;
n=0;
%迭代计数器,初值为0
while
(b-a)/(2^(n))
>=
1/2*e
c1
if
f(c1)==0
c1
elseif
f(a1)*f(c1)>0
a1=c1;
c1=(a1+b1)/2;
n=n+1;
elseif
f(b1)*f(c1)>0
b1=c1;
c1=(a1+b1)/2;
n=n+1;
end
end
n
再建立所要求函数的f.m文件:
function
y=f(x)
y=x^3-3*x-1;
运行:fun(-100,100,10^(-4))
-100
100
为根所在该区间,10^(-4)表示精度要求。
结果:c1
=
0
c1
=
50
c1
=
25
c1
=
25/2
c1
=
25/4
c1
=
25/8
c1
=
25/16
c1
=
75/32
c1
=
125/64
c1
=
225/128
c1
=
475/256
c1
=
975/512
c1
=
1925/1024
c1
=
988/529
c1
=
2494/1331
c1
=
640/341
c1
=
1189/633
c1
=
171/91
c1
=
1357/722
c1
=
109/58
c1
=
1013/539
c1
=
701/373
n
=
22
最后结果为
701/373
欢迎指错。
function
fun(a,b,e)
%f是自定义的函数
%a为隔根区间左端点,b为隔根区间右端点,e为绝对误差限
if
nargin==2
e=1.0e-6;
elseif
nargin<2
input('变量输入错误!');
return;
end
if
a>=b
input('隔根区间输入错误!');
return;
end
a1=a;
b1=b;
c1=(a1+b1)/2;
n=0;
%迭代计数器,初值为0
while
(b-a)/(2^(n))
>=
1/2*e
c1
if
f(c1)==0
c1
elseif
f(a1)*f(c1)>0
a1=c1;
c1=(a1+b1)/2;
n=n+1;
elseif
f(b1)*f(c1)>0
b1=c1;
c1=(a1+b1)/2;
n=n+1;
end
end
n
再建立所要求函数的f.m文件:
function
y=f(x)
y=x^3-3*x-1;
运行:fun(-100,100,10^(-4))
-100
100
为根所在该区间,10^(-4)表示精度要求。
结果:c1
=
0
c1
=
50
c1
=
25
c1
=
25/2
c1
=
25/4
c1
=
25/8
c1
=
25/16
c1
=
75/32
c1
=
125/64
c1
=
225/128
c1
=
475/256
c1
=
975/512
c1
=
1925/1024
c1
=
988/529
c1
=
2494/1331
c1
=
640/341
c1
=
1189/633
c1
=
171/91
c1
=
1357/722
c1
=
109/58
c1
=
1013/539
c1
=
701/373
n
=
22
最后结果为
701/373
欢迎指错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主QQ多少?我也正在编写这个程序!有些地方不太懂!望指教 比如x=a:b是什么意思?
matlab中利用二分法编程求方程x^3-3*x^2-x+3=0在[0,3]内的根 要求误差小于0.005时怎么做呢 能不能用for循环语句?
matlab中利用二分法编程求方程x^3-3*x^2-x+3=0在[0,3]内的根 要求误差小于0.005时怎么做呢 能不能用for循环语句?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询