摘要:本文主要向大家介绍了C#编程解方程组之Jacobi法实例,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。
本文主要向大家介绍了C#编程解方程组之Jacobi法实例,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。
解方程组之Jacobi法
迭代过程首先将方程组中的系数矩阵A分解成三部分,即:A = L+D+U,如图1所示,其中D为对角阵,L为下三角矩阵,U为上三角矩阵。之后确定迭代格式,X^(k+1) = B*X^(k) +f ,(这里^表示的是上标,括号内数字即迭代次数),如图2所示,其中B称为迭代矩阵,雅克比迭代法中一般记为J。(k = 0,1,......)再选取初始迭代向量X^(0),开始逐次迭代。核心部分,迭代实现:
public void Calcu5()
{
int count1 = 0, count2 = 0;
while(true)
{
for(int i=0;i<n;i++)
{
double sum = 0;
for(int j=0;j<n;j++)
{
if(j!=i)
{
sum += a[i, j] * x[j];
}
}
x2[i] = (a[i, n] - sum) / 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; }
for(int i=0;i<n;i++)
{ x[i] = x2[i]; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Jacobi迭代
{
class Jacobi
{
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++)
{
X[i] = 0;
}
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 Calcu5()
{
int count1 = 0, count2 = 0;
while(true)
{
for(int i=0;i<n;i++)
{
double sum = 0;
for(int j=0;j<n;j++)
{
if(j!=i)
{
sum += a[i, j] * x[j];
}
}
x2[i] = (a[i, n] - sum) / 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; }
for(int i=0;i<n;i++)
{ x[i] = x2[i]; }
}
}
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)
{
Jacobi abc = new Jacobi();
abc.Input();
abc.Output();
abc.Calcu5();
abc.OutputX();
}
}
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号