找回密码
 注册
Simdroid-非首页
查看: 92|回复: 1

[3. Fortran] 请教一个在Fortran中调用matlab的问题

[复制链接]
发表于 2011-3-6 11:54:06 | 显示全部楼层 |阅读模式 来自 江苏南京
我在编了段小程序,希望用matlab中方便的矩阵功能来处理数据:
program eigenvalue
integer engOpen,engGetMatrix,mxCreateFull,mxGetpr,mxGetpi !输入函数
integer engPutMatrix,engEvalString,engClose  !输出函数
integer ep,temp_Q,temp_R,temp_T,temp_N,temp_p,temp_ci
integer temp_a1,temp_a2,temp_a3,temp_b1,temp_b2,temp_b3 !指针
real*8 Q(3,3),R(3,3),T(3,3),N(6,6)
!complex p(6),ci(6),a1(3),a2(3),a3(3),b1(3),b2(3),b3(3)
do i=1,3
  do j=1,3
   Q(i,j)=1.
   R(i,j)=2.
   T(i,j)=0.
  end do
end do
T(1,1)=8. ; T(2,2)=9. ; T(3,3)=5.
ep=engOpen('Matlab')
temp_Q=mxCreateFull(3,3,0) ; temp_R=mxCreateFull(3,3,0) ; temp_T=mxCreateFull(3,3,0)
call mxSetName(temp_Q,'Q') ; call mxSetName(temp_R,'R') ; call mxSetName(temp_T,'T')
call mxCopyReal8ToPtr(Q,mxGetPr(temp_Q),9) ; call mxCopyReal8ToPtr(R,mxGetPr(temp_R),9) ; call mxCopyReal8ToPtr(T,mxGetPr(temp_T),9)
call engPutMatrix(ep,temp_Q) ; call engPutMatrix(ep,temp_R) ; call engPutMatrix(ep,temp_T)
call engEvalString(ep,'N1=-inv(T)*R";')
call engEvalString(ep,'N2=inv(T);')
call engEvalString(ep,'N3=R*inv(T)*R"-Q;')
call engEvalString(ep,'N4=N1";')
call engEvalString(ep,'N=[N1,N2;')
call engEvalString(ep,'N3,N4];')
temp_N=engGetMatrix(ep,'N')
!call mxCopyPtrToReal8(mxGetpr(temp_N),N,36)    注释掉,不然会出错
!call engClose(ep)
end
在matlab中执行的代码仅红字,但是在运行后,查看matlab中矩阵的值,仅仅找到Q,R,T,N2,没有N1,N3,N4,N的值,我想这才导致了蓝字部分的出错(如不注释,会有错)。但是为什么没有N1,N3,N4,N的值呢,望高手指点。
 楼主| 发表于 2011-3-6 19:56:42 | 显示全部楼层 来自 江苏南京
Simdroid开发平台
呵呵,自己解决了,转置不用''而用transpose,组合矩阵的命令写在一行N=[N1,N2;N3;N4],才学这个,犯低级错误了
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-1 09:30 , Processed in 0.042414 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表