首页 > 编程语言 >可变阶数高斯消元算法-passcal-c shap-c语言

可变阶数高斯消元算法-passcal-c shap-c语言

时间:2024-07-29 19:28:17浏览次数:13  
标签:begin end passcal int shap ++ 元法 高斯消

高斯消元法在各种工程领域都有广泛的应用,尤其是在需要求解线性方程组的情况下。尽管高斯消元法在某些情况下可能不是最高效的算法,但它仍然是一个强大且通用的工具,对于许多工程问题来说是非常实用的。随着计算机性能的提高,高斯消元法在处理大规模问题时也变得更加可行。

高斯消元法是一种常用的数值线性代数算法,用于求解线性方程组。它在实际工程中有广泛的应用,特别是在涉及大量线性方程组求解的问题中。下面列举了一些高斯消元法在实际工程上的典型应用:

1 电路分析

电路理论:在电路分析中,通过基尔霍夫定律和欧姆定律建立的线性方程组可以通过高斯消元法求解,以计算电路中的电流和电压分布。

2 结构工程

结构力学:在结构分析中,如有限元方法,需要求解大量的线性方程组来计算结构在不同载荷下的响应。高斯消元法可用于求解节点位移和应力。

3 控制系统

控制系统设计:在控制系统的设计过程中,状态空间模型常常会涉及到线性方程组的求解,如求解状态方程中的状态向量。

4 化学工程

化学反应平衡:化学反应平衡问题可以通过线性方程组描述,高斯消元法可以帮助确定化学反应方程式的平衡条件和最优反应路径。

5 信号处理

滤波器设计:在设计数字滤波器时,高斯消元法可以用来求解滤波器系数,以满足特定的频率响应要求。

6 土木工程

结构稳定性分析:在土木工程中,高斯消元法可用于求解结构稳定性和强度问题中的线性方程组。

passcal语言高斯消元法源码:(工程实测可用)

function TForm1.gaosi(a: Matrix_va ):Aresult_result;

var

  n:Integer;

  k:Integer;

  i:Integer;

  j:Integer;

  t,s:Double;

  x:Aresult_result;

begin

  {以下为a值计算程序 结果存在x[i]中,矩阵存在a[i]中为9X9的矩阵}

   n:=8;

  for k:=1 to n-1 do

  begin

    for i:=k+1 to n do

    begin

      if abs(a[i][k])>abs(a[k][k]) then

      begin

        for j:=k to n+1 do

        begin

          t:=a[k][j];

          a[k][j]:=a[i][j];

          a[i][j]:=t;

        end;

      end;

    end;

    if abs(a[k,k])<1e-6 then

    begin

      //raise ERegError.Create('对不起,消元过程错误被迫退出。');

      Exit ;

    end

    else

    begin

      for i:=k+1 to n do

      begin

        a[i][k]:=a[i][k]/a[k][k];

        for j:=k+1 to n+1 do

          a[i][j]:=a[i][j]-a[k][j]*a[i][k];

      end;

    end;

  end;

  if abs(a[n][n])<1e-6 then

  begin

     Exit ;

     //raise ERegError.Create('对不起,消元过程错误被迫退出。');

  end

  else

  begin

     x[n]:=a[n][n+1]/a[n][n];

     for i:=n-1 downto 1 do

     begin

       s:=0;

       for j:=i+1 to n do

         s:=s+a[i][j]*x[j];

         x[i]:=(a[i][n+1]-s)/a[i][i];

     end;

  end;

     Result:=x;

  end;

{a值计算完毕}

c#版本高斯消元算法(未调试,需要的同学要自行调试):

public static double[] GaussElimination(double[,] a)

{

         int n = 8;

         double t, s;

         double[] x = new double[n];

         for (int k = 0; k < n - 1; k++)

         {

                   for (int i = k + 1; i < n; i++)

                   {

                            if (Math.Abs(a[i, k]) > Math.Abs(a[k, k]))

                            {

                                     for (int j = k; j <= n; j++)

                                     {

                                               t = a[k, j];

                                               a[k, j] = a[i, j];

                                               a[i, j] = t;

                                     }

                            }

                   }

                   if (Math.Abs(a[k, k]) < 1e-6)

                   {

                            throw new Exception("消除过程中出现错误,被迫退出。");

                   }

                   else

                   {

                            for (int i = k + 1; i < n; i++)

                            {

                                     a[i, k] /= a[k, k];

                                     for (int j = k + 1; j <= n; j++)

                                     {

                                               a[i, j] -= a[k, j] * a[i, k];

                                     }

                            }

                   }

         }

         if (Math.Abs(a[n - 1, n - 1]) < 1e-6)

         {

                   throw new Exception("消除过程中出现错误,被迫退出。");

         }

         else

         {

                   x[n - 1] = a[n - 1, n] / a[n - 1, n - 1];

                   for (int i = n - 2; i >= 0; i--)

                   {

                            s = 0;

                            for (int j = i + 1; j < n; j++)

                            {

                                     s += a[i, j] * x[j];

                            }

                            x[i] = (a[i, n] - s) / a[i, i];

                   }

         }

         return x;

}

