![用Matlab编程,采用不动点迭代法,求f(x)=x3+4x2-10在区间[1,2]上的 一个根,第1张 用Matlab编程,采用不动点迭代法,求f(x)=x3+4x2-10在区间[1,2]上的 一个根,第1张](/aiimages/%E7%94%A8Matlab%E7%BC%96%E7%A8%8B%EF%BC%8C%E9%87%87%E7%94%A8%E4%B8%8D%E5%8A%A8%E7%82%B9%E8%BF%AD%E4%BB%A3%E6%B3%95%EF%BC%8C%E6%B1%82f%28x%29%3Dx3%2B4x2-10%E5%9C%A8%E5%8C%BA%E9%97%B4%5B1%2C2%5D%E4%B8%8A%E7%9A%84+%E4%B8%80%E4%B8%AA%E6%A0%B9.png)
看来老师布置作业都一样啊!
前段时间刚做过这道题!
给你个正确的程序!
采用不动点迭代法计算非线性方程x3+4x2-10=0,在区间[1,2]上的一个根。
不动点迭代法程序:
function
[y,n]=BDD(x,eps)
if
nargin==1
eps=1.0e-6
elseif
nargin<1
error
return
end
x1=gg(x)
n=1
while
(norm(x1-x)>=1e-6)&&(n<=10000)
x=x1
x1=gg(x)
n=n+1
end
y=x
M函数:
function
f=gg(x)
f(1)=sqrt(2.5-(x^3)/4)
结果如下:
>>
BDD(1)
n
=
21
ans
=
1.3652
PS
不会一个学校的吧?哈哈!
syms x
eq = input('Enter the equation you want to solve:','s')
f = inline(eq)%将字符串转化为函数,这里使用@(x)亦可
%disp(f)
%eps= input('eps=')
eps=1e-5%为方便起见,这里固定eps,可随时调整
a1=input('inf=')
a2=input('sup=')%输入解的范围
x=input('x=')
x1=1
count=0
while (x1>eps&&count<50)%复数解暂时没考虑到如何处理,简单粗暴地添加了一个迭代次数上限
xb=x
x=f(x)
x1=vpa(abs(x-xb),6)
if(x1>=10)
break
end
count=count+1
end
if(x1>=10)
disp('该迭代式不收敛')
elseif(x>a2||x<a1)
disp('在给定区间内找不到合适的解')
else
disp('符合精度的解为: ')
fprintf('%.6f',x)
disp('迭代次数为:')
disp(count)
end
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)