c# python混合编程,C#与F#混合编程

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

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

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

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

c#版本

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

{

// Var Init

//double[] result = new double[3];

List ans = new List();

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值