nixon003 发表于 2007-5-30 16:55

关于M函数文件运行时参数传递的问题【已解决】

function f=handpp(x) %x是一六维数组运行时输入,如x=
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;
                         forL3=0:0.1:1;   
A1=;
A2=;
   A3=;
   A4=;
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 编辑 ]

xjzuo 发表于 2007-5-30 17:04

for 循环太多了。
另:去掉 clear all 试试

nixon003 发表于 2007-5-30 17:41

一些体会

关于??? Reference to a cleared variable x.这个我试着在命令窗口内打入x=【】(里面内容自定),然后再打入handpp(x),可以运行,另外一楼大侠的意见我听取了,减少了三个for,果然可以出结果。但是这道题确实要六个变量呀。还请哪位大侠运行一下,帮忙看看。不胜感激。感谢xjzuo的指教。

eight 发表于 2007-5-30 19:02

原帖由 nixon003 于 2007-5-30 16:55 发表 http://www.chinavib.com/forum/images/common/back.gif
function f=handpp(x) %x是一六维数组运行时输入,如x=
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 没有定义了

nixon003 发表于 2007-5-30 20:56

谢谢楼上两位大侠的建议,我已经把clear all去掉了。但是还是会出现x未定义,但不要紧只要输入x数组没问题的。只是如果是六个for循环的话似乎会陷入死循环,我再检查一下。反正三个for循环是没问题的。这里再次真诚感谢各位大侠。

nixon003 发表于 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 编辑 ]

eight 发表于 2007-5-30 21:18

关于matlab的变量不用声明,我发现许多程序在运行时都会给出未定义变量的警告

建议看看 写给学习matlab的新手们 这个精华贴

yanshutianshi 发表于 2008-4-10 10:36

这个不错!:handshake
页: [1]
查看完整版本: 关于M函数文件运行时参数传递的问题【已解决】