第四章:方程求根的迭代法

第四章:方程求根的迭代法,第1张

啥样是不动点?

接下来的两节讲的是全局收敛和局部收敛,其中的推导公式就不在这儿写了,ppt都有,我觉得这个地方出题不是很好出,就算出了也不会太难,所以就略过吧。

p阶收敛的条件:

原理: 将非线性方程线性化。

牛顿迭代公式:

又要分析收敛性了:

牛顿下山了:

为了防止迭代发散,在迭代过程中附加一项要求,即单调性:

迭代法的变形:

弦截法: 本来是取点做切线,现在直接找两个点做弦。

1将 f(x)=0 化成 x=g(x) 的结果是唯一的。 错误

2初值的选取影响Newton迭代法的收敛性。 正确

3弦截法就是用曲线上的两个初始点进行插值,用插值函数的解作为近似解,然后逐次迭代。有必要用更高次的插值函数构造迭代吗? 没有

定义:

Jacobi雅可比迭代法:

将雅可比迭代法改进,就得到了 GS迭代法:

逐次超松弛迭代法: 这个推导实在看不懂了,直接写个解法吧:

收敛性我实在搞不动了,xdm自己看视频吧。

第五章,说实话,我没太看出来考点,以我浅薄的理解,如果考,就差不多一样的题,如果不一样,那大家等死吧。

完结撒花

已经在visual studio2005中调试通过!

#include<iostream>

#include<mathh>

#include<iomanip>

using namespace std;

#define kk 50 //定义最大方程元数

int n,i,c,j,ll,hh,gg,mm;

double A[kk][kk],x[kk][kk],b[kk],y[kk],a[kk],z[kk],m,nn,d,e=1,w,fff ;

void main()

{

cout<<" "<<endl;

cout<<" 本程序可以用雅可比迭代法,塞德尔迭代法,逐次超松弛法求解线性方程组"<<endl;

cout<<" 制作人###"<<endl;

cout<<" 说明:方程最多个数为50"<<endl;

cout<<" "<<endl;

//数据的输入

/bb:/cout<<"输入的方程元数"<<endl;

cin>>n;

cout<<"请输入方程系数矩阵:"<<endl;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

cin>>A[i][j];

cout<<"请输入右边向量:"<<endl;

for(i=0;i<n;i++)

cin>>b[i];

cout<<"输入你想要的迭代精度(建议1e-5以上)!"<<endl;

cin>>fff;

cout<<"输入最大迭代次数(建议300次以上)!"<<endl;

cin>>mm;

////判断是否对角占优

// for(i=0;i<n;i++)

// {

// for(j=0;j<n;j++)

// {

// nn=0;

// if(i==j)

// {

// d=fabs(A[i][i]);

// }

// else

// nn=nn+fabs(A[i][j]);

// }

// if(nn>d)

// {

// cout<<"该方程不对角占优,迭代不收敛"<<endl;

// cout<<"是否继续?是(0),否(1)"<<endl;

// cin>>hh;

// if(hh!=1)

// goto bb;

// else exit(1);

// }

// }

//计算出迭代矩阵

for(i=0;i<n;i++)

{

b[i]=b[i]/A[i][i];

for(j=0;j<n;j++)

{

if(i==j)

{

x[i][i]=0;

}

else

{

x[i][j]=-A[i][j]/A[i][i];

}

}

}

//输出迭代矩阵

cout<<"计算出迭代矩阵为:"<<endl;

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

cout<<x[i][j]<<" ";

cout<<b[i]<<" ";

cout<<endl;

}

//迭代方法的选择

cout<<"请你选择迭代方法!"<<endl;

cout<<endl;

cout<<endl;

cout<<"选用雅可比迭代法,请输入(1)!"<<endl;

cout<<endl;

cout<<endl;

cout<<"选用塞德尔迭代法,请输入(2)!"<<endl;

cout<<endl;

cout<<endl;

cout<<"选用逐次超松弛法,请输入(3)!"<<endl;

cout<<endl;

cout<<endl;

cin>>ll;

//赋迭代初值

cout<<"输入迭代初值"<<endl;

for(i=0;i<n;i++)

cin>>y[i];

int f=1;

switch(ll)

{

case 1:goto cc;

break;

case 2:goto aa;

break;

case 3:goto dd;

}

//雅可比迭代法

cc:cout<<" ";

for(i=1;i<n+1;i++)

cout<<"X["<<i<<"]"<<" ";

cout<<"精度";

cout<<endl;

cout<<"迭代初值为: ";

cout<<setiosflags(ios::fixed);

for(i=0;i<n;i++)

cout<<y[i]<<" ";

cout<<endl;

while(e>fff)

