程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 二元一次方程參數求解,

C# 二元一次方程參數求解,

編輯:C#入門知識

C# 二元一次方程參數求解,


本文記錄了關於求直線斜率及縱截距值的簡單方法,只是簡單的記錄下求解思路,最終還需根據具體項目進行優化。

設直線方程式為:y=kx+b

編程思想:

1、代入y1與x1的值,得到:y1=kx1+b

2、代入y2與x2的值,得到:y2=kx2+b       

3、首先算出一個系數m=kx1 / kx2 或 m=kx2 / kx1

4、根據第三步,將 y1=kx1+b 或 y2=kx2+b 乘以系數m,使 kx1==kx2 ,注意 kx1與kx2不能為0       

4、將2個函數相減,例如:my2-my1=mb-b 即 m(y2-y1)=(m-1)b      

5、算出縱截距b=(m(y2-y1))/(m-1) 注意:m不能為1 同時注意浮點數四捨五入問題       

6、將b值y1=kx1+b中,求出斜率k值

 

示例代碼:

using System;

namespace Demo
{   
    class Program
    {
        private static readonly int _decimaldigits = 2;//小數位數保留2位

        /// <summary>
        /// 計算斜率k及縱截距b值
        /// </summary>
        /// <param name="x1">坐標點x1</param>
        /// <param name="x2">坐標點x2</param>
        /// <param name="y1">坐標點y1</param>
        /// <param name="y2">坐標點y2</param>
        /// <param name="kvalue">斜率k值</param>
        /// <param name="bvalue">縱截距b值</param>
        private static void Calculate(float x1, float x2, float y1, float y2, ref float kvalue, ref float bvalue)//求方程y=kx+b 系數 k ,b
        {
            float coefficient = 1;//系數值
            try
            {
                if ((x1 == 0) || (x2 == 0) || (x1 == x2)) return; //排除為零的情況以及x1,x2相等時無法運算的情況
                //if (y1 == y2) return; //根據具體情況而定,如何這兩個值相等,得到的就是一條直線
                float temp = 0;
                if (x1 >= x2)
                {
                    coefficient = (float)Math.Round((x1 / x2), _decimaldigits);
                    temp = y2 * coefficient; //將對應的函數乘以系數
                    bvalue = (float)Math.Round(((temp - y1) / (coefficient - 1)), _decimaldigits);
                    kvalue = (float)Math.Round(((y1 - bvalue) / x1), _decimaldigits); //求出k值
                }
                else
                {
                    coefficient = x2 / x1;
                    temp = y1 * coefficient;
                    bvalue = (float)Math.Round(((temp - y2) / (coefficient - 1)), _decimaldigits);//求出b值
                    kvalue = (float)Math.Round(((y2 - bvalue) / x2), _decimaldigits); //求出k值
                }
            }
            catch
            {
                Console.WriteLine("x系數不能為0或相等");
            }
        }
        static void Main(string[] args)
        {
            float x1 = 0;
            float y1 = 0;
            float x2 = 0;
            float y2 = 0;
            float kvalue = 0;
            float bvalue = 0;
            Console.WriteLine("計算直線斜率k及縱截距b");
            Console.WriteLine("請輸入x1值");
            x1 = Convert.ToSingle(Console.ReadLine());
            Console.WriteLine("請輸入y1值");
            y1 = Convert.ToSingle(Console.ReadLine());
            Console.WriteLine("請輸入x2值");
            x2 = Convert.ToSingle(Console.ReadLine());
            Console.WriteLine("請輸入y2值");
            y2 = Convert.ToSingle(Console.ReadLine());
            Calculate(x1, x2, y1, y2, ref kvalue, ref bvalue);
            Console.WriteLine("直線方程為:y={0}x+{1}", kvalue, bvalue);
            Console.ReadKey();  
        }
    }
}

運行結果:

截圖20160202102625275

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved