声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5186|回复: 7

[编程技巧] 关于M函数文件运行时参数传递的问题【已解决】

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

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

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

x
function f=handpp(x) %x是一六维数组运行时输入,如x=[90,90,60,1,1.5,0.3]
clc;
clear all;
close all;
th1=x(1)*pi/180;
th2=x(2)*pi/180;
th3=x(3)*pi/180;
  L1=x(4);L2=x(5);L3=x(6);
   for th1=0:pi/36:2*pi;
       for th2=0:pi/36:2*pi;
            for th3=0:pi/36:2*pi;
                for L1=0:0.1:1.5;
                    for L2=0:0.1:2;
                         for  L3=0:0.1:1;   
  A1=[1,0,0,L1;0,1,0,0;0,0,1,0;0,0,0,1];
  A2=[cos(th1),0,sin(th1),0;sin(th1),0,-cos(th1),0;0,1,0,1;0,0,0,1];
   A3=[cos(th2),0,sin(th2),0;sin(th2),0,-cos(th2),0;0,1,0,L2;0,0,0,1];
   A4=[cos(th3),0,sin(th3),0;sin(th3),0,-cos(th3),0;0,1,0,L3;0,0,0,1];
  A= A1*A2*A3*A4;
            end
          end
        end
      end                    
    end;
  end
f=A;
怎么运行是老出现:??? Reference to a cleared variable x.
Error in ==> handpp at 5
th1=x(1)*pi/180;
matlab的参数是如何传递的,我觉得是这样呀。望哪位大虾解答一下,不胜感激。

[ 本帖最后由 nixon003 于 2007-5-30 21:13 编辑 ]

handpp.m

767 Bytes, 下载次数: 7

回复
分享到:

使用道具 举报

发表于 2007-5-30 17:04 | 显示全部楼层
for 循环太多了。
另:去掉 clear all 试试
 楼主| 发表于 2007-5-30 17:41 | 显示全部楼层

一些体会

关于??? Reference to a cleared variable x.这个我试着在命令窗口内打入x=【】(里面内容自定),然后再打入handpp(x),可以运行,另外一楼大侠的意见我听取了,减少了三个for,果然可以出结果。但是这道题确实要六个变量呀。还请哪位大侠运行一下,帮忙看看。不胜感激。感谢xjzuo的指教。
发表于 2007-5-30 19:02 | 显示全部楼层
原帖由 nixon003 于 2007-5-30 16:55 发表
function f=handpp(x) %x是一六维数组运行时输入,如x=[90,90,60,1,1.5,0.3]
clc;
clear all;
close all;
th1=x(1)*pi/180;
th2=x(2)*pi/180;
th3=x(3)*pi/180;
  L1=x(4);L2=x(5);L3=x(6);
   for th ...



你在函数体里使用 clear all,不就把输入变量 x 也一同删除了吗?这就难怪 matlab 会认为你后面使用的 x 没有定义了
 楼主| 发表于 2007-5-30 20:56 | 显示全部楼层
谢谢楼上两位大侠的建议,我已经把clear all去掉了。但是还是会出现x未定义,但不要紧只要输入x数组没问题的。只是如果是六个for循环的话似乎会陷入死循环,我再检查一下。反正三个for循环是没问题的。这里再次真诚感谢各位大侠。
 楼主| 发表于 2007-5-30 21:12 | 显示全部楼层

问题已解决

多谢各位大侠的关心,看来不是死循环,而是运行时间比较长,我以为是死循环的。结果出来了。
ans =

    1.0000   -0.0000         0    1.0000
         0    0.0000    1.0000   -1.5000
   -0.0000   -1.0000    0.0000    0.8000
         0         0         0    1.0000
通过这次我总结出几个经验:1不要乱用clear all;特别是在函数文件里(命令流文件没这么严,但也要慎重。2关于matlab的变量不用声明,我发现许多程序在运行时都会给出未定义变量的警告,但这是在命令窗口内按你定义的输入变量(或是数组或是单个的变量)输入,一般都可搞定。再一次谢谢这个论坛。

[ 本帖最后由 eight 于 2007-5-30 21:17 编辑 ]

评分

1

查看全部评分

发表于 2007-5-30 21:18 | 显示全部楼层
关于matlab的变量不用声明,我发现许多程序在运行时都会给出未定义变量的警告


建议看看 写给学习matlab的新手们 这个精华贴
发表于 2008-4-10 10:36 | 显示全部楼层
这个不错!:handshake
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-6-17 01:12 , Processed in 0.096505 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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