- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1:第二章
(1)二分法求解非线性方程:
#includestdio.h
#include math.h
#define f(x) ((x*x-1)*x-1)
void main()
{ float a,b,x,eps;
int k=0;
printf(intput eps\n);/* 容许误差 */
scanf(%f,eps);
printf(a,b=\n);
for(;;)
{scanf(%f, %f,a ,b);
if(f(a)*f(b)=0) /* 判断是否符合二分法使用的条件 */
printf(二分法不可使用,请重新输入:\n);
else break;
}
do
{ x=(a+b)/2;
k++;
if(f(a)*f(x)0) /* 如果f(a)*f(x)0,则根在区间的左半部分 */
b=x;
else if(f(a)*f(x)0) /* 否则根在区间的右半部分 */
a=x;
else break;
}while(fabs(b-a)eps);/*判断是否达到精度要求,若没有达到,继续循环*/
x=(a+b)/2; /* 取最后的小区间中点作为根的近似值 */
printf(\n The root is x=%f, k=%d\n,x,k);
}
运行结果:
intput eps
0.00001
a,b=
2,-5
The root is x=1.324721, k=20
Press any key to continue
总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。二分法收敛速度较快,但缺点是只能求解单根。
(2)牛顿法求解非线性方程:
#include stdio.h
#include math.h
float f(float x) /* 定义函数f(x) */
{ return((-3*x+4)*x-5)*x+6; }
float f1(float x) /* 定义函数f(x)的导数 */
{ return (-9*x+8)*x-5; }
void main()
{ float eps,x0,x1=1.0;
printf(input eps:\n);
scanf(%f,eps); /* 输入容许误差 */
do
{ x0=x1; /* 准备下一次迭代的初值 */
x1=x0-f(x0)/f1(x0); /* 牛顿迭代 */
}while(fabs(x1-x0)eps); /*当满足精度,输出近似根*/
printf(x=%f\n,x1);
}
程序运行结果:
x=1.265328
总结:关键是牛顿迭代的应用,程序中最大缺点是函数及其导数已唯一给出确定不可求的随意函数的根,牛顿法比二分法收敛快,可以求重根。
2:第三章
(1)列主元素消去法求解线性方程:
#includeiostream
#includecmath
#define N 20
using namespace std;
void load();
float a[N][N];
int m;
int main(){
int i,j;
int c,k,n,p,r;
float x[N],l[N][N],s,d;
cout下面请输入未知数的个数m=;
cinm;
coutendl;
cout请按顺序输入增广矩阵a:endl;
load();
for(i=0;im;i++)
{
for(j=i;jm;j++)
c=(fabs(a[j][i])fabs(a[i][i]))?j:i; /*找列最大元素*/
for(n=0;nm+1;n++)
{s=a[i][n]; a[i][n]=a[c][n]; a[c][n]=s;} /*将列最大数防在对角线上*/
for(p=0;pm+1;p++)
couta[i][p]\t;
coutendl;
for(k=i+1;km;k++)
{
l[k][i]=a[k][i]/a[i][i];
for(r=i;rm+1;r++) /*化成三角阵*/
a[k][r]=a[k][r]-l[k][i]*a[i][r];
}
}
x[m-1]=a[m-1][m]/a[m-1][m-1];
for(i=m-2;i=0;i--)
{
d=0
文档评论(0)