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

王朝学院·作者佚名  2016-08-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

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

示例代码:

usingSystem;namespaceDemo

{classPRogram

{privatestaticreadonlyint_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>privatestaticvoidCalculate(floatx1,floatx2,floaty1,floaty2,reffloatkvalue,reffloatbvalue)//求方程y=kx+b 系数 k ,b{floatcoefficient =1;//系数值try{if((x1 ==0) || (x2 ==0) || (x1 == x2))return;//排除为零的情况以及x1,x2相等时无法运算的情况//if (y1 == y2) return;//根据具体情况而定,如何这两个值相等,得到的就是一条直线floattemp =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或相等");

}

}staticvoidMain(string[] args)

{floatx1 =0;floaty1 =0;floatx2 =0;floaty2 =0;floatkvalue =0;floatbvalue =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,refkvalue,refbvalue);

Console.WriteLine("直线方程为:y={0}x+{1}", kvalue, bvalue);

Console.ReadKey();

}

}

}

运行结果:

[flash=500,400]http://s1.knowsky.com/20160211/b1sks2tl14j00.png[/flash]

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航