• 大小: 6KB
    文件类型: .cpp
    金币: 2
    下载: 0 次
    发布日期: 2024-01-05
  • 语言: C/C++
  • 标签: C/C++程序  消去法  

资源简介

高斯消去法是求解线性方程组的一种实用方法,绝大多数以matlab程序居多,虽然有部分C/C++程序,但是他们都有一些不足之处。本程序采用C/C++语言,实现高斯消去法,输入输出结果均可以分数和浮点数的形式展现,满足更多人的需求。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define debug “output for debug\n“
#define pi (acos(-1.0))
#define eps (1e-6)
#define inf (1<<28)
#define sqr(x) (x) * (x)
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef unsigned long long ULL;

//结构体构造分数
struct node
{
    char sig;//正负号
    long long molden;//分子分母
};

//最大公约数
long long gcd(long long mlong long n)
{
    return (m==0)?n:gcd(n%m m);
}

//重载运算符+
node operator +(node anode b)
{
    long long temp;
    int fa=0fb=0;
    node tp;
    fa=(a.sig==‘+‘)?1:-1;
    fb=(b.sig==‘+‘)?1:-1;
    tp.mol=fa*a.mol*b.den+fb*a.den*b.mol;
    tp.den=a.den*b.den;
    tp.sig=(tp.mol<0)?‘-‘:‘+‘;
    tp.mol=abs(tp.mol);
    temp=gcd(tp.moltp.den);
    tp.mol/=temp;
    tp.den/=temp;
    return tp;
}
//重载运算符-
node operator -(node anode b)
{
    long long temp;
    int fa=0fb=0;
    node tp;
    fa=(a.sig==‘+‘)?1:-1;
    fb=(b.sig==‘+‘)?1:-1;
    tp.mol=fa*a.mol*b.den-fb*a.den*b.mol;
    tp.den=a.den*b.den;
    tp.sig=(tp.mol<0)?‘-‘:‘+‘;
    tp.mol=abs(tp.mol);
    temp=gcd(tp.moltp.den);
    tp.mol/=temp;
    tp.den/=temp;
    return tp;
}
//重载运算符*
node operator *(node anode b)
{
    long long temp;
    int fa=0fb=0;
    node tp;
    fa=(a.sig==‘+‘)?1:-1;
    fb=(b.sig==‘+‘)?1:-1;
    tp.mol=fa*a.mol*fb*b.mol;
    tp.den=a.den*b.den;
    tp.sig=(tp.mol<0)?‘-‘:‘+‘;
    tp.mol=abs(tp.mol);
    temp=gcd(tp.moltp.den);
    tp.mol/=temp;
    tp.den/=temp;
    return tp;
}
//重载运算符/
node operator /(node anode b)
{
    long long temp;
    int fa=0fb=0;
    node tp;
    fa=(a.sig==‘+‘)?1:-1;
    fb=(b.sig==‘+‘)?1:-1;
    tp.mol=fa*a.mol*fb*b.den;
    tp.den=a.den*b.mol;
    tp.sig=(tp.mol<0)?‘-‘:‘+‘;
    tp.mol=abs(tp.mol);
    temp=gcd(tp.moltp.den);
    tp.mol/=temp;
    tp.den/=temp;
    return tp;
}

//高斯列主元消去法
void Gausselimpiv(int niint njnode a[][20])
{
    int ijkmaxi;
    node temp;
    for(k=1; k    {
        temp=a[k-1][k-1];
        maxi=k-1;
        for(i=k-1; i        {
            long long num=0ll;
            num=temp.mol*a[i][k-1].den-temp.den*a[i][k-1].mol;
            if(num<0)
            {
                temp=a[i][k-1];
                maxi=i;
            }
        }
        printf(“第%d次消元\n主元元素:“k);
        //printf(“a[%2d][%2d]=%c%5lld/%-5lld “maxik-1a[maxi][k-1].siga[maxi][k-1].mola[maxi][k-1].den);
        //printf(“≈%c%-lf\n“a[maxi][k-1].siga[maxi][k-1].mol*1.0/a[maxi][k-1].den);
        printf(“a[%d][%d]=%c%lld/%lld “maxik-1a[maxi][k-1].siga[maxi][k-1].mol

评论

共有 条评论