?? jacobi.cpp
字號:
///<summary>
///利用雅可比(Jocabi)迭代法解線性方程組
///<summary>
using System;
namespace Interetive
{
/// <summary>
/// Jacobi 的摘要說明。
/// </summary>
class Jacobi
{
private int n;
private double[,] Parameters;
private double[,] Value;
private double Precision;
private double[] MatrixB;
/// <summary>
/// 輸入系數矩陣
/// </summary>
private void Initialize()
{
Console.WriteLine("請輸入系數矩陣的維數:");
n=int.Parse(Console.ReadLine());
Value=new Double[2,n];
Parameters=new double[n,n];
MatrixB=new double[n];
for(int i=0;i<n;i++)
{
Console.WriteLine("請輸入第"+(i+1)+"維系數");
for(int j=0;j<n;j++)
{
Console.Write("a("+(j+1)+")=");
Parameters[i,i]=double.Parse(Console.ReadLine());
}
}
Console.WriteLine("請輸入B矩陣:");
for(int i=0;i<n;i++)
{
Console.Write("b("+(i+1)+")=");
MatrixB[i]=double.Parse(Console.ReadLine());
}
}
/// <summary>
/// 檢查系數矩陣是否收斂
/// </summary>
/// <returns></returns>
private bool IsConvergence()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(Parameters[i,i]<=Parameters[i,j])
{
return false;
}
}
}
return true;
}
/// <summary>
/// 輸入初值
/// </summary>
private void SetValue()
{
for(int i=0;i<n;i++)
{
Console.Write("x("+i+")=");
Value[0,i]=double.Parse(Console.ReadLine());
Value[1,i]=0.0;
}
Console.WriteLine("請輸入精度要求:");
Precision=double.Parse(Console.ReadLine());
}
/// <summary>
/// 檢查迭代是否已滿足精度要求
/// </summary>
/// <returns></returns>
private bool IsPrecision()
{
for(int i=0;i<n;i++)
{
if(Math.Abs(Value[0,i]-Value[1,i])>Precision)
{
return false;
}
}
return true;
}
/// <summary>
/// 迭代過程
/// </summary>
/// <returns></returns>
private void Iterate()
{
for(int i=0;i<n;i++)
{
if(IsPrecision()==false)
{
for(int j=0;j<n;j++)
{
if(j!=i)
{
Value[i%2,i]+=-Parameters[i,j]/Parameters[i,i]*Value[(i+1)%2,j];
}
}
Value[i%2,i]+=MatrixB[i];
}
}
}
/// <summary>
/// 計算Jacobi迭代結果
/// </summary>
/// <returns></returns>
private void calculate()
{
if(IsConvergence()==true)
{
Iterate();
}
else
{
Console.WriteLine("您輸入的方程組的Jacobi迭代式不收斂!");
}
}
/// <summary>
/// 返回迭代結果
/// </summary>
private void Result()
{
if(IsConvergence()==true)
{
for(int i=0;i<n;i++)
{
Console.WriteLine("x("+i+")="+Value[1,i]);
}
}
}
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Jacobi Jacobi1=new Jacobi();
Jacobi1.Initialize();
Jacobi1.calculate();
Jacobi1.Result();
Console.Read();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -