怎么把c语言变成matlab语言

怎么把c语言变成matlab语言,第1张

基本上一样,有几点改动:

1)matlab要把n++写成n=n+1

2)printf在matlab中相近功能的命令有disp(),!echo,和sprintf(),其中最后一种最接近c中的printf。有关具体用法,你可以在matlab主命令窗口输入:help sprintf 来查阅这个命令的帮助和例子。比如:sprintf('The array is %dx%d.',2,3),其输出是 The array is 2x3

3)头文件的include是不用的,因为matlab的常用库里是包含了这些函数的。顺带一提,matlab里对函数的定义,开头要用function XXX。

没有直接转换的工具,二者本质不同,matlab是解释性语言,面向的过程不同。但是matlab的语句基本上是以早期C为基础拓展的,与C的风格比较类似,会使用C的话,matlab的使用不成问题,也就是说无需转换,直接按照C的思路去编写matlab程序即可。

使用mex命令。但是转化函数的编写规则有一定的要求。

在matlab的安装文件\extern\examples\mex有一些程序编写实例,可以仔细参考一下。以其中的yprime.c函数为例。

在matlab命令窗口执行:

mex

yprime.c

会生成一个可执行的文件,可以不管他。(注意文件的路径)

然后就可以在命令窗口直接使用yprime(a%参数)函数了。与一般的函数使用没有多大差别。下面贴一下c文件编写:(在\extern\examples\mex中有很多)

/*=================================================================

*

*

YPRIME.C

Sample

.MEX

file

corresponding

to

YPRIME.M

*

Solves

simple

3

body

orbit

problem

*

*

The

calling

syntax

is:

*

*

[yp]

=

yprime(t,

y)

*

*

You

may

also

want

to

look

at

the

corresponding

M-code,

yprime.m.

*

*

This

is

a

MEX-file

for

MATLAB.

*

Copyright

1984-2006

The

MathWorks,

Inc.

*

*=================================================================*/

/*

$Revision:

1.10.6.4

$

*/

#include

<math.h>

#include

"mex.h"

/*

Input

Arguments

*/

#define

T_IN

prhs[0]

#define

Y_IN

prhs[1]

/*

Output

Arguments

*/

#define

YP_OUT

plhs[0]

#if

!defined(MAX)

#define

MAX(A,

B)

((A)

>

(B)

?

(A)

:

(B))

#endif

#if

!defined(MIN)

#define

MIN(A,

B)

((A)

<

(B)

?

(A)

:

(B))

#endif

static

double

mu

=

1/82.45

static

double

mus

=

1

-

1/82.45

static

void

yprime(

double

yp[],

double

*t,

double

y[]

)

{

double

r1,r2

(void)

t

/*

unused

parameter

*/

r1

=

sqrt((y[0]+mu)*(y[0]+mu)

+

y[2]*y[2])

r2

=

sqrt((y[0]-mus)*(y[0]-mus)

+

y[2]*y[2])

/*

Print

warning

if

dividing

by

zero.

*/

if

(r1

==

0.0

||

r2

==

0.0

){

mexWarnMsgTxt("Division

by

zero!\n")

}

yp[0]

=

y[1]

yp[1]

=

2*y[3]+y[0]-mus*(y[0]+mu)/(r1*r1*r1)-mu*(y[0]-mus)/(r2*r2*r2)

yp[2]

=

y[3]

yp[3]

=

-2*y[1]

+

y[2]

-

mus*y[2]/(r1*r1*r1)

-

mu*y[2]/(r2*r2*r2)

return

}

void

mexFunction(

int

nlhs,

mxArray

*plhs[],

int

nrhs,

const

mxArray*prhs[]

)

{

double

*yp

double

*t,*y

mwSize

m,n

/*

Check

for

proper

number

of

arguments

*/

if

(nrhs

!=

2)

{

mexErrMsgTxt("Two

input

arguments

required.")

}

else

if

(nlhs

>

1)

{

mexErrMsgTxt("Too

many

output

arguments.")

}

/*

Check

the

dimensions

of

Y.

Y

can

be

4

X

1

or

1

X

4.

*/

m

=

mxGetM(Y_IN)

n

=

mxGetN(Y_IN)

if

(!mxIsDouble(Y_IN)

||

mxIsComplex(Y_IN)

||

(MAX(m,n)

!=

4)

||

(MIN(m,n)

!=

1))

{

mexErrMsgTxt("YPRIME

requires

that

Y

be

a

4

x

1

vector.")

}

/*

Create

a

matrix

for

the

return

argument

*/

YP_OUT

=

mxCreateDoubleMatrix(m,

n,

mxREAL)

/*

Assign

pointers

to

the

various

parameters

*/

yp

=

mxGetPr(YP_OUT)

t

=

mxGetPr(T_IN)

y

=

mxGetPr(Y_IN)

/*

Do

the

actual

computations

in

a

subroutine

*/

yprime(yp,t,y)

return

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11259762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存