c语言版高斯消元算法(未调试 需要的同学要自行调试):

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define N 9

typedef double Matrix[N][N+1];

typedef double AResult[N];

int gaussElimination(Matrix a, AResult *x) {

    int n = 8;

    int k, i, j;

    double t, s;

    for (k = 0; k < n - 1; k++) {

        for (i = k + 1; i < n; i++) {

            if (fabs(a[i][k]) > fabs(a[k][k])) {

                for (j = k; j <= n; j++) {

                    t = a[k][j];

                    a[k][j] = a[i][j];

                    a[i][j] = t;

                }

            }

        }

        if (fabs(a[k][k]) < 1e-6) {

            //printf("消元过程错误被迫退出。\n");

            return -1;

        } else {

            for (i = k + 1; i < n; i++) {

                a[i][k] /= a[k][k];

                for (j = k + 1; j <= n; j++) {

                    a[i][j] -= a[k][j] * a[i][k];

                }

            }

        }

    }

    if (fabs(a[n - 1][n - 1]) < 1e-6) {

            //printf("消元过程错误被迫退出。\n");

            return -1;

    } else {

        (*x)[n - 1] = a[n - 1][n] / a[n - 1][n - 1];

        for (i = n - 2; i >= 0; i--) {

            s = 0;

            for (j = i + 1; j < n; j++) {

                s += a[i][j] * (*x)[j];

            }

            (*x)[i] = (a[i][n] - s) / a[i][i];

        }

    }

}

标签:begin,end,passcal,int,shap,++,元法,高斯消
From: https://blog.csdn.net/weixin_44159326/article/details/140774848

相关文章

  • ValueError:无法识别的关键字参数传递给 LSTM:Keras 中的 {'batch_input_shape'}
    我正在尝试在TensorFlow中使用Keras构建和训练有状态LSTM模型,但在指定batch_input_shape参数时不断遇到ValueError。错误消息:ValueError:UnrecognizedkeywordargumentspassedtoLSTM:{'batch_input_shape':(1,1,14)}这是我的代码的简化版本:import......
  • 线性模型的 SHAP 值与手动计算的值不同
    我训练一个线性模型来预测房价,然后我将手动计算的Shapley值与SHAP库返回的值进行比较,它们略有不同。我的理解是,对于线性模型,Shapley值是给定的通过:coeff*featuresforobs-coeffs*mean(featuresintrainingset)或者如SHAP文档中所述:coef[i]*......
  • 随机森林+shap算法进行特征贡献性分析-完整代码数据可直接运行
    直接看结果:    代码:importosimportnumpyasnpfromcollectionsimportCounterimportrandomimportpandasaspd#导入必要的库importnumpyasnpimportpandasaspdfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimpo......
  • C# 打印菱形的程序(Program to print the Diamond Shape)
     给定一个数字n,编写一个程序来打印一个有2n行的菱形。例子://C#Codetoprint //thediamondshapeusingSystem;classGFG {     //Printsdiamondpattern  //with2nrows  staticvoidprintDiamond(intn)  {    ints......
  • JAVA 打印菱形的程序(Program to print the Diamond Shape)
    给定一个数字n,编写一个程序来打印一个有2n行的菱形。例子://JAVACodetoprint //thediamondshapeimportjava.util.*;classGFG{     //Printsdiamondpattern  //with2nrows  staticvoidprintDiamond(intn)  {    i......
  • C++ 打印菱形的程序(Program to print the Diamond Shape)
    给定一个数字n,编写一个程序来打印一个有2n行的菱形。例子:  //C++programtoprintdiamondshape//with2nrows #include<bits/stdc++.h>usingnamespacestd;//Printsdiamondpatternwith2nrows voidprintDiamond(intn) {   intspace=n......
  • TopoDS_Shape的拷贝
    TopoDS_Shape的拷贝有两种方式1)TopoDS_ShapenewShape=oldShape;2)BRepBuilderAPI_Copytool;tool.perform(oldShape,true,false);//!"false"sinceI'mnotinterestedincopyingthetriangulationnewShape=tool.Shape();两者的不同在于shape数据的拷贝深度,TopoDS......
  • 高斯消元
    高斯消元高斯消元法通常用于求解如下的\(n\)元线性方程组\[\begin{cases}a_{1,1}x_1+a_{2,2}x_2+\cdots+a_{1,n}x_n=b_1\\a_{2,1}x_1+a_{2,2}x_2+\cdots+a_{2,n}x_n=b_2\\\cdots\\a_{n,1}x_1+a_{n,2}x_2+\cdots+a_{n,n}......
  • 高斯消元
    #include<iostream>#include<cassert>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<cmath>#include<queue>#include<set>#include<cli......
  • Gale-Shapley 算法
    挺简单的一个算法,用于解决稳定婚姻问题。稳定婚姻问题:一些男人和一些女人,每个男人都有对女人的排名,每个女人亦有,求一组最优秀的匹配。考虑维护一个落单男人的队列,初始全部落单。每次取出队头并按该男人的眼光枚举每一个女人进行配对,如果这个女人落单,或者这个女人目前对象劣于当......