文档章节

C#与F#混合编程

 风半程
发布于 2016/11/15 08:43
字数 463
阅读 64
收藏 0
F#

本人非计算机专业,职业也不是码农,接触编程工作只是为了处理工作中的重复性工作。

在经历了VBA->Visual Basic .Net->Visual C# WinForm->Visual C# WPF后,经过系统性学历,觉得Visual F#在编写程序的数学运算库是一个比较好的语言,函数式编程确实容易理解。

当然,目前全程使用F#来编写WPF看起来不那么简单,鉴于F#有.Net支持,那么就可以只用F#写库,C#写WPF界面操作与响应。

经过系统性整理后,发现函数式语言确实有其魅力之处,比如我的最小二乘法实例:

c#版本

        public static List<double> LinearFittingByLeastSquares(List<double> xaxis, List<double> yaxis, bool flag)// Least Squares Linear Fitting
        {


            // Var Init
            //double[] result = new double[3];
            List<double> ans = new List<double>();
            double interceptb = 0, slopek = 0, sumx = 0, sumy = 0, sumxy = 0, sumxsq = 0, corrcoef;
            int i, num;
            num = xaxis.Count;

            // Calculate Sums
            for (i = 0; i < num; i++)
            {
                sumx += xaxis[i];
                sumy += yaxis[i];
                sumxy += xaxis[i] * yaxis[i];
                sumxsq += xaxis[i] * xaxis[i];
            }

            sumx = sumx / num;
            sumy = sumy / num;

            // Calculate Intercept & Slope
            slopek = (sumxy - num * xaxis.Average() * yaxis.Average()) / (sumxsq - num * Pow(xaxis.Average(), 2));
            interceptb = sumy - slopek * sumx;

            // Output
            //result[0] = slopek;
            //result[1] = interceptb;
            ans.Add(slopek);
            ans.Add(interceptb);

            double avgx = xaxis.Average(), avgy = yaxis.Average(),
                    upper = 0, lowerx = 0, lowery = 0;
            for (i = 0; i < num; i++)
            {

                upper += (xaxis[i] - avgx) * (yaxis[i] - avgy);
                lowerx += Pow(xaxis[i] - avgx, 2);
                lowery += Pow(yaxis[i] - avgy, 2);

            }
            corrcoef = upper / Pow(lowerx * lowery, 0.5);
            //result[2] = corrcoef;
            ans.Add(corrcoef);
            return ans;

        }

F#版本

let LeastSquareMethod (samples:(float*float) list)=
        match samples with
        |[]|[_]->failwith "ItemNumber Error"
        |_->let count=float samples.Length
            let sumx=samples|>List.sumBy (fun (x,y)->x)
            let sumy=samples|>List.sumBy (fun (x,y)->y)
            let sumxy=samples|>List.sumBy (fun (x,y)->x*y)
            let sumx2=samples|>List.sumBy (fun (x,y)->x|>square)
            let dishu=(count*sumx2-square sumx)
            match dishu with
            |0.->failwith "Items All the same"
            |_->let k=(count*sumxy-sumx*sumy)/dishu
                let b=(sumy-k*sumx)/count
                let corrcoef=samples|>List.map (fun (x,y)->(y-k*x-b)|>square)|>List.sum|>sqrt
                {K=k;b=b;Corrcoef=corrcoef}

有没有觉得F#简介明了一些

© 著作权归作者所有

粉丝 0
博文 1
码字总数 463
作品 0
湘潭
其他
私信 提问
[CLI/C++].NET托管代码和非托管代码的相互调用

场景三:现有C++原代码,包装后供C#调用。 C++的原代码,实际上可以直接编译成托管代码。MFC也好ATL也好……这样看起来在.NET中最强大的编程语言就是C++了:它不仅可以编写托管 程序,甚至可...

Yong_Luo
2010/10/01
0
0
微软推出新编程语言,为“量子计算机”量身定制

微软在 Ignite 大会上列出了将改变我们技术产业的三大关键技术:混合现实、人工智能和量子计算,还宣布在今年晚些时候会发布量子计算机的新编程语言。 目前微软还未给这门编程语言命名,它将...

达尔文
2017/09/27
2.1K
27
C#数学计算包 Math.NET

1.Math.NET基本介绍 Math.NET官方网站:http://www.mathdotnet.com/ Math.NET的目标是为提供一款自身包含清晰框架的符号运算和数学运算/科学运算,它是C#开发的开源类库。Math.NET含了一个支...

CSharpKit
2017/12/18
0
0
OSC 第 82 期高手问答 — Matlab 与 .NET 混合编程调用

OSCHINA 本期高手问答(7月8日- 7月14日)我们请来了 @asxinyu (董斌辉)为大家解答关于 .NET 学习,.NET 开源项目资源,以及 Matlab 与 .NET 混合编程调用 方面的问题。 董斌辉,@asxinyu ...

叶秀兰
2015/07/08
4.4K
31
颤抖吧,微软又推出了量子计算编程语言!

  【IT168 资讯】在Ignite大会上,微软列出了将改变科技产业的3项关键技术,分别是混合现实、人工智能和量子计算。微软在移动时代错失了影响力,这是毋庸置疑的,但是它正在努力弥补。   ...

it168网站
2017/09/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

以太坊私有链搭建

https://blog.csdn.net/Blockchain_lemon/article/details/80589123

Moks角木
31分钟前
1
0
自律给我自信-为什么要自律

为什么要自律 混一天和努力一天 看不到任何差别 3天看不到任何变化 7天也看不到任何效果 但是 1个月后, 会看到话题不同 3个月后, 会看到气场不同 6个月后, 会看到距离不同 3年后, 会看到...

周大壮
31分钟前
1
0
读书replay计划说明

突然脑袋一闪,我有了这样一个主意:通过写博客的方式,将我阅读的书中的内容replay出来。 我一般会找着我感兴趣的书去读,一般也会读书中我感兴趣的章节,或者当下对我有用的章节,所以这个...

wanxiangming
33分钟前
0
0
CentOS7安装xrdp环境可实现远程桌面访问

CentOS7安装xrdp环境可实现远程桌面访问 2018-07-14 06:39:28 分类:运维 阅读(2051) 评论(0) 在"Ubuntu系统安装xrdp桌面客户端及实现远程连接桌面"文章中有分享过在Ubuntu系统中安装XRDP环境...

linjin200
57分钟前
4
0
ConfigurationProperties

package cn.enjoy.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @ConfigurationProperties(pr......

少年已不再年少
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部