首页 > 学院 > 开发设计 > 正文

C#二元一次方程参数求解

2019-11-14 13:29:17
字体:
来源:转载
供稿:网友

本文记录了关于求直线斜率及纵截距值的简单方法,只是简单的记录下求解思路,最终还需根据具体项目进行优化。

设直线方程式为: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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表