声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2069|回复: 17

[编程技巧] 请看看我的矩阵运算出了什么问题

[复制链接]
发表于 2007-4-16 21:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
这个是我的m文件,这是一个关于动力微分方程的二阶求解的问题,它的动力方程是这样的mv''+kv+bv'=f,以为结构是多自由度体系,所以我定义是个3*3的矩阵
function z=zhendong(t,x)
  F=[25;24;20];
  m1=m2=m3=31.2;
  k1=k2=k3=67.51;
  M=[m1,0,0;0,m2,0;0,0,m3];
  B=[c1+c2,-c2,0;-c2,c2+c3,-c3;0,-c3,c3];
  K=[k1+k2,-k2,0;-k2,k2+k3,-k3;0,-k3,k3];
z=[x(2);inv(M)*(F-B*x(2)-K*x(1))];
以下是执行文件:
  t0=0;
   tfinal=3;
   x0=[0,0;0,0;0,0];
   tol=0.001;
   trace=0;
   [t,x]=ode23('zhendongjuzhen',t0,tfinal,x0,tol,trace);
   d=x(:,1);%结构的位移
   v=x(:,2)%结构的速度
请各位大师们能帮助小弟看看这个问题,我是matlab的新手,希望大家指教,导师着急要,师兄走了,没办法着急啊

[ 本帖最后由 eight 于 2007-4-16 21:15 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-4-16 21:16 | 显示全部楼层
原帖由 猴王 于 2007-4-16 21:13 发表
这个是我的m文件,这是一个关于动力微分方程的二阶求解的问题,它的动力方程是这样的mv''+kv+bv'=f,以为结构是多自由度体系,所以我定义是个3*3的矩阵
function z=zhendong(t,x)
  F=;
  m1=m2=m3=31.2;
   ...


请贴出错信息
 楼主| 发表于 2007-4-17 21:38 | 显示全部楼层

错误

我的错误是,c没有赋值,在调用函数的时候总是出错,具体我想看看到底在程序编译中是不是有语法错误,function z=zhendongjuzhen,应该是这个,后面的就真的不知道错在什么地方了,请您悉心指导,感激不尽
 楼主| 发表于 2007-4-17 21:40 | 显示全部楼层

联系方式

我的qq号是284285603,邮箱是wonderhj@sina.com,希望能得到您的早日回复,谢谢
 楼主| 发表于 2007-4-17 21:52 | 显示全部楼层

错误

zhendongjuzhen.m  
function z=zhendongjuzhen(t,x)

F=[25;24;20];
  m1=m2=m3=31.2;
  k1=k2=k3=67.51;
  c1=c2=c3=0.01;
  M=[m1,0,0;0,m2,0;0,0,m3];
  B=[c1+c2,-c2,0;-c2,c2+c3,-c3;0,-c3,c3];
  K=[k1+k2,-k2,0;-k2,k2+k3,-k3;0,-k3,k3];
z=[x(2);inv(M)*(F-B*x(2)-K*x(1))];
执行文件:
   t0=0;
   tfinal=3;
   x0=[0,0;0,0;0,0];
   tol=0.001;
   trace=0;
   [t,x]=ode23('zhendongjuzhen',t0,tfinal,x0,tol,trace);
   d=x[:,1];
   v=x[:,2]
在经过修改后还是出现这样的错误
??? Error using ==> d:/软件备份/toolbox/matlab/funfun/private/odearguments
Correct syntax is ode23(ZHENDONGJUZHEN,tspan,y0,options).

Error in ==> D:\软件备份\toolbox\matlab\funfun\ode23.m
On line 154  ==> [neq, tspan, ntspan, next, t0, tfinal, tdir, y0,
发表于 2007-4-17 22:27 | 显示全部楼层
m1=m2=m3=31.2;
  k1=k2=k3=67.51;
  c1=c2=c3=0.01;
这样是否可行楼主应该自己验证

评分

1

查看全部评分

发表于 2007-4-18 19:18 | 显示全部楼层
m1=m2=31.2 这样确实不行, 我试过了
 楼主| 发表于 2007-4-18 21:52 | 显示全部楼层

错误照旧

我今天反复验证了,并把它们分开赋值,但错误内容还是一样,我想请问一下,对于这样的矩阵格式,在对x0赋值的时候,应当怎么样进行复制,是应当赋值成x0=[0,0,0;0,0,0]这样的格式,我觉得我的m文件在计算矩阵的时候出现了错误,但我将m,c,k,都赋值为常数的时候,完全可行,请各位大师看看我的m文件在最后计算z的时候是不是出了问题,小弟因为导师的任务现在每天都愁得不行啊,希望能得到你们更大的帮助,谢谢,我想ode在计算这样含有矩阵的微分方程的时候是不是用法有什么特别的地方啊
 楼主| 发表于 2007-4-18 21:55 | 显示全部楼层

补充

x0=[0,0;0,0;0,0]还是应当是这样的形式,对于这样的方程它的解应当是两个3*2的行列式

[ 本帖最后由 eight 于 2007-4-18 23:44 编辑 ]
发表于 2007-4-18 23:47 | 显示全部楼层
原帖由 猴王 于 2007-4-16 21:13 发表
这个是我的m文件,这是一个关于动力微分方程的二阶求解的问题,它的动力方程是这样的mv''+kv+bv'=f,以为结构是多自由度体系,所以我定义是个3*3的矩阵
function z=zhendong(t,x)
  F=;
  m1=m2=m3=31.2;
   ...



随便看看就找到以下两个有问题的地方:

1. 'zhendongjuzhen' 这个函数根本不存在
2. 在 zhendong 函数中,c1 c2 c3 没有定义

建议还是老老实实看看基础书吧。我不相信你的导师今天要你做这个东西,明天要你给他一个结果,如果他真的如此,你跟了他算你不走运。但是,如果是早就给你的题目,你应该早就作准备了
 楼主| 发表于 2007-4-19 09:45 | 显示全部楼层

回复八楼

也许你说的对,但我原来都在海南出差,好不容易才买到一本基础书,现在让我在海南好好学习这个,你让我怎么学,原来的m文件中的zhendong已经改成了zhendongjuzhen,c1,c2,c3也已经赋值,我诚恳地接受你的批评,但导师真的很着急,要不我也不用这样天天把自己需要解决的东西发过来请你来解决了,我很相信你的能力,但能否请你好好的阅读我的帖子,再下结论
发表于 2007-4-19 09:50 | 显示全部楼层
我很相信你的能力


我对微分方程的东西不在行,只是平时对版面整理的时候偶尔会碰到,所以帮不到你

[ 本帖最后由 eight 于 2007-4-19 16:04 编辑 ]
 楼主| 发表于 2007-4-19 10:34 | 显示全部楼层

回复

谢谢,谢谢你的帮助
发表于 2007-4-19 10:45 | 显示全部楼层
zhendongjuzhen.m  
function z=zhendongjuzhen(t,x)
-------------------------------------------------------------
F=[25;24;20];
===================
  m1=m2=m3=31.2;

  k1=k2=k3=67.51;
  c1=c2=c3=0.01;
====================不对,不能这样赋值,要分别赋值。
  M=[m1,0,0;0,m2,0;0,0,m3];
  B=[c1+c2,-c2,0;-c2,c2+c3,-c3;0,-c3,c3];
  K=[k1+k2,-k2,0;-k2,k2+k3,-k3;0,-k3,k3];
z=[x(2);inv(M)*(F-B*x(2)-K*x(1))];==========这行也不对,矩阵的维数变了,并且对-----------所在的行定义x=zeros(3,1)
执行文件:
   t0=0;
   tfinal=3;
   x0=[0,0;0,0;0,0];----------------------初始条件是个向量,不是矩阵
   tol=0.001;----------------------------------------最大容许无处可以用options=odeset设置
   trace=0;-----------------不知道你的目的
   [t,x]=ode23('zhendongjuzhen',t0,tfinal,x0,tol,trace);------------------不对,ode23('zhendongjuzhen',[t0,tfinal],x0,options);
   d=x[:,1];-----------x(:,1)
   v=x[:,2]------------x(:,2)
其他的错误还没有看出来,因为错误可能太多了

[ 本帖最后由 eight 于 2007-4-19 10:54 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2007-4-19 15:58 | 显示全部楼层

十分感谢

我想请教几个问题, 如果想实现 f=B*x(2),B=[0.02,-0.01,0;-0.01,0.02,-0.01;0,-0.01,0.01], x(2)=[1,;2,;3] 这个定义x(2)=zeros(3,1)应该放在什么位置,我在计算的时候出现了
=============================
???  In an assignment  A(I) = B, the number of elements in B and
I must be the same.
==============================
不知道该怎么实现阿,不好意思,现在确实是没时间了,出差在外也没有合适的人可以当面请教,麻烦了,可以加我吗284285603谢谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 05:47 , Processed in 0.082652 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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