博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【zoj3645】高斯消元求解普通线性方程
阅读量:5055 次
发布时间:2019-06-12

本文共 2378 字,大约阅读时间需要 7 分钟。

题意:

给你一个方程组(含有12个方程),求(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11)

方程组的形式是一个二次方程组

(ai1-x1)^2 + (ai2-x2)^2 +(ai3-x1)^2 + (ai4-x2)^2 +(ai5-x1)^2 + (ai6-x2)^2 +(ai7-x1)^2 + (ai8-x2)^2 + (ai9-x2)^2 +(ai10-x1)^2 + (ai11-x2)^2 = dis ^2

 

题解:

二次方程组每个展开之后,每个和上一个相减,就可以得到11个线性方程。

这题就是高斯消元求解普通线性方程的模版题啦。

我的模版:

1 void gauss(int n) 2 { 3     int i,j,k,l,r; 4     double f; 5     for(i=1;i<=n;i++) 6     { 7         r=i; 8         for(j=i+1;j<=n;j++)  9             if(myabs(a[j][i])>myabs(a[r][i])) r=j;10         if(r!=i) for(j=1;j<=n+1;j++) swap(a[i][j],a[r][j]);11         12         for(j=n+1;j>=i;j--)//逆序枚举可以避免用变量保存a[k][i]/a[i][i],避免精度损失13             for(k=i+1;k<=n;k++)14                 a[k][j]-=a[k][i]/a[i][i] * a[i][j];15     }16     17     for(i=n;i>=1;i--)18     {19         for(j=i+1;j<=n;j++)20             a[i][n+1]-=a[j][n+1]*a[i][j];21         a[i][n+1]/=a[i][i];22     }23 }

 

代码:

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 9 const int N=100;10 double a[N][N],b[N][N],c[N];11 12 double myabs(double x){ return x>0 ? x:-x;}13 14 void output()15 {16 for(int i=1;i<=11;i++)17 {18 for(int j=1;j<=12;j++) 19 printf("%.2lf ",a[i][j]);20 printf("\n");21 }22 printf("\n");23 }24 25 void gauss(int n)26 {27 int i,j,k,l,r;28 double f;29 for(i=1;i<=n;i++)30 {31 r=i;32 for(j=i+1;j<=n;j++) 33 if(myabs(a[j][i])>myabs(a[r][i])) r=j;34 if(r!=i) for(j=1;j<=n+1;j++) swap(a[i][j],a[r][j]);35 36 for(j=n+1;j>=i;j--)//逆序枚举可以避免用变量保存a[k][i]/a[i][i],避免精度损失37 for(k=i+1;k<=n;k++)38 a[k][j]-=a[k][i]/a[i][i] * a[i][j];39 }40 41 for(i=n;i>=1;i--)42 {43 for(j=i+1;j<=n;j++)44 a[i][n+1]-=a[j][n+1]*a[i][j];45 a[i][n+1]/=a[i][i];46 }47 for(i=1;i<=n-1;i++) printf("%.2lf ",a[i][n+1]);48 printf("%.2lf\n",a[n][n+1]);49 }50 51 int main()52 {53 int T;54 scanf("%d",&T);55 while(T--)56 {57 for(int i=1;i<=12;i++)58 {59 for(int j=1;j<=11;j++)60 scanf("%lf",&b[i][j]);61 scanf("%lf",&c[i]);62 }63 memset(a,0,sizeof(a));64 for(int i=1;i<=11;i++)65 {66 for(int j=1;j<=11;j++)67 {68 a[i][j]=b[i][j]-b[i+1][j];69 }70 a[i][12]=c[i+1]*c[i+1]-c[i]*c[i];71 for(int j=1;j<=11;j++) 72 a[i][12]+=b[i][j]*b[i][j]-b[i+1][j]*b[i+1][j];73 a[i][12]/=2;74 }75 // output();76 gauss(11);77 }78 return 0;79 }

 

转载于:https://www.cnblogs.com/KonjakJuruo/p/6029937.html

你可能感兴趣的文章
web.xml配置详解
查看>>
geolocation
查看>>
【2008-6】【拼正方形】
查看>>
java 类装载和初始化顺序
查看>>
[UWP 自定义控件]了解模板化控件(8):ItemsControl
查看>>
ecshop偶尔读不出来配置文件
查看>>
sort对二维字符数组排序(转)
查看>>
shiro的sessionManager类继承结构及主要类方法
查看>>
linux常用命令大全
查看>>
Group_Concat函数示例
查看>>
ZOJ 3209 Treasure Map (DLX精确覆盖)
查看>>
使用python实现简单爬虫
查看>>
hbuilder mui调用系统裁剪图片、头像裁剪-Android
查看>>
Nuxt使用iconfont矢量图标
查看>>
IE6图片透明问题
查看>>
40个Android问题
查看>>
项目质量管理三角形
查看>>
获取32位随机码(uuid)的方法
查看>>
linux内核 同步
查看>>
wamp2.4.4 如何配置虚拟主机及反向代理(解决跨域问题)
查看>>