matlab 使用各种迭代法解分线性方程x^3+2*x^2+10*x
如何剪切文本:选中要剪切的文本,按下Ctrl+X(Windows)或Command+X(Mac)。 #生活常识# #日常生活技巧# #基础电脑操作#
% ----------------------------------------------------------------------------------------------- % Written by QQ137712826 % ----------------------------------------------------------------------------------------------- % 计算实习题1 使用各种迭代法解分线性方程x^3+2*x^2+10*x-20=0. % ------------------------------------------------------------------------------------------------ clc,clear leonardo_x=1.368808107; %勒让德得到的解 initx=1.0; %迭代值的初始值 % ----------------------------------------------------------------------------------------------- % 分析第 1 种迭代法是否收敛x=20/(x^2+2*x+10) % ------------------------------------------------------------------------------------------------ syms x fai=20/(x^2+2*x+10); %x=fai(x) y=diff(fai); %计算导函数 y1 = subs(y,x,1.368808107); %求在x0处的导数值 y1=abs(y1); %绝对值 fprintf('第 1 种方法,x=20/(x^2+2*x+10),|fai`(x*)| =%.10f\r\n',double(y1)); if(y1<1) %有y=|fai`(x*)|<1收敛 x=initx; %赋解的初值 n=0; %迭代次数 while(abs(x-leonardo_x)>1e-9) %一直计算到勒让德解的精度 x=20/(x^2+2*x+10); %迭代公式计算 n=n+1; %迭代次数增加一次 end fprintf(" 该方法|fai`(x*)| <1,收敛,最后解是 %.10f,迭代了%d次\r\n",x,n); else %有y=|fai`(x*)|>1不收敛 fprintf(" 该方法|fai`(x*)| 大于1,不收敛\r\n"); end % ----------------------------------------------------------------------------------------------- % 第 1 种方法收敛,使用Steffensen法加速收敛速度 % ------------------------------------------------------------------------------------------------ x=initx; %赋解的初值 n=0; %迭代次数 while(abs(x-leonardo_x)>1e-9) %一直计算到勒让德解的精度 y=20/(x^2+2*x+10); %迭代公式计算 z=20/(y^2+2*y+10); %迭代公式计算 x=x-(y-x)^2/(z-2*y+x); %迭代公式计算 n=n+1; %迭代次数增加一次 end fprintf(" 使用Steffensen法加速,最后解是 %.10f,迭代了%d次\r\n",x,n); fprintf("\r\n"); % ----------------------------------------------------------------------------------------------- % 分析第 2 种迭代法是否收敛 x=(20-2*x^2-x^3)/10.0 % ------------------------------------------------------------------------------------------------ syms x fai=(20-2*x^2-x^3)/10.0; %x=fai(x) y=diff(fai); %计算导函数 y1 = subs(y,x,1.368808107); %求在x0处的导数值 y1=abs(y1); %绝对值 fprintf('第 2 种方法,x=(20-2*x^2-x^3)/10.0,|fai`(x*)| =%.10f\r\n',double(y1)); if(y1<1) %有y=|fai`(x*)|<1收敛 x=initx; %赋解的初值 n=0; %迭代次数 while(abs(x-leonardo_x)>1e-9) %一直计算到勒让德解的精度 x=(20-2*x^2-x^3)/10.0; %迭代公式计算 n=n+1; %迭代次数增加一次 end fprintf(" 该方法收敛,最后解是 %.10f,迭代了%d次\r\n",x,n); else %有y=|fai`(x*)|>1不收敛 fprintf(" 该方法|fai`(x*)| >1,不收敛\r\n"); end fprintf("\r\n"); % ----------------------------------------------------------------------------------------------- % 分析Newton迭代法是否收敛 % ------------------------------------------------------------------------------------------------ syms x y1=x^3+2*x^2+10*x-20; %迭代公式一部分 y2=diff(y1); %计算导函数 fai=x-y1/y2; %x=fai(x) y=diff(fai); %计算导函数 y3 = subs(y,x,1.368808107); %求在x0处的导数值 y3=abs(y3); %绝对值 fprintf('第 3 种方法,Newton法,|fai`(x*)| =%.10f\r\n',double(y3)); if(y3<1) %有y=|fai`(x*)|<1收敛 xk=initx; %赋解的初值 n=0; %迭代次数 while(abs(xk-leonardo_x)>1e-9) %一直计算到勒让德解的精度 xk=double(subs(fai,x,xk)); %迭代公式计算 n=n+1; %迭代次数增加一次 end fprintf(" 该方法|fai`(x*)| <1,收敛,最后解是 %.10f,迭代了%d次\r\n",xk,n); else %有y=|fai`(x*)|>1不收敛 fprintf(" 该方法|fai`(x*)| 大于1,不收敛\r\n"); end
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394结果
第 1 种方法,x=20/(x^2+2*x+10),|fai`(x*)| =0.4438283287 该方法|fai`(x*)| <1,收敛,最后解是 1.3688081065,迭代了24次 使用Steffensen法加速,最后解是 1.3688081078,迭代了3次 第 2 种方法,x=(20-2*x^2-x^3)/10.0,|fai`(x*)| =1.1096139329 该方法|fai`(x*)| >1,不收敛 第 3 种方法,Newton法,|fai`(x*)| =0.0000000005 该方法|fai`(x*)| <1,收敛,最后解是 1.3688081078,迭代了4次
1234567891011121314151617网址:matlab 使用各种迭代法解分线性方程x^3+2*x^2+10*x https://www.yuejiaxmz.com/news/view/223597
相关内容
输入x,用迭代法按下列迭代公式求y=3根号x的值,初始值y0=x,精度要求4位有解方程:(√(x+7)+√(x+2))/(√(3x+6)+√(3x+1))=1
MAT之PSO:利用PSO实现对一元函数y = sin(10*pi*x) ./ x进行求解优化,找到最优个体适应度
python递推法 p=(x、y)=x
求y=log(1/2)^1/(x^2
关于x的分式方程有增根x=
根据下面表格中的取值,方程x 2 +x
设y=f(x)是由方程x 3
Matlab代码实践——BP神经网络
matlab中for循环的简单使用