用Matlab编程,采用不动点迭代法,求f(x)=x3+4x2-10在区间[1,2]上的 一个根

用Matlab编程,采用不动点迭代法,求f(x)=x3+4x2-10在区间[1,2]上的 一个根,第1张

地球可是真小啊,

看来老师布置作业都一样啊!

前段时间刚做过这道题!

给你个正确的程序!

采用不动迭代计算非线性方程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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11164705.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存