雅克比迭代法與高斯塞德爾迭代法求解方程組(C語言)
分別用雅可比 迭代法與高斯塞德爾迭代法解下列方程組:
雅可比迭代法:
#include<stdio.h>
#include<math.h>
#define eps 1e-6
#define max 100
//雅可比迭代法
void jacobi(float *a,int n,float x[])
{
int i,j,k=0;
float epsilon,s;
float *y=new float[n];
for(i=0;i<n;i++)x[i]=0;
while(1)
{
epsilon=0;
k++;
for (i=0;i<n;i++)
{
s=0;
for(j=0;j<n;j++)
{
if(j==i)continue;
s+=*(a+i*(n+1)+j)*x[j];
}
y[i]=(*(a+i*(n+1)+n)-s)/(*(a+i*(n+1)+i));
epsilon+=fabs(y[i]-x[i]);
}
for(i=0;i<n;i++)x[i]=y[i];
if (epsilon<eps)
{
printf("%d\n",k);return;}
if(k>=max)
{printf("fasan");return;}
}
delete y;
}
void main()
{
int i;
float a[4][5]={10,-1,2,0,-11,
0,8,-1,3,-11,
2,-1,10,0,6,
-1,3,-1,11,25};
float x[4];
jacobi(a[0],4,x);
for(i=0;i<4;i++)printf("x[%d]=%f\n",i+1,x[i]);
float b[9][10]={31,-13,0,0,0,-10,0,0,0,-15,
-13,35,-9,0,-11,0,0,0,0,27,
0,-9,31,-10,0,0,0,0,0,-23,
0,0,-10,79,-30,0,0,0,-9,0,
0,0,0,-30,57,-7,0,-5,0,-20,
0,0,0,0,7,47,-30,0,0,12,
0,0,0,0,0,-30,41,0,0,-7,
0,0,0,0,-5,0,0,27,-2,7,
0,0,0,0,0,0,0,-2,29,-10};
float xx[9];
jacobi(b[0],9,xx);
for(i=0;i<9;i++)printf("xx[%d]=%f\n",i+1,xx[i]);
}
高斯賽德爾迭代法:
#include<stdio.h>
#include<math.h>
#define N 500
//高斯塞德爾
void gauss(float *a,int n,float x[])
{
int i,j,k=1;
float d,dx,eps;
for(i=0;i<=n-1;i++)x[i]=0.0;
while(1)
{
eps=0;
for(i=0;i<=n-1;i++)
{
d=0;
for(j=0;j<=n-1;j++)
{
if(j==i)continue;
d+=*(a+i*(n+1)+j)*x[j];
}
dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i));
eps+=fabs(dx-x[i]);
x[i]=dx;
}
if(eps<1e-6)
{printf("%d\n",k);return;}
if(k>N)
{
printf("fasan\n");
return;
}
k++;
}
}
void main()
{
int i;
float a[4][5]={10,-1,2,0,-11,
0,8,-1,3,-11,
2,-1,10,0,6,
-1,3,-1,11,25};
float x[4];
float b[9][10]={31,-13,0,0,0,-10,0,0,0,-15,
-13,35,-9,0,-11,0,0,0,0,27,
0,-9,31,-10,0,0,0,0,0,-23,
0,0,-10,79,-30,0,0,0,-9,0,
0,0,0,-30,57,-7,0,-5,0,-20,
0,0,0,0,7,47,-30,0,0,12,
0,0,0,0,0,-30,41,0,0,-7,
0,0,0,0,-5,0,0,27,-2,7,
0,0,0,0,0,0,0,-2,29,-10};
float xx[9];
gauss(a[0],4,x);
for(i=0;i<4;i++)printf("x[%d]=%f\n",i+1,x[i]);
gauss(b[0],9,xx);
for(i=0;i<9;i++)printf("xx[%d]=%f\n",i+1,xx[i]);
}
相關推薦
雅克比迭代法與高斯塞德爾迭代法求解方程組(C語言)
分別用雅可比 迭代法與高斯塞德爾迭代法解下列方程組: 雅可比迭代法: #include<stdio.h> #include<math.h> #define eps 1
10個重要的演算法C語言實現原始碼:拉格朗日,牛頓插值,高斯,龍貝格,牛頓迭代,牛頓-科特斯,雅克比,秦九昭,冪法,高斯塞德爾
(一)拉格朗日插值多項式 #include <stdio.h> #include <conio.h> #include <alloc.h> &n
高斯-塞德爾迭代法求解線性方程組解
高斯-塞德爾迭代法也是求解線性方程組解的一種方法,與雅可比不同之處在於,求解某個未知數的某代值時,直接使用上一未知數在該代的值。 C++程式碼如下: #include<stdio.h> #include<math.h> using namespa
【計算方法】雅可比迭代法和高斯-賽德爾迭代法求線性方程根
雅可比迭代法: //雅可比迭代法 void jacobi(float *a,int n,float x[]) { int i,j,k=0; float epsilon,s;
數值分析中的高斯—塞德爾迭代演算法
本例是用java語言實現的,適合於學習數值分析課程的同學借鑑; package c; import java.util.Scanner; public class Demo { public static void main(String []args) {
追趕法求解方程組(C語言)
編寫用追趕法解三對角線方程組的程式,並解下列方程組: #include<stdio.h> #include<math.h> void main() { int
列主元消去法求解方程組(C語言)
用列主元消去法解下列方程組: #include<stdio.h> #include<math.h> void main() { void zhu(float *,int
數值分析(三):C++實現線性方程組的高斯-賽德爾迭代法
線性方程組的直接解法之後,就輪到迭代解法了,直接解法針對的是低階稠密矩陣,資料量較少,而工程上有更多的是高階係數矩陣,使用迭代法效率更高,佔用的空間較小。 迭代法的最基本思想就是由初始條件,比如說初始解向量隨便列舉一個,就0向量也行,然後進行迭代,k到k+1,一步一步從k=1開始去逼近真實解
基於matlab的Guass-Seidel(高斯--賽德爾) 迭代法求解線性方程組
演算法解釋見此:https://blog.csdn.net/zengxyuyu/article/details/53056453 原始碼在此: main.m clear clc A = [8 -3 2;4 11 -1;6 3 12]; b = [20;33;36]; [
高斯-賽德爾迭代法
b.txt -10.01 9.05 0.12 1.43 1.22 -4.33 2.67 3.22 1.25 -3.69 -12.37 0.58 #include <stdio.h> #define M 3 main() { FILE *f; d
使用python實現高斯-賽德爾迭代法的簡單運算
今天傳熱學老師說到高斯-賽德爾迭代法,我就想拿python寫一個小程式來計算。 在網上找例子,發現居然沒有人拿python寫,都是C / C++ / Matlab的。沒有參考答案,真是寫得我焦頭爛額啊。 截圖: #!/usr/bin/env python # -*
高斯-賽德爾(guass-seidel)迭代法 C語言實現
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #in
斐波那契數列的迭代實現與遞迴實現(c語言)
遞迴實現 #include<stdio.h> int Fib(int n){ // 自定義函式 if(n<0) return -1; else if(n==0) return 0; else if(n==1)
迭代法求解線性方程組(C++實現)
本系列是數值分析相關演算法的文章,這次用迭代法求解線性方程組,不同於上次用高斯消元法之類的求解。迭代法對於稀疏矩陣方程組的運算,會大大提高。而如果用高斯相關的演算法求解,會浪費大量資源計算無用的東西,所以有必要研究此演算法。 本文章主要使用了3個演算法,分別是
【最全】經典排序算法(C語言)
排好序 而不是 lock wap 循環 而且 -s 關鍵字 void 本文章包括所有基本排序算法(和其中一些算法的改進算法): 直接插入排序、希爾排序、直接選擇排序、堆排序、冒泡排序、快速排序、歸並排序、基數排序。 算法復雜度比較: 算法分類 一、直接插入排序 一個
指標與二級指標筆記(C語言)
一級指標 存放地址的變數稱為指標變數,指標變數是一種特殊的變數。 一般變數存放的是資料本身,指標變數存放的是資料的地址。 int a = 1 ; //普通變數 int *p = NULL ; //一個指向空的int型別的指標變數 p = &a;
氣泡排序法(C語言)
常用的排序方法有氣泡排序法,選擇排序法,插入排序法以及希爾排序法等。本文著重講解如何利用C程式碼,實現氣泡排序。 首先,要了解什麼是氣泡排序。氣泡排序是常用的一種排序方法,其基本方法就是逐次比較。即一次比較兩個數,若它們的順序錯誤,則它們交換;重複進行,直到沒有需要交換為止。 以升序排序為例: 1、比
演算法7-15:迪傑斯特拉最短路徑演算法(c語言)
題目描述 在帶權有向圖G中,給定一個源點v,求從v到G中的其餘各頂點的最短路徑問題,叫做單源點的最短路徑問題。 在常用的單源點最短路徑演算法中,迪傑斯特拉演算法是最為常用的一種,是一種按照路徑長度遞增的次序產生最短路徑的演算法。 可將迪傑斯特拉演算法描述如下: 在本題中,讀入
冒泡法排序(C語言)
#include <stdio.h> #include <stdlib.h> int main() { int a[10],t; printf("input 10 numbers:\n"); for(int i=0;i<10;i++){ scanf(
Linux學習筆記(演算法與資料結構)之 佇列程式碼(C語言)
1、程式碼在VS2010的C++編譯器中編譯通過,可能有極少部分語法不符合C89標準;bool型別無法使用,用int代替 2、由於VS配置問題,沒有分.c和.h檔案書寫;如果要分,最好將Create_Node和Destory_Node加上static關鍵字修飾,他們只會在所