在Matlab中使用WPF

事实上.NET无论是用于科学研究还是用于生产,肯定都比C++有优势。今天我们要看的例子与科学研究有关。在21世纪的第一个10年过去后,国内院校和科研院所仍然流行着VB6。然而在国外,JVM和CLR平台,甚至是html5,早就是教授和学生们的利器了。很多老外的软件中都集成了面向科学研究人员而非专业开发者的.NET扩展功能。本人在做本科毕业论文时就用到了3ds max中MaxScript脚本调用.NET,用这一特性制作了Windows Forms界面来操控3ds max场景。

说到.NET平台的脚本(或者说解释型语言),大家都会想到IronPython、IronRuby之类;说到交互式命令行,再加上F#等,将来可能C#也会提供交互式的功能。这里我要说其他软件中的这些功能其实一点也不差。在Mathematica和Matlab数学软件中,均提供了对JVM和.NET的接口。借助这两个类库的强大功能,科研人员能做的事情一下子多了起来。

以Matlab为例,你可以在交互式命令行和脚本中同时使用JDK和BCL两个牛库,这等于实现了一定程度上的JVM和CLR的互通。最近对这方面兴趣大增,正在研究更多的内容。

今天我举一个Matlab中使用WPF的例子。在这个例子中,演示了Matlab中.NET对象的基本使用方法、使用Matlab函数句柄作为匿名函数作为事件处理器的方法等。希望对想给你的Matlab程序增加界面的童鞋有所帮助。

以下代码在Matlab R2010b中测试通过。

 

% load necessary assemblies for WPF

NET.addAssembly('PresentationCore');

NET.addAssembly('PresentationFramework');

NET.addAssembly('WindowsBase');

 

% show a window with a clickable button

window = System.Windows.Window;

window.Title = 'WPF in MATLAB';

window.Width = 300;

window.Height = 100;

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; % use of enum

button = System.Windows.Controls.Button;

button.Content = 'Click me!';

addlistener(button, 'Click', @(sender, e)System.Windows.MessageBox.Show('Button clicked!')); % use of event handler

window.Content = button;

window.Show()

 

别的地方都很简单,我只解释一下“函数句柄”。这是Matlab最近几年加入的功能,很多国内教科书上都没有介绍,我也是在Matlab文档中偶然看到的,可见文档是最好的教材。函数句柄相当于C#中的匿名函数或lambda表达式这样的概念,有了它,Matlab中很多函数的使用更方便了。例如求定积分quad,以前需要把被积函数做成独立文件,然后把函数名用字符串形式传入。后来有了inline函数,但也不方便。再后来就有了函数句柄,于是我们可以直接写

quad(@sin, 0, 1)

quad(@(x)sin(x)+1, 0, 1)

等等。其中第二个就是一种lambda表达式的形式,@(x)sin(x)+1翻译成C#的lambda表达式就是x=>Math.Sin(x)+1。

针对函数句柄,Matlab现在有一些全新的函数。例如绘制函数图像,再也不需要先求两个向量了,直接可以使用fplot和ezplot。

在addlistener函数中,第一个参数是控件,第二个参数是事件名,第三个参数就是事件处理函数,以函数句柄形式传入。可以写一个独立的函数,也可以使用匿名函数(像代码中那样,@(sender, e)MessageBox.Show(…))。

 

大家不妨尝试一下:用WPF做界面,来调用java.math.BitInteger类计算大整数的幂。以下是命令行交互的结果:


>> a=java.math.BigInteger(2)

 

a =

 

2

 

>> a.pow(100)

 

ans =

 

1267650600228229401496703205376

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值