求c语言编程用追赶法求解三对角方程组2x1+x2=1,x1+3x2+x3=2,x2+x3+x4=2,2x3+x4=0悬10分
不可能穷举得完好吗?
比如当x1=2,x2=2.x3=1.x4=0.x5=0的情况下,只要让x6+x7+x8+x9+x10=0就可以满足条件,然而x6到x10没有限定范围,所以完全可以反复的令x6=n,x10=-n,n只要是个实数就行
这样能穷举得尽?
module tridiagonalmatriximplicit nonecontains !追赶法 function tri(a,b,c,f,n)integer n,ireal:: a(2:n),b(n),c(1:n-1),d(n-1),e(n-1),f(n)real,target::x(n)real,pointer::tri(:)tri=>x(1:n) !数组指针 !追赶法的核心 d(1)=f(1)/b(1)e(1)=c(1)/b(1)do i=2,n-1e(i)=c(i)/(b(i)-a(i)*e(i-1))d(i)=(f(i)-a(i)*d(i-1))/(b(i)-a(i)*e(i-1))enddox(n)=(f(n)-a(n)*d(n-1))/(b(n)-a(n)*e(n-1))do i=n-1,1,-1x(i)=d(i)-e(i)*x(i+1)end doreturnend functionend module!******************************************* !******************************************* program main !主函数 use tridiagonalmatriximplicit noneinteger,parameter::n=3 !变量x的个数 integer i,sreal:: a(2:n),b(n),c(1:n-1),f(n)a=(/2,3/)b=(/1,2,3/)c=(/2,3/) f=(/1,2,3/)write(*,*) 'written by chenke'write(*,*) 'The roots is:'write(*,*) tri(a,b,c,f,n)end
//2x1+x2=1,x1+3x2+x3=2,x2+x3+x4=2,2x3+x4=0#include "stdio.h"
#include "math.h"
#define MAXNUM 10 //变量数量
int array[MAXNUM][MAXNUM]={{2,1,0,0,1},{1,3,1,0,2},{0,1,1,1,2},{0,0,2,1,0}};
int unuse_result[MAXNUM];
int GaussFun(int equ,int var,int result[])
{
int i,j,k,col,num1,num2;
int max_r,ta,tb,gcdtemp,lcmtemp;
int temp,unuse_x_num,unuse_index;
col=0;
for (k=0;k<equ && col<var;k++,col++)
{
max_r=k;
for (i=k+1;i<equ;i++)
{
if (abs(array[i][col])>abs(array[max_r][col]))
{
max_r=i;
}
}
if (max_r!=k)
{
for (j=k;j<var+1;j++)
{
temp=array[k][j];
array[k][j]=array[max_r][j];
array[max_r][j]=temp;
}
}
if (array[k][col]==0)
{
k--;
continue;
}
for (i=k+1;i<equ;i++)
{
if (array[i][col]!=0)
{
num1=abs(array[i][col]);
num2=abs(array[k][col]);
while (num2!=0)
{
temp=num2;
num2=num1%num2;
num1=temp;
}
gcdtemp=num1;
lcmtemp=(abs(array[i][col])*abs(array[k][col]))/gcdtemp;
ta=lcmtemp/abs(array[i][col]);
tb=lcmtemp/abs(array[k][col]);
if (array[i][col]*array[k][col]<0)
{
tb=-tb;
}
for (j=col;j<var+1;j++)
{
array[i][j]=array[i][j]*ta-array[k][j]*tb;
}
}
}
}
for (i=k;i<equ;i++)
{
if (array[i][col]!=0)
{
return -1;
}
}
if (k<var)
{
for (i=k-1;i>=0;i--)
{
unuse_x_num=0;
for (j=0;j<var;j++)
{
if (array[i][j]!=0 && unuse_result[j])
{
unuse_x_num++;
unuse_index=j;
}
}
if (unuse_x_num>1)
{
continue;
}
temp=array[i][var];
for (j=0;j<var;j++)
{
if (array[i][j]!=0 && j!=unuse_index)
{
temp=array[i][j]*result[j];
}
}
result[unuse_index]=temp/array[i][unuse_index];
unuse_result[unuse_index]=0;
}
return var-k;
}
for (i=var-1;i>=0;i--)
{
temp=array[i][var];
for (j=i+1;j<var;j++)
{
if (array[i][j]!=0)
{
temp-=array[i][j]*result[j];
}
}
if (temp%array[i][i]!=0)
{
return -2;
}
result[i]=temp/array[i][i];
}
return 0;
}
void main()
{
int i,type;
int equnum,varnum;
int result[MAXNUM];
equnum=3;
varnum=3;
type=GaussFun(equnum,varnum,result);
if (type==-1)
{
printf("该方程无解!\n");
}
else if(type==-2)
{
printf("该方程有浮点数解,无整数解!\n");
}
else if (type>0)
{
printf("该方程有无穷多个解!自由变量数量为%d\n",type);
for (i=0;i<varnum;i++)
{
if (unuse_result[i])
{
printf("x%d 是不确定的\n",i+1);
}
else
{
printf("x%d:%d\n",i+1,result[i]);
}
}
}
else
{
printf("该方程的解为:\n");
for (i=0;i<varnum;i++)
{
printf("x%d=%d\n",i+1,result[i]);
}
}
}
C语言怎么给追赶法编程序
1、追赶法是针对系数矩阵为三对角阵的方程组,因此是一种特殊的方程组.此方法效率较高,不过不适用于一般的线性方程组。Gauss消去法是针对一般的线性方程组,与线性代数中的初等变换解线性方程组方法类似。2、例程:include<stdio.h>#define n 4void main(){ int i; float a[n],b[n],c[n],d[...
求c语言编程用追赶法求解三对角方程组2x1+x2=1,x1+3x2+x3=2,x2+x3+...
\/\/2x1+x2=1,x1+3x2+x3=2,x2+x3+x4=2,2x3+x4=0 include "stdio.h"include "math.h"define MAXNUM 10 \/\/变量数量 int array[MAXNUM][MAXNUM]={{2,1,0,0,1},{1,3,1,0,2},{0,1,1,1,2},{0,0,2,1,0}};int unuse_result[MAXNUM];int GaussFun(int equ,int var,...
c语言解线性方程组的编程题 【做的好会多给分】
以下算法的适用条件:A的各阶主子式不为零 另外还可以采用 直接法:消元法:Gauss-Jordan消元法,分解法:Dolittle分解 (我用的是Courant分解法),追赶法,对称正定矩阵的LDL‘分解 --- 迭代法:Jacobi迭代 Gauss-Seidel迭代 松弛迭代 --- 你上网可以搜索一下,或者看看数值计算方面的书 OK, 你看...
用C语言将以下几种算法实现:埃尔米特插值 复合辛普森公式 直接三角分解...
这是复合辛普森公式的C实现,需要两个积分,注册就可以,其余的我正在找
在matlab源程序中如何直接跳过某些语句执行下面的语句啊?用什么...
跳出每一步循环后面的部分进入下一次循环要用continue。matlab没有goto。即使是C,goto也是不被推荐的。标准的顺序程序结构是完全可以避免goto的。哦,原来是这个意思啊。想跳过的那些行,全部选上,然后按ctrl+r.就全部注释掉了,颜色变绿。想恢复,选中它们,再按ctrl+t,反注释。
C语言算法速查手册的目录
5.1.3 [算法38] 求解复系数方程组的全选主元高斯-约当消去法 1635.1.4 [算法39] 求解实系数方程组的全选主元高斯-约当消去法 1685.1.5 [算法40] 求解大型稀疏系数矩阵方程组的高斯-约当消去法 1715.1.6 [算法41] 求解三对角线方程组的追赶法 1745.1.7 [算法42] 求解带型方程组的方法 1765.1.8 【实例...
Akima 插值和样条插值的C语言源代码,要有注释。
void cal_m(int n){ \/\/用追赶法求解出弯矩向量M…… float B[MAX]; B[0] = c[0] \/ 2; for(int i = 1; i < n; i++) B[i] = c[i] \/ (2 - a[i]*B[i-1]); fxym[0] = fxym[0] \/ 2; for(i = 1; i <= n; i++) fxym[i] = (fxym[i] - a[i]*fxym[i-...
matlab作为第四代计算机语言 其循环语句有什么改进
具有 FORTRAN和C等高级语言知识的读者可能已经注意到,如果用FORTRAN或C语言去编写程序,尤其当涉及矩阵运算和画图时,编程会很麻烦。例如,如果用户想求解一个线性代数方程,就得编写一个程序块读入数据,然后再使用一种求解线性方程的算法(例如追赶法)编写一个程序块来求解方程,最后再输出计算结果。在...
MATLAB是什么?
可以说,用MATLAB进行科技开发是站在专家的肩膀上。 具有FORTRAN和C等高级语言知识的读者可能已经注意到,如果用FORTRAN或C语言去编写程序,尤其当涉及矩阵运算和画图时,编程会很麻烦。例如,如果用户想求解一个线性代数方程,就得编写一个程序块读入数据,然后再使用一种求解线性方程的算法(例如追赶法)编写一个程序块来...
MATLAB是什么???
可以说,用MATLAB进行科技开发是站在专家的肩膀上。 具有FORTRAN和C等高级语言知识的读者可能已经注意到,如果用FORTRAN或C语言去编写程序,尤其当涉及矩阵运算和画图时,编程会很麻烦。例如,如果用户想求解一个线性代数方程,就得编写一个程序块读入数据,然后再使用一种求解线性方程的算法(例如追赶法)编写一个程序块来...
范差摩罗: //2x1+x2=1,x1+3x2+x3=2,x2+x3+x4=2,2x3+x4=0#include "stdio.h"#include "math.h"#define MAXNUM...
疏勒县19861971803: C语言怎么给追赶法编程序 - ?
范差摩罗: #include#include#include using namespace std; const int n=4; //n为方程组系数矩阵的阶数 float b[n+1]; //b[]为三对角系数矩阵的对角元素,b[0]不用 float c[n]; //c[]为三对角系数矩阵的上对角元素,c[0]不用 float a[n]; //a[]为三对角系数矩阵的下对角...
疏勒县19861971803: 用追赶法求解三对角方程组 - ?
范差摩罗: module tridiagonalmatriximplicit nonecontains !追赶法 function tri(a,b,c,f,n)integer n,ireal:: a(2:n),b(n),c(1:n-1),d(n-1),e(n-1),f(n)real,target::x(n)real,pointer::tri(:)tri=>x(1:n) !数组指针 !追赶法的核心 d(1)=f(1)/b(1)e(1)=c(1)/b(1)do i=2,n-1e(i)=c(i)/(b...
疏勒县19861971803: 用matalb编写程序,用追赶法求解三对角线性方程组: - ?
范差摩罗: function x=Trid(a,b,c,d) % 追赶法求解三对角的线性方程组 Ax=d % b为主对角线元素,a,c分别为次对角线元素,d为右端项 % A=[ b1 c1 % a2 b2 c2 % ...... % a_(n-1) b_(n-1) c_(n-1) % a_(n) b_(n) ] % b=[b1...b_(n)] % a=[0 a2...a_(n)] % c=[c1...c_(n...
疏勒县19861971803: 追赶法的C++程序怎么编写啊?好的程序另给悬赏分. - ?
范差摩罗: 我这个学期学数值分析刚学过追赶法,也编写过,代码如下:(有什么不足之处,敬请各位指教) //用追赶法求线性方程组的解 #include"iostream" using namespace std; #include"iomanip" int main() { float a[100],b[100],c[100],d[100],x[100]; ...
疏勒县19861971803: 什么是追赶法,其通用程序是什么? - ?
范差摩罗: function x=zhuiganfa %首先说明:追赶法是适用于三对角矩阵的线性方程组求解的方法,并不适用于其他类型矩阵. %定义三对角矩阵A的各组成单元.方程为Ax=d % b为A的对角线元素(1~n),a为-1对角线元素(2~n),c为+1对角线元素(1...
疏勒县19861971803: 怎么用追赶法解线性方程组 - ?
范差摩罗: 追赶法解三对角方程组就是把Gauss消去法用到三对角矩阵上得到的特殊形式,所以你只要知道Gauss消去法就行了
疏勒县19861971803: 用追赶法解方程组! - ?
范差摩罗: 其中, 是以 为自变量的一元函数.边界条件为: 真解为: . 1. 网格剖分: (这种网格称为一致网格(Uniform Mesh),我们在后面将介绍Shishkin网格和Bakhvolov网格,编程时请使用后两种网格.) 2. 3. (后面将介绍其他离散格式) 4. 离散后变成线性代数方程组AU=b.系数矩阵A为三对角矩阵,可以用追赶法、消元法、超松弛迭代法(SOR)或者其他方法求解线性代数方程组.
疏勒县19861971803: 如果 A 是严格对角优势的三对角矩阵,则用追赶法可解以 A 为系数矩阵...?
范差摩罗: 实现追赶法求解三对角矩阵方程组的C++源代码.doc 网盘下载: