Hello, mathdotnet,面向.net的科学计算包体验(二)——线性拟合(linear fit)

成功引用mathnet.numerics之后,在资源管理器中双击它可以打开预览一下,看看都包括了些什么内容:

长长的一列看不到头,光从名字上就能看到差分、插值、积分、线性代数、傅里叶变换这些让人肝颤的家伙(大学数学课本在哪里,赶紧翻出来复习一下)。

点开第一个mathnet.numerics看看

复数、微积分什么都出来了,看着就觉得被暴击了。先做个拟合试试。Fit里面点进去,从一堆指数拟合、多项式拟合里面挑个最软的线性拟合看看。

点进去,官方注释这样的:

public static System.Tuple<double, double> Line(double[] x, double[] y)
    MathNet.Numerics.Fit 的成员

摘要:
Least-Squares fitting the points (x,y) to a line y : x -> a+b*x, returning its best fitting parameters as [a, b] array, where a is the intercept and b the slope.

准备点数据实验一下,数据集:

x= 13,15,16,21,22,23,25,29,30,31,36,40,42,55,60,62,64,70,72,100,130
y= 11,10,11,12,12,13,13,12,14,16,17,13,14,22,14,21,21,24,17,23,34

预期拟合结果: y = 8.2084 + 0.1795x

代码如下:

        static void Main(string[] args)
        {
            double[] x = {13, 15, 16, 21, 22, 23, 25, 29, 30, 31, 36, 40, 42, 55, 60, 62, 64, 70, 72, 100, 130};
            double[] y = {11, 10, 11, 12, 12, 13, 13, 12, 14, 16, 17, 13, 14, 22, 14, 21, 21, 24, 17, 23, 34 };
            var result = MathNet.Numerics.Fit.Line(x, y);
            Console.WriteLine(result.ToString());
            Console.ReadLine();
        }

运行结果和预期符合,b= 8.2084, k= 0.1795

 

========分割线=======

你们以为这就完了么?接下来当然要对算法进行各种测试,简而言之就是:

Fit.Line()返回的是斜率k和截距b,那如果k=tan90°的情况呢?

先把数据改成这样的,x在1的附近浮动

        static void Main(string[] args)
        {
            double[] x = {1, 1.01, 1, 0.999, 1, 1.01, 1, 1, 0.999, 1, 1.01, 1.01, 0.999, 1, 1, 1, 1.01, 0.999, 1, 1, 1.01};
            double[] y = {11, 10, 11, 12, 12, 13, 13, 12, 14, 16, 17, 13, 14, 22, 14, 21, 21, 24, 17, 23, 34 };
            var result = MathNet.Numerics.Fit.Line(x, y);
            Console.WriteLine(result.ToString());
            Console.ReadLine();
        }

运行结果

噢哟呵,居然还没出错。

那么继续,干脆把x全改成1

        static void Main(string[] args)
        {
            double[] x = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
            double[] y = {11, 10, 11, 12, 12, 13, 13, 12, 14, 16, 17, 13, 14, 22, 14, 21, 21, 24, 17, 23, 34 };
            var result = MathNet.Numerics.Fit.Line(x, y);
            Console.WriteLine(result.ToString());
            Console.ReadLine();
        }

铛铛!

好了,我们现在知道tan90°的拟合结果也是tan90°,手动狗头表情。然后开始下一项作死,把数据弄成正方形四个顶点会如何?

        static void Main(string[] args)
        {
            double[] x = {0, 1, 1, 0};
            double[] y = {0, 0, 1, 1};
            var result = MathNet.Numerics.Fit.Line(x, y);
            Console.WriteLine(result.ToString());
            Console.ReadLine();
        }

结果是b= 0.5, k= 0

那么继续,把四个点位置旋转45°

        static void Main(string[] args)
        {
            double[] x = {0, 1, 0, -1};
            double[] y = {0, 1, 2, 1};
            var result = MathNet.Numerics.Fit.Line(x, y);
            Console.WriteLine(result.ToString());
            Console.ReadLine();
        }

结果是b=1, k=0

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你好!恭喜你开始学习Python!下面是Python中的传统开场白: ```python print("Hello World!") ``` 以上代码会输出一个简单的“Hello World!”消息。希望这能为你提供一个好的开始,祝你学习愉快! ### 回答2: Python是一种非常受欢迎的编程语言,它的语法简单、清晰,适合初学者入门学习编程。Hello World是Python编程中最基本也是最经典的入门示例,它是一个最简单的程序,只需要一行代码即可打印出“Hello World”。 Python中的print()函数可以输出一段文本,你可以在括号中写下你想要输出的内容。在这里,我们要输出的是“Hello World”。 在Python的IDE中,我们可以像下面这样写下第一行Python代码: ``` print("Hello World") ``` 在这行代码中,print是Python中的一个内置函数,它可以输出指定的内容。括号中的双引号是用来含输出的文本的,它告诉Python这是一个字符串。当我们运行这段代码后,Python就会在控制台输出“Hello World”的文本。 除了在IDE中写入代码,我们还可以使用Python的命令行来输出Hello World。我们只需要打开命令行模式,键入python命令就可以打开Python解释器。然后,我们可以键入第一行代码print("Hello World"),按回车键,Python就会立即输出Hello World。 在初次体验Python的过程中,这个Hello World程序可以帮助我们了解程序如何工作,如何指定输出文本并将其打印到屏幕上。它也是我们编写更复杂的程序的基础和基石。无论你是计算机科学的专业人士还是仅仅是对编程感兴趣,学习Python编程都是一个不错的选择。 ### 回答3: Python初体验——Hello World Python是一门高级编程语言,而“Hello World”则是编程里的常见入门示例。让我们开始我们的Python初体验吧! 首先,我们需要安装Python解释器。Python解释器是一个解释执行Python代码的程序。Windows系统下可以在Python官网下载,并安装在本地计算机上。另外,Python也可以在很多云平台上使用,例如Google Colaboratory和Jupyter Notebook。 在安装完Python解释器之后,我们可以使用一些简单的文本编辑器,例如VS Code和Atom,在Python中运行代码。但是如果您是刚入门的新手,可以使用IDLE,IDLE是Python自带的集成开发环境,可以方便地输入、编辑、运行Python代码和在线调试。在Windows上,可以在开始菜单中找到它,然后输入“idle”或“Python”即可。 接下来,让我们通过经典的“Hello World”程序来进行Python的初体验。 打开IDLE编辑器之后,输入以下代码: print("Hello, World!") 该代码的含义是,输出一条带有“Hello,World!”的提示信息。我们点击“运行”(或按F5)即可看到结果。 也可以在Python交互模式下操作,例如在命令行中键入“python”命令。随后,我们直接输入“print("Hello, World!")”即可看到输出。 Python还有许多其他的示例和功能,例如计算器和猜数字游戏等等。学习Python,你可以使用它来构建自己的小工具,处理数据、创建网站,以及编写各种有趣的程序。 总之,Python是一门入门门槛较低,功能强大的高级编程语言,非常适合初学者入门。通过“Hello World”程序,我们可以体验到它的简洁、易学、高效,也能够更好地了解Python编程的本质。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值