如何用C++解一个方程组
我想用C++解下面这个方程组:a1*x+b1*y-z=-a1^-b1^a2*x+b2*y-z=-a2^-b2^a3*x+b3*y-z=-a3^-b3^其中的a1a2a3b...
我想用C++解下面这个方程组:
a1*x+b1*y-z=-a1^-b1^
a2*x+b2*y-z=-a2^-b2^
a3*x+b3*y-z=-a3^-b3^
其中的a1 a2 a3 b1 b2 b3 都是常数。我在运行程序的时候把实际值代入。哪位大侠帮帮忙!!急需~
有那位会的帮我把程序写出来 谢谢 展开
a1*x+b1*y-z=-a1^-b1^
a2*x+b2*y-z=-a2^-b2^
a3*x+b3*y-z=-a3^-b3^
其中的a1 a2 a3 b1 b2 b3 都是常数。我在运行程序的时候把实际值代入。哪位大侠帮帮忙!!急需~
有那位会的帮我把程序写出来 谢谢 展开
5个回答
展开全部
#include <iostream>
#include <math.h>
#include <string>//string 的正确用法
using namespace std;
int main()
{
int row, col, count, n;//定义基本变量
float m, max, temp;
char c;
string s; //要通过namespace才能用
//输入过程-----------------------------------------------------
while(1){
cout<<">>本程序将演示列主元消元法的求解过程<<\n请输入未知数的个数:";
cin>>c;
n = (int)c-48;
if(n >9 || c <0) {cout<<"必须输入数字,且大于0小于9!"<<endl; return 0;}
float* a = new float[n*n];
float* b = new float[n];
for(row = 0; row<n; row++){ cout<<"---------------------------"<<endl;
for(col=0; col<n; col++){
cout<<" 第 "<<row+1<<" 行,第 "<<col+1<<" 个系数:";
cin>>a[row*n+col];
}
cout<<" 第 "<<row+1<<" 行右端向量:";
cin>>b[row];
}
//输出矩阵
cout<<"------ 你输入的矩阵 ------"<<endl;
for(row=0; row<n; row++){
cout<<"[ ";
for(col=0; col<n; col++) cout<<a[row*n+col]<<"\t";
cout<<"| "<<b[row]<<"\t]"<<endl;
}
//消元过程------------------------------------------------------
for(count = 0; count<(n-1); count++){ //共消(n-1)个未知数
max = fabsf(a[count*n+count]);col=count; //找到最大约元
for(row = count; row<n; row++)
if(max<fabsf(a[row*n+count])) {max = fabsf(a[row*n+count]);col=row;}
for(row = count; row<n; row++){//交换行
temp = a[count*n+row];
a[count*n+row] = a[col*n+row];
a[col*n+row] = temp;
}
temp = b[count];b[count] = b[col];b[col] = temp;
cout<<"------ 第 "<<count+1<<" 次消元 ------"<<endl;
for(row = (count+1); row<n; row++){ //从第i行消起
m = a[row*n+count]/a[count*n+count];//计算第i行的M
for(col = count; col<n; col++) //计算第i行的第col个数据
//保留的有效位
a[row*n+col] = (float)(int)((a[row*n+col]-m*a[count*n+col])*10000)/10000;
b[row] = b[row]-m*b[count];
}
for(row=0; row<n; row++){
cout<<"[ ";
for(col = 0; col<n; col++) cout<<a[row*n+col]<<"\t";
cout<<"| "<<b[row]<<"\t]"<<endl;
}
}
//回代过程------------------------------------------------------
cout<<"------ 结果 ------\n";
if(a[(n-1)*n+(n-1)] == 0) {cout<<"无法求解!"<<endl; return 0;}
float* s = new float[n];
s[n-1] = b[n-1]/a[(n-1)*n+(n-1)];//得到第n个未知数的值;
for(row = (n-2); row>=0; row--){
temp = 0;
for (col = (row+1); col<n; col++)
temp = temp+a[row*n+col]*s[col];
s[row] = (b[row]-temp)/a[row*n+row];
}
//得到结果------------------------------------------------------
for(count = 0; count<n; count++)
cout<<"X"<<count+1<<" = "<<s[count]<<endl;
delete []a; delete []b; delete []s;//释放内存
cout<<"要继续吗?(Y/N)";cin>>c;
if(('N' == c) || ('n' == c)) return 0;
}
}
#include <math.h>
#include <string>//string 的正确用法
using namespace std;
int main()
{
int row, col, count, n;//定义基本变量
float m, max, temp;
char c;
string s; //要通过namespace才能用
//输入过程-----------------------------------------------------
while(1){
cout<<">>本程序将演示列主元消元法的求解过程<<\n请输入未知数的个数:";
cin>>c;
n = (int)c-48;
if(n >9 || c <0) {cout<<"必须输入数字,且大于0小于9!"<<endl; return 0;}
float* a = new float[n*n];
float* b = new float[n];
for(row = 0; row<n; row++){ cout<<"---------------------------"<<endl;
for(col=0; col<n; col++){
cout<<" 第 "<<row+1<<" 行,第 "<<col+1<<" 个系数:";
cin>>a[row*n+col];
}
cout<<" 第 "<<row+1<<" 行右端向量:";
cin>>b[row];
}
//输出矩阵
cout<<"------ 你输入的矩阵 ------"<<endl;
for(row=0; row<n; row++){
cout<<"[ ";
for(col=0; col<n; col++) cout<<a[row*n+col]<<"\t";
cout<<"| "<<b[row]<<"\t]"<<endl;
}
//消元过程------------------------------------------------------
for(count = 0; count<(n-1); count++){ //共消(n-1)个未知数
max = fabsf(a[count*n+count]);col=count; //找到最大约元
for(row = count; row<n; row++)
if(max<fabsf(a[row*n+count])) {max = fabsf(a[row*n+count]);col=row;}
for(row = count; row<n; row++){//交换行
temp = a[count*n+row];
a[count*n+row] = a[col*n+row];
a[col*n+row] = temp;
}
temp = b[count];b[count] = b[col];b[col] = temp;
cout<<"------ 第 "<<count+1<<" 次消元 ------"<<endl;
for(row = (count+1); row<n; row++){ //从第i行消起
m = a[row*n+count]/a[count*n+count];//计算第i行的M
for(col = count; col<n; col++) //计算第i行的第col个数据
//保留的有效位
a[row*n+col] = (float)(int)((a[row*n+col]-m*a[count*n+col])*10000)/10000;
b[row] = b[row]-m*b[count];
}
for(row=0; row<n; row++){
cout<<"[ ";
for(col = 0; col<n; col++) cout<<a[row*n+col]<<"\t";
cout<<"| "<<b[row]<<"\t]"<<endl;
}
}
//回代过程------------------------------------------------------
cout<<"------ 结果 ------\n";
if(a[(n-1)*n+(n-1)] == 0) {cout<<"无法求解!"<<endl; return 0;}
float* s = new float[n];
s[n-1] = b[n-1]/a[(n-1)*n+(n-1)];//得到第n个未知数的值;
for(row = (n-2); row>=0; row--){
temp = 0;
for (col = (row+1); col<n; col++)
temp = temp+a[row*n+col]*s[col];
s[row] = (b[row]-temp)/a[row*n+row];
}
//得到结果------------------------------------------------------
for(count = 0; count<n; count++)
cout<<"X"<<count+1<<" = "<<s[count]<<endl;
delete []a; delete []b; delete []s;//释放内存
cout<<"要继续吗?(Y/N)";cin>>c;
if(('N' == c) || ('n' == c)) return 0;
}
}
展开全部
很简单的,在数值分析里面有专门关于线性方程组的算法,雅克比,高斯赛德尔,照着算法编就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
更晕,我才小学
不过你可以用行列式。
如果你学过行列式,那这个问题就不应该出现了吧……
别忘了,
#include<stdio.h>
#include<math.h>
//然后编写求行列式的函数!
不过你可以用行列式。
如果你学过行列式,那这个问题就不应该出现了吧……
别忘了,
#include<stdio.h>
#include<math.h>
//然后编写求行列式的函数!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
搞一个函数,这不简单吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
晕,我才初一!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |