声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1680|回复: 7

[编程技巧] 怎么按列调入数据?

[复制链接]
发表于 2008-7-11 17:00 | 显示全部楼层 |阅读模式

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

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

x
现在有一个3*1000的矩阵
我想按列调入另一个循环程序的子程序中
主程序是和时间相关的
主程序每执行子程序一次
就调入一列这个矩阵的数据
该怎么实现呢??

求助!!
谢谢!!
回复
分享到:

使用道具 举报

发表于 2008-7-11 17:10 | 显示全部楼层
数据的读取,直接读就行。假设数据存在A中:
A(:,K)就是第k列的数据了,根据需要取k的值就行了。

注意“冒号运算符”的使用
 楼主| 发表于 2008-7-11 17:21 | 显示全部楼层

回复 2楼 的帖子

主要是那个ode45函数
现在他是一个黑箱
怎么知道他执行的步数呢?
 楼主| 发表于 2008-7-11 17:29 | 显示全部楼层
也许没把问题表达清楚,请看下边的例子:

主程序:
u0 = [pi;-pi/2;pi/2;0;0;0];
step = 0.01;
t0 = 0;
tf = 100;
tspan=[t0:step:tf];
[t,u] = ode45(@mysysdelay,tspan,u0);


子程序:
function du = mysysdelay(t,u)

w = importdata('w.mat');  % (调入整体矩阵)

J = p+w(:,i);   %取出w的一列和p相加
du(1) = J(1);
du(2) = J(2);

想实现这个目的,该怎么编写程序呢??

谢谢!!
发表于 2008-7-11 17:42 | 显示全部楼层
熟悉ode函数的看下什么问题,我没matlab
发表于 2008-7-11 21:32 | 显示全部楼层

回复 4楼 的帖子

楼主的这个子程序中的u是在表达式中那里出现的?
好像du(1) = J(1);
du(2) = J(2);,
中都没有?

另外,ode45是变步长的,控制需要用events函数
 楼主| 发表于 2008-7-11 22:24 | 显示全部楼层

回复 6楼 的帖子

u是一个列向量,就是写成的微分方程表达形式的y,du就是yp
前边还有好多计算的表达式,太长了,贴出来怕大家看着没耐心,就简化之后找了个简单的例子说明问题。。。。

主程序(解微分方程的程序:ode45函数)执行的时候,应该是每执行一步,调用一下子程序(微分方程的m文件),我现在就是需要在这个子程序中,让他每次执行的时候,也只调用我数组的其中一列。。。。

这个该怎么解决呢???

谢谢无水!!!

[ 本帖最后由 wxl789 于 2008-7-11 22:34 编辑 ]
发表于 2008-12-6 00:25 | 显示全部楼层
我觉得用ode时候
主函数中自变量是离散的;
但是作为被解得函数,你说的那个J = p+w(:,i); 他们只是系数,他们随t的变化是一一对应的,不可能一个时刻t对应一列系数,所以说你的程序有问题
不知我这样说是不是能解决你的问题

例如:
dy/dt=f(t)*t+g(t)*t
f(t)如果作为变量,可在使用的函数中控制,不是你这个样子的
如果想外界控制变量的话
用global
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-22 23:30 , Processed in 0.062712 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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