概述
简介
高斯-赛德尔迭代法是解
线性方程组的常用迭代法之一,设线性方程组为
高斯-赛德尔迭代法的迭代公式为
当然,此处假定
,在很多情况下,它比简单迭代法收敛快,它和简单迭代法的不同点在于计算
时,利用了刚刚迭代出的
迭代公式的实现
public void Calcu6()
{
int count1 = 0, count2 = 0;
while (true)
{
for (int i = 0; i < n; i++)
{
double sum1 = 0,sum2=0;
for (int j = i+1; j <n; j++)
{
sum1 += a[i, j] * x[j];
}
for(int j=0;j<i-1;j++)
{
sum2 += a[i, j] * x2[j];
}
x[i] = (a[i, n] - sum2-sum1) / a[i, i];
if (Math.Abs(x2[i] - x[i]) < e)
count2++;
}
count1++;
if (count1 > 10000)
{ Console.WriteLine("迭代发散!!!"); break; }
if (count2 == n)
{ Console.WriteLine("迭代次数:{0}", count2); break; }
}
}
源程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Gauss_Seidel迭代
{
class Seidel
{
int n;
public int N
{
get { return n; }
set { n = value; }
}
double[,] a;
public double[,] A
{
get { return a; }
set { a = value; }
}
double[] x;
public double[] X
{
get { return x; }
set { x = value; }
}
double e = 0.00001;
public double E
{
get { return e; }
set { e = value; }
}
private double[] x2;
public double[] X2
{
get { return x2; }
set { x2 = value; }
}
public void Input()
{
Console.WriteLine("请输入阶数:");
n = Convert.ToInt32(Console.ReadLine());
a = new double[n, n + 1];
x = new double[n];
x2 = new double[N + 1];
for (int i = 0; i < N; i++)
{
x2[i]=x[i];
}
Console.WriteLine("请输入各行系数(','或' '隔开):");
for (int i = 0; i < n; i++)
{
string s = Console.ReadLine();
string[] ss = s.Split(' ', ',');
for (int j = 0; j < n + 1; j++)
{
a[i, j] = Convert.ToDouble(ss[j]);
}
}
}
public void Calcu6()
{
int count1 = 0, count2 = 0;
while (true)
{
for (int i = 0; i < n; i++)
{
double sum1 = 0,sum2=0;
for (int j = i+1; j <n; j++)
{
sum1 += a[i, j] * x[j];
}
for(int j=0;j<i-1;j++)
{
sum2 += a[i, j] * x2[j];
}
x[i] = (a[i, n] - sum2-sum1) / a[i, i];
if (Math.Abs(x2[i] - x[i]) < e)
count2++;
}
count1++;
if (count1 > 10000)
{ Console.WriteLine("迭代发散!!!"); break; }
if (count2 == n)
{ Console.WriteLine("迭代次数:{0}", count2); break; }
}
}
public void Output()
{
Console.WriteLine("方程系数为:");
for (int i = 0; i < n; i++)
{
string s = null;
for (int j = 0; j < n + 1; j++)
{
s += string.Format("{0,8:f2}", a[i, j]);
}
Console.WriteLine(s);
}
}
public void OutputX()
{
Console.WriteLine("n方程组的解是:");
for (int i = 0; i < n; i++)
{
Console.WriteLine("x{0}={1}", i + 1, x[i]);
}
}
}
class Program
{
static void Main(string[] args)
{
Seidel abc = new Seidel();
abc.Input();
abc.Output();
abc.Calcu6();
abc.OutputX();
}
}
}
运行结果:
谢谢!!!
最后
以上就是等待流沙为你收集整理的C#--解方程组之Seidel迭代法的全部内容,希望文章能够帮你解决C#--解方程组之Seidel迭代法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复