{

for(i=0;i<n;i++)

z[i]=y[i];

for(i=0;i<n;i++)

{

nn=0;

for(j=0;j<n;j++)

{

if(i!=j)

nn=nn+x[i][j]z[j];

y[i]=nn+b[i];

}

e=fabs(z[0]-y[0]);

if(fabs(z[i]-y[i])>e)

e=fabs(z[i]-y[i]);

if(i==0)

{

cout<<setiosflags(ios::fixed);

cout<<"第"<<setw(3)<<setprecision(3)<<f++<<"次迭代"<<" ";

}

cout<<setiosflags(ios::fixed);

cout<<setw(8)<<setprecision(8)<<y[i]<<" ";

}

cout<<e;

cout<<endl;

if(f>mm)

{

cout<<"迭代次数大于"<<mm<<"次"<<endl;

cout<<"认为方程发散,迭代不收敛"<<endl;

exit(1);

}

}

cout<<endl;

cout<<endl;

cout<<"方程迭代了"<<f-1<<"次,达到你所要求的精度"<<fff<<endl;

cout<<"最后结果为:"<<endl;

cout<<endl;

for(i=0;i<n;i++)

{

cout<<"X"<<"["<<i+1<<"]"<<"="<<y[i];

cout<<endl;

}

exit(1);

//塞德尔迭代法

aa:cout<<" ";

for(i=1;i<n+1;i++)

cout<<"X["<<i<<"]"<<" ";

cout<<"精度";

cout<<endl;

cout<<"迭代初值为: ";

cout<<setiosflags(ios::fixed);

for(i=0;i<n;i++)

cout<<y[i]<<" ";

cout<<endl;

while(e>fff)

{

for(i=0;i<n;i++)

{

z[i]=y[i];

nn=0;

for(j=0;j<n;j++)

{

nn=nn+x[i][j]y[j];

y[i]=nn+b[i];

}

e=fabs(z[0]-y[0]);

if(fabs(z[i]-y[i])>e)

e=fabs(z[i]-y[i]);

if(i==0)

{

cout<<setiosflags(ios::fixed);

cout<<"第"<<setw(3)<<setprecision(3)<<f++<<"次迭代"<<" ";

}

cout<<setiosflags(ios::fixed);

cout<<setw(8)<<setprecision(8)<<y[i]<<" ";

}

cout<<e;

cout<<endl;

if(f>mm)

{

cout<<"迭代次数大于"<<mm<<"次"<<endl;

cout<<"认为方程发散,迭代不收敛"<<endl;

exit(1);

}

}

cout<<endl;

cout<<endl;

cout<<"方程迭代了"<<f-1<<"次,达到你所要求的精度"<<fff<<endl;

cout<<"最后结果为:"<<endl;

cout<<endl;

for(i=0;i<n;i++)

{

cout<<"X"<<"["<<i+1<<"]"<<"="<<y[i];

cout<<endl;

}

exit(1);

//逐次超松弛法

dd: cout<<"输入加速因子W(0<W<2):"<<endl;

cin>>w;

/if((w>2)||(w<0))

{

cout<<"输入错误!加速因子W(0<W<2):"<<endl;

cout<<"请重新输入:"<<endl;

cin>>w;

}/

//不知道为什么写成这样大于2能判断,而小于0就不能判断老?????

if(w>=2)//还有w>=2,w<=0输入0或2时也不能判断!!

{

cout<<"输入错误!加速因子W(0<W<2):"<<endl;

cout<<"请重新输入:"<<endl;

cin>>w;

}

if(w<=0)

{

cout<<"输入错误!加速因子W(0<W<2):"<<endl;

cout<<"请重新输入:"<<endl;

cin>>w;

}

cout<<" ";

for(i=1;i<n+1;i++)

cout<<"X["<<i<<"]"<<" ";

cout<<"精度";

cout<<endl;

cout<<"迭代初值为: ";

cout<<setiosflags(ios::fixed);

for(i=0;i<n;i++)

cout<<y[i]<<" ";

cout<<endl;

while(e>fff)

{

for(i=0;i<n;i++)

{

z[i]=y[i];

nn=0;

for(j=0;j<n;j++)

{

nn=nn+x[i][j]y[j];

y[i]=(1-w)z[i]+w(nn+b[i]);

}

e=fabs(z[0]-y[0]);

if(fabs(z[i]-y[i])>e)

e=fabs(z[i]-y[i]);

if(i==0)

{

cout<<setiosflags(ios::fixed);

cout<<"第"<<setw(3)<<setprecision(3)<<f++<<"次迭代"<<" ";

}

cout<<setiosflags(ios::fixed);

cout<<setw(8)<<setprecision(8)<<y[i]<<" ";

}

cout<<e;

cout<<endl;

if(f>mm)

{

cout<<"迭代次数大于"<<mm<<"次"<<endl;

cout<<"认为方程发散,迭代不收敛"<<endl;

exit(1);

}

}

