使用牛顿迭代的方法求出方程的实根(MATLAB)

        《计算方法》有一题使用牛顿迭代求解方程实根的题目。

        查阅资料,发现判断方程有几个实根的方法太复杂,为了有效求出方程的实根,可以每次使用牛顿迭代求出一个根"p"后,将原方程除以“(x-p)”,然后在使用牛顿迭代进行求解。

        在迭代过程中,为考虑可能会发散的情况,但是结果感人。

% 这是一个一元四次方程组,最多的实数解为4个;
% 输入初始值p0、最大迭代次数N;、
% 输出四个解的值;
% 认为迭代次数达到最大迭代次数的解可能为无效解;
% 最后的结果是输出两个解0.23235和-0.03584有效。
% 可以采用循环迭代的方法,循环四次求出四个解,有时间可以改进。


p0=0.5;
N=100;
syms x
f(x)=600*x^4-550*x^3+200*x^2-20*x-1;
df(x)=diff(f(x),1);
x0=roots([600,-550,200,-20,-1])

%求第一个解
for i=1:N
    p1=p0-f(p0)/df(p0);
    if abs(p0-p1)<10^(-4)
        break
    end
    p0=p1;
end
disp('第1个解')
disp(vpa(p1,5))
if i==N
    disp('此解可能无效')
end

%求第二个解
p=vpa(p1,5);
f(x)=f(x)/(x-p);
df(x)=diff(f(x),1);
p0=1;
for i=1:N
    p1=p0-f(p0)/df(p0);
    if abs(p0-p1)<10^(-4)
        break
    end
    p0=p1;
end
disp('第2个解')
disp(vpa(p1,5))
if i==N
    disp('此解可能无效')
end

%求第三个解
p=vpa(p1,5);
f(x)=f(x)/(x-p);
df(x)=diff(f(x),1);
p0=1;
for i=1:N
    p1=p0-f(p0)/df(p0);
    if abs(p0-p1)<10^(-4)
        break
    end
    p0=p1;
end
disp('第3个解')
disp(vpa(p1,5))
if i==N
    disp('此解可能无效')
end

%求第四个解
p=vpa(p1,5);
f(x)=f(x)/(x-p);
df(x)=diff(f(x),1);
p0=1;
for i=1:N
    p1=p0-f(p0)/df(p0);
    if abs(p0-p1)<10^(-4)
        break
    end
    p0=p1;
end

disp('第4个解')
disp(vpa(p1,5))
if i==N
    disp('此解可能无效')
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值