如何将基于mpir库的VC9.0代码转换为Matlab mex函数?
Posted
技术标签:
【中文标题】如何将基于mpir库的VC9.0代码转换为Matlab mex函数?【英文标题】:How to convert the VC9.0 code based on mpir library into Matlab mex function? 【发布时间】:2013-10-29 23:55:12 【问题描述】:我正在学习如何使用 VC++ 2008 中内置的多精度 mpir 库。 下面的代码是整数计算的阶乘:
#include "stdafx.h"
#include <afxwin.h>//for clipboard operation
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <windows.h>
#include <ctype.h>
using namespace std;
#pragma warning(disable: 4800)
#include <mpir.h>
#include <mpirxx.h>
#pragma warning(default: 4800)
HANDLE hCon;
enum Color DARKBLUE = 1, DARKGREEN, DARKTEAL, DARKRED, DARKPINK, DARKYELLOW, GRAY, DARKGRAY, BLUE, GREEN, TEAL, RED, PINK, YELLOW, WHITE ;
void SetColor(Color c)
if(hCon == NULL)
hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon, c);
int _tmain(int argc, _TCHAR* argv[])
mpf_class a(1,19449),b(1,19449),c(1,19449);//
SetColor(GREEN);
cout<< "Factorial Calculator v0.0, Shuai Xiao Dai, 2013" <<endl<<endl;
SetColor(RED);
cout<<"Input an integer to calculate its factorial."<<endl;
SetColor(PINK);
while(cin>>a)
c=a;
if (a<=0)
if (a<0)
SetColor(PINK);
cout<<"Sorry, we don't handle negative numbers ... "<<endl;
a = 1;
else
if(a>=1)
for(;a>=1;a--)
b *=a;
else
SetColor(PINK);
cout<<"Sorry, we don't what happens ... "<<endl;
a = 1;
SetColor(YELLOW);
cout<<setprecision(50)<<c<<"! = ";
SetColor(WHITE);
cout << setprecision (10500) <<b << endl<<endl;
SetColor(RED);
cout<<"Input a new integer to calculate its factorial:" <<endl;
SetColor(PINK);
b=1;
system("pause");
return 0;
我的问题是:
1) 如何将相同的阶乘计算器转换为 Matlab mex 函数,这样我就不必使用相对较慢的符号工具箱?
2) 特别是如何将“多精度”结果传递到符号matlab变量中会出现问题;
【问题讨论】:
为什么使用mpf
而不是mpz
?还有mpz_fac_ui
。
感谢您的回复;能否请您提供更多mpz的详细信息?
gmplib.org/manual
我只有windows操作系统,MPIR/MPFR会更方便;另外,我更喜欢 Matlab 的便利性和 C++ 的效率;所以mex应该是最好的选择,因为Matlab的多精度工具箱太慢了。
mpz 能解决我的问题吗?如何?如有必要,我会考虑购买一台同时具有 win 和 Linux 操作系统的新计算机。谢谢
【参考方案1】:
问题解决:
1) 学习如何配置 VS 以便在 VS IDE 中编译 mex,答案已经在这里:configure VS2010 for mex
2) 学习如何处理多精度和参数传递:pass arguments
【讨论】:
以上是关于如何将基于mpir库的VC9.0代码转换为Matlab mex函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JavaScript forEach 循环/函数转换为 CoffeeScript
图像去噪基于matl中值+均值+Lee+Kuan图像滤波含Matlab源码 1179期
Python学习:scapy库的Packet与str相互转换