cout<<endl;

cout<<endl;

cout<<"方程迭代了"<<f-1<<"次,达到你所要求的精度"<<fff<<endl;

cout<<"最后结果为:"<<endl;

cout<<endl;

for(i=0;i<n;i++)

{

cout<<"X"<<"["<<i+1<<"]"<<"="<<y[i];

cout<<endl;

}

exit(1);

}

MATLAB通过导入导出的txt数据来画电场电流分布图。方法如下:

1、先设定边界,及带电直导线的电势,然后将所要求的区域格点化,利用超松弛迭代求出每个格点的电势,相应的电场分布也就知道了;

2、此时所有的结果都可以按对应的格点存储成一个矩阵,想画图就容易了。MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。

SOR是英文Standard Operation Records的缩写,它的中文含意是记录、凭证类文件。

SOR包括了:⑴物料管理记录;⑵生产 *** 作记录;⑶质量检验与管理记录;⑷设备运行与管理记录;⑸卫生 *** 作与管理记录;⑹销售记录;⑺验证报告与验证记录;⑻人员培训与考核记录;⑼文件发放。

SOR 基本解释:

Schedule Outlook Report 计划远景报告;sorbose 己酮糖;sale or return 销售或利润;

SOR 网络解释:

1 逐次超松弛:选主元素消去法的应用四 矩阵的三角分解五 平方根法及改进的平方根法六 追赶法七 列主元三角色解法 2 线性方程组的迭代解法一 雅可比(Jacobi)迭代法二 高斯-塞德尔(Gauss-seidel)迭代法三 逐次超松弛(SOR)迭代法 3 迭代法。

2 女法师:最佳答案: PET的搭配要看你连的人物而选择用什么,其实在乎的主要就是他的光环,在大多数情况下,一般女法师(sor)会选择噩梦 ACT 2(以后说的都是ACT 2的PET)里的防御型,他的光环可以冻结敌人,降低他们的移动和攻击速度。

3 sor:successive over-relaxation; 超松弛迭代法。

4 sor:subsystem – out – of – service – request; 子系统中断服务请求。

5 sor:sales order; 订单。

6 sor:synchrotron orbital radiation; 同步辐射。

1SOR 双语例句Some of t hese food companies are a t t he forefron t of bes t prac t ice in t he food indus t ry - and t hey can't afford t o have t heir brand t ain t ed by con t amina t ion of any sor t - including lubrican t s

这其中的一些公司都处于食品行业执行最佳规范的前沿-因而,它们不希望它们的品牌因为某种形式的污染事件而受到玷污-包括润滑油污染。

2 Compared with the result of the SOR method, the result of this algorithm shows the algorithm can accelerate converg ence

比较了该算法和用超松弛法计算的结果,表明采用该算法确实可以加快收敛速度。

3 The numerical results also express that the stability of new algorithm is better than that of the SOR method of Cottle and Coheen。

数值结果还表明,新算法比Cottle和Coheen的SOR法稳定。

sor是Specification Of Requirements,他在汽车行业中代表要求书。指顾客方针对供应商发出的产品规格要求,一般是一个项目启动后,在供应商招标时发给供应商,其中包含产品的价格、质量、数量等各方面比较详细的要求。

在本质上,SoE对移动、社会、云公共服务和传统IT系统(SoR)应用了预测分析,以便直接在客户、合作伙伴和员工的日常生活环境中提供应用程序和智能产品。

扩展资料:

SOR 基本解释:

Schedule Outlook Report 计划远景报告;sorbose 己酮糖;sale or return 销售或利润;

SOR 网络解释:

1 逐次超松弛:选主元素消去法的应用四 矩阵的三角分解五 平方根法及改进的平方根法六 追赶法七 列主元三角色解法 2 线性方程组的迭代解法一 雅可比(Jacobi)迭代法二 高斯-塞德尔(Gauss-seidel)迭代法三 逐次超松弛(SOR)迭代法 3 迭代法。

2 女法师:最佳答案: PET的搭配要看你连的人物而选择用什么,其实在乎的主要就是他的光环,在大多数情况下,一般女法师(sor)会选择噩梦 ACT 2(以后说的都是ACT 2的PET)里的防御型,他的光环可以冻结敌人,降低他们的移动和攻击速度。

参考资料来源:

百度百科-逐次超松弛法

以上就是关于第四章:方程求根的迭代法全部的内容,包括:第四章:方程求根的迭代法、利用G-S迭代法求解一个10阶线性代数方程组、MATLAB怎么根据导出的txt数据画电场电流分布图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10629667.html

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

发表评论

登录后才能评论

评论列表(0条)

保存