梯度法求解n元一次方程组的解_第1页
梯度法求解n元一次方程组的解_第2页
梯度法求解n元一次方程组的解_第3页
梯度法求解n元一次方程组的解_第4页
梯度法求解n元一次方程组的解_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上梯度法解线性方程组的解算法描述:梯度法又称最速下降法,通常用来求非齐次方程组 fi(x0, x1,xn-1)=0 (i=0,1,.,n-1)的一组实根 算法如下:1.确定目标函数为:F=F(x0, x1,xn-1)=i=0n-1fi2。2.选取一组初值x0, x1,xn-1 。3.计算目标函数F的值。4.F<e,则x0, x1,xn-1 即为方程组的一组实根,过程结束;否则继续下一步。5.计算目标函数F在x0, x1,xn-1 点的偏导Fxi=2j=0n-1fj*fjxj i=0,1,n-1 在计算:D=j=0n-1Fxj25.计算:xi - FXi*FD =

2、xi 6.跳转步骤2.实现代码如下:#include <stdio.h>#include <stdlib.h>void printf_fangchengzu(double a100100,int n);void printf_jie(double jie,int n);void printf_menu();void printf_help();void main()int i,j,k;int choose;double sum,sum_piandao,s,e;/设置精度的int n;/记录当前求解的是几元方程组double an100100;/记录方程组的系数doubl

3、e xn100;/记录方程的解double sn_piandao100=0,sn_yuan100;/记录方程的解 e=1;/设置默认精度 printf_menu(&choose);while(1)switch(choose)case 1:printf("请输入方程组个数:");scanf("%d",&n);printf("请输入求解的精度:");scanf("%lf",&e);/随便取一组方程作为初解for(i=0;i<n;i+)xni=1.000;/输入系数printf("

4、请依次输入方程组的系数:n");for(i=0;i<n;i+)for(j=0;j<=n;j+)scanf("%lf",&anij);/提示用户printf_fangchengzu(an,n);printf("求解精度为:%f",e);/循环逐步求精while(1)sum=0;/Fsum_piandao=0;/Dfor(i=0;i<n;i+)s=0;for(j=0;j<n;j+)s+=xnj*anij;s+=anin;/ffor(k=0;k<n;k+)sn_piandaok+=2*s*anik;/求导sn_y

5、uani=s*s;/fi*fisum+=sn_yuani;/Ffor(k=0;k<n;k+)sum_piandao+=sn_piandaok*sn_piandaok;/D/printf("%fn",sum);if(sum<e)printf_jie(xn,n);break;elsefor(i=0;i<n;i+)xni=xni-sum/sum_piandao*sn_piandaoi;printf_menu(&choose);break; /用户选择刷新屏幕case 2:system("cls");printf_menu(&c

6、hoose);break; case 3:printf_help();printf_menu(&choose);break; /用户选择推出case 0:return ; /* * 打印 方程组 *a为方程组的系数 * n为未知数的个数 */void printf_fangchengzu(double a100100,int n)int i,j;printf("n*你输入的方程组如下*n");for(i=0;i<n;i+)printf("n");for(j=0;j<n;j+)if(aij+1>0) printf("%3

7、f X%d+",aij,j+1);elseprintf("%3f X%d",aij,j+1);printf("%3f=0n",aij);printf("n*n");/* *输入方程组的解 *jie存放解的数组,n为未知数的个数 */void printf_jie(double jie,int n)int i;printf("n*你输入的方程组解如下*n");for(i=0;i<n;i+)printf("n X%d=%fn",i+1,jiei);printf("n*n&q

8、uot;);/* *菜单 */void printf_menu(int *a)printf("n*请选择*n");printf("n 1.求解方程组n");printf("n 2.清屏n");printf("n 3.帮助n");printf("n 0.推出n");printf("n*n");printf("请选择:");scanf("%d",&*a);/* *帮助 */void printf_help()printf("

9、;n*帮助*n");printf("n1.求解下面的方程组步骤n");printf("n 2X1+3X2+4X3-8=0 n");printf("n 7X1-2X2+3X3+1=0 n");printf("n -2X1+3X2+4X3-4=0 n");printf("n 1.方程组个数为:3n");printf("n 2. 求解精度根据需要取越小精度越高运算时间越长例如:0.01n");printf("n 3.方程组系数依次为:n");printf("n 2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论