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();
        }
    }
}

运行结果:

时间: 2024-10-25 07:10:26

C# 二元一次方程参数求解的相关文章

二元一次方程组求解

首先要找到二元一次方程组的通解,例如: ax+by=m cx+dy=n 不难算出 x=(md-bn)/(ad-bc) y=(mc-an)/(bc-ad) 程序代码: #include<stdio.h> #include<math.h> int main(){ int a,b,c,d,m,n; double x=0,y=0; scanf("%d,%d,%d,%d,%d,%d",&a,&b,&c,&d,&m,&n);

flink 批量梯度下降算法线性回归参数求解(Linear Regression with BGD(batch gradient descent) )

1.线性回归 假设线性函数如下: 假设我们有10个样本x1,y1),(x2,y2).....(x10,y10),求解目标就是根据多个样本求解theta0和theta1的最优值. 什么样的θ最好的呢?最能反映这些样本数据之间的规律呢? 为了解决这个问题,我们需要引入误差分析预测值与真实值之间的误差为最小. 2.梯度下降算法 梯度下降的场景: 梯度下降法的基本思想可以类比为一个下山的过程.假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷). 但此时山上的浓雾很

js实现求二元一次方程的根

已知ax的平方+bx+c=0;求根:<br />系数A:<input type="number" id="a" /><br />系数B:<input type="number" id="b" /><br />系数C:<input type="number" id="c" /><br /><input

解不等式组、二元一次方程组、三元一次方程组

不等式性质: 一.加减同一个数,方向不变. 二.乘以(除以)同一个正数,方向不变. 三.乘以(除以)同一个负数,方向改变. 例:/3x - 15 > 0  ① \7x - 2 < 8x  ② 解①式可得 x > 5 解②可可得 -2 < x 该不等式的解集为 x > 5 解二元一次方程组: 1.消元解二元一次方程组有代入消元和加减消元法. 2.代入消元法:把二元一次方程组的一个未知数用另一个未知数表示出来,再带入另一个方程,实现消元. 3.加减消元法:两个方程中同一个未知数系

作业二:生成四则运算和二元一次方程

生成四则运算所用方法类似生成二叉树的方法递归添加.直接上代码! public class 四则运算 { public static String str = "";//保存题目的字符串 public static int num = 5;//每题中数的个数 public static int num_i = 0;//题目中已有数的个数 public static int numberRange = 100;//运算中数的最大取值 public static double sum = 0

SA:T1编写主函数法和T2Matlab自带的SA工具箱GUI法,两种方法实现对二元函数优化求解——Jason niu

%SA:T1法利用Matlab编写主函数实现对定义域[-5,5]上的二元函数求最优解-Jason niu [x,y] = meshgrid(-5:0.1:5,-5:0.1:5); z = x.^2 + y.^2 - 10*cos(2*pi*x) - 10*cos(2*pi*y) + 20; figure mesh(x,y,z) hold on xlabel('x') ylabel('y') zlabel('z') title('SA:利用SA最优化,定义域[-5,5]上的二元函数z = x^2

二元隐函数 数值求解

我写了一个 对 二元隐函数 数值求解 的 程序   . 二元隐函数 就是一个 二元方程,  就是 一个方程 有 2 个 未知数,  把 未知数 看作 变量,  那 二元方程 就是 二元隐函数  . 一个未知数 看作 自变量,   另一个 未知数 看作 因变量   . 我们把 自变量 统称为 x,   因变量 统称为 y    . 这样,   二元隐函数 可以 表示成 :      y = f ( x, y )   ,  或者    x = f ( x, y )   ,    或者    f (

HMM - (补充) 参数求解之 F/B 算法细节

回顾 上篇通过EM算法思想来求解 HMM 的参数 \(\theta=(\pi, A,B)\) 即 初始状态概率(向量), 状态转移概率(矩阵), 发射概率矩阵. 在上帝视角, 即已知隐变量 Z , 则通过简单的词频统计, 再归一化 就求解参数了. 而问题在于我们不是上帝, 只能通过观测值 X , 通过 F/B 算法 来求解出 Z, 即: \(p(z_k|x) = \frac {p(z_k, x)}{p(x)}\) 这是求解目标 这里的 x 表示所有的 n 个样本嘛, 因此为了和 F, B 产生联

LDA variational inference note, LDA 参数求解

1.LDA主题模型 给定先验概率参数αβ,主题混合参数θ,集合主题z,集合词w的联合分布为            (1) 2.variational inference 1>variational distribution variational inference algorithm 介绍的variational 分布:                                (3) 是作为后验概率p(θ, z, w | α, β)的代替.variational分布的参数γ和φ通过求解最