wishandlee 发表于 2006-6-1 13:11

[求助]两个M文件之间如何调用函数啊?

请看下面的牛顿插值的例子<br>function =chashang(x,y)<br>n=length(x);<br>x=reshape(x,n,1);<br>p(:,1)=x;<br>p(:,2)=reshape(y,n,1);<br>for j=3:n+1<br>    p(1:n+2-j,j)=diff(p(1:n+3-j,j-1)) ./ (x(j-1:n)-x(1:n+2-j));<br>end<br>q=p(1,2:n+1)';<br>function yh=newton(x,y,xh) <br>=chashang(x,y); <br>n=length(x); <br>m=length(xh); <br>x=reshape(x,1,n);<br>xh=reshape(xh,m,1);<br>xh=xh*ones(1,n) - ones(m,1)*x; <br>xh=xh'; <br>yh=y(1)*ones(1,m); <br>for i=2 : n <br>    yh=yh + q(i)*prod(xh(1:i-1,:),1); <br>end <br>yh<br><br>老是提示没有定义newton函数,为什么??
[此贴子已经被cdwxg于2006-6-1 13:26:48编辑过]

jj1052103 发表于 2006-6-1 15:17

回复:(wishandlee)[求助]两个M文件之间如何调用函数...

matlab中第一个出现的函数为主函数,其它函数为子函数,外部程序只能对主函数进行调用,程序中chashang为主函数,所以提示没定义,你把两个函数的位置换一下,可能就行了。
[此贴子已经被cdwxg于2006-6-1 15:33:54编辑过]

cdwxg 发表于 2006-6-1 15:36

function yh=newton(x,y,xh) <BR>=chashang(x,y); <BR>n=length(x); <BR>m=length(xh); <BR>x=reshape(x,1,n);<BR>xh=reshape(xh,m,1);<BR>xh=xh*ones(1,n) - ones(m,1)*x; <BR>xh=xh'; <BR>yh=y(1)*ones(1,m); <BR>for i=2 : n <BR>    yh=yh + q(i)*prod(xh(1:i-1,:),1); <BR>end <BR>function =chashang(x,y)<BR>n=length(x);<BR>x=reshape(x,n,1);<BR>p(:,1)=x;<BR>p(:,2)=reshape(y,n,1);<BR>for j=3:n+1<BR>    p(1:n+2-j,j)=diff(p(1:n+3-j,j-1)) ./ (x(j-1:n)-x(1:n+2-j));<BR>end<BR>q=p(1,2:n+1)';<BR><BR>二楼说的不错哈。你看下是否是你要的结果呢?不是的话再说是什么问题。

wishandlee 发表于 2006-6-2 20:58

<P>我那样试了,系统提示:??? Undefined command/function 'newton'.<BR></P>

cdwxg 发表于 2006-6-3 00:08

是不是你的matlab版本问题啊?<BR>我怎么是可以的呢?

wishandlee 发表于 2006-6-8 17:23

<P>我的是Matlab 7.0.1的,够新吧</P>

bainhome 发表于 2006-6-8 18:29

两个M程序的调用,总要有一个被另一个调用。你的两个程序,到底谁调用谁?<BR>=================================================<BR>随手写一个,里面的语句有几个其实没有必要,是为了显示一下参数传递的过程而设: <BR>function private_call <BR>v=sub_first; <BR>d=sub_second; <BR>plot(v,d,'b+') <BR><BR>function v_pass=sub_first <BR>global v_pass <BR>v_pass=linspace(0,5,100); <BR><BR>function d=sub_second <BR>global v_pass <BR>d=v_pass.^3; <BR>主函数是第一个,下面两个是子函数,参数传递我是用全局变量在两个子函数之间传递的,同样主、子函数之间也可以,但大的程序我选择用结构数组和varargin和varargout做成cell传递,上面所有的放在一个M文件里. <BR>

prettybudd 发表于 2006-6-11 09:54

Error in ==&gt; D:\ProgramFiles\work\newton.m<BR>On line 4==&gt; =chashang(x,y); <BR>什么原因:我的是6.5的<BR>
页: [1]
查看完整版本: [求助]两个M文件之间如何调用函数啊?