当前位置:编程学习 > Matlab >>

matlab M文件编辑的时候,运行错误,文件如下

M=1;m1=0.5;m2=0.5; g=9.8; l1=0.6; l2=0.6; q=4*M+m1+m2; A=[0 1 0 0 0 0; 0 0 -3*m1*g/q 0 -3*m2*g/q 0; 0 0 0 1 0 0; 0 0 3*g/(4*l1)+9*m1*g/(4*l1*q) 0 9*m2*g/(4*l1*q) 0; 0 0 0 0 0 1; 0 0 9*m1*g/(4*l2*q) 0 3*g/(4*l2)+9*m2*g/(4*l2*q) 0] B=[0;4/q;0;-3/(l1*q);0;-3/(l2*q)] C=[1 0 0 0 0;0 0 1 0 0 0;0 0 0 0 1 0] D=[0;0;0] p=eig(A) f=rank([B A*B A^2*B A^3*B A^4*B A^5*B]) T=0:0.005:5; U=0.2*ones(size(T)); [Y,X]=lsim(A,B,C,D,U,T); plot(T,Y(:,1),':',T,Y(:,2),'-') hold on h=plot(T,Y(:,3),'-'); set(h,'linewidth',4*get(h,'linewidth')); axis([0 3 -10 10]) 请问哪里有错误?错误不只一处
答案:C=[1 0 0 0 0;0 0 1 0 0 0;0 0 0 0 1 0]
元素不匹配
其他:M=1;m1=0.5;m2=0.5; g=9.8; l1=0.6; l2=0.6; 
q=4*M+m1+m2;
A=[0 1 0 0 0 0;
 0 0 -3*m1*g/q 0 -3*m2*g/q 0;
 0 0 0 1 0 0;
 0 0 3*g/(4*l1)+9*m1*g/(4*l1*q) 0 9*m2*g/(4*l1*q) 0;
 0 0 0 0 0 1;
 0 0 9*m1*g/(4*l2*q) 0 3*g/(4*l2)+9*m2*g/(4*l2*q) 0];
B=[0;4/q;0;-3/(l1*q);0;-3/(l2*q)];
C=[1 0 0 0 0 0;0 0 1 0 0 0;0 0 0 0 1 0];
D=[0;0;0];
p=eig(A);
f=rank([B A*B A^2*B A^3*B A^4*B A^5*B]);
T=0:0.005:5;
U=0.2*ones(size(T));
[Y,X]=lsim(A,B,C,D,U,T);
plot(T,Y(:,1),'r :',T,Y(:,2),'k p')
hold on
h=plot(T,Y(:,3),'-');
set(h,'linewidth',4*get(h,'linewidth'));
axis([0 3 -10 10])
改正后滴。自己对照下。 +文件。
命令的格式为:
mcc[-option]fun[fun2...][mexfile1...][mlifile...]
此函数的作用是将matlab程序fun.m转化为c程序fun.c或者c++程序fun.cpp
转化后的文件默认在当前目录中。
若M文件多于一个,那么每个文件对应转化相应的c和c++文件
若源文件包含c文件,则将它们同新生成的c文件一起编译。
一些有用的option参数解释如下:
————————————————————————————————————
c  转化为c语言文件但是不生成mex文件或者独立应用程序
d<directory>  指定生成的文件目录
G/g  进入调试状态
h  编译帮助函数,所以的m文件都将编译到mex文件或者独立应用程序
L《option》 指定目标语言为option,其中c,cpp,p分别代表c语言,c++,matlab语言
m  指定创建独立c语言应用程序的宏,作用等于‘-t-W main -L C-h-T link:exe libmmdile.mlib’
M"<string>"  向MBLID或者mex教本传递string中包含的信息
o<outputfilename>  指定输出文件名
O<optimization>  指定优化参数
p   指定创建独立c++语言应用程序的宏  作用等于-t-W main -L Cpp-h-T link:exe libmmdile.mlib’
v   详细显示编译步骤
x   指定创建独立mex文件的宏,作用等于-t-W main -L C-T link:exe libmmdile.mlib’
S   转化为simuink的s函数
————————————————————————————————————
————————————————————————————————————
eg
现有m文件main.m mrank.m,主函数main中调用了子函数mrank
main.m
function main
r=mrank(5)
mrank.m
function r=mrank(n)
r=zeros(n,1);
for k=1:n
r(k)=rank(magic(k));
end
在matlab环境下执行主程序可以看到结果
》》main
r=
1
2
3
3
5
现在要把他们转化为c和cpp程序
在matlab工作窗口中输入下面命令
》》mcc-mc main mrank
可以得到下面个文件:
main.c
main.h
main-main.c
mrank.c
mrank.h
在matlab中输入下面命令
mcc -lcpp main mrank
可以得到下面5个文件
main.cpp
main.hpp
main-main.cpp
mrank.cpp
mrank.hpp
有了这些程序以后,就可以在其他c,c++程序中方便调用了

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

创建独立可执行程序

方法1:编译m文件为可执行程序

mcc -m main mrank

or 

mcc -p main mrank

方法2:将编译的c c++转化为可执行程序

mbuild main.c main_main.c mrank.c

or

mbuild main.cpp main_main.cpp mrank.cpp
 

上一个:MATLAB出现??? Error using ==> vertcat是怎么回事?
下一个:matlab求助【急】